2 National JR-800 Emulator 'eJR-800'
4 Author : Takeda.Toshiya
12 #include "../hd44102.h"
14 void JR800_IO::write_memory_mapped_io8(uint32_t addr, uint32_t data)
18 switch(addr & 0xf00) {
22 case 0x01: chip = 0; break;
23 case 0x02: chip = 1; break;
24 case 0x04: chip = 2; break;
25 case 0x08: chip = 3; break;
26 case 0x10: chip = 4; break;
27 case 0x20: chip = 5; break;
28 case 0x40: chip = 6; break;
29 case 0x80: chip = 7; break;
31 d_lcd[chip]->write(addr >> 8, data);
36 uint32_t JR800_IO::read_memory_mapped_io8(uint32_t addr)
38 const uint8_t* key_stat = emu->get_key_buffer();
42 switch(addr & 0xf00) {
46 case 0x01: chip = 0; break;
47 case 0x02: chip = 1; break;
48 case 0x04: chip = 2; break;
49 case 0x08: chip = 3; break;
50 case 0x10: chip = 4; break;
51 case 0x20: chip = 5; break;
52 case 0x40: chip = 6; break;
53 case 0x80: chip = 7; break;
55 return d_lcd[chip]->read(addr >> 8);
60 if(key_stat[0x60]) data |= 0x01; // NumPad 0
61 if(key_stat[0x61]) data |= 0x02; // NumPad 1
62 if(key_stat[0x62]) data |= 0x04; // NumPad 2
63 if(key_stat[0x63]) data |= 0x08; // NumPad 3
64 if(key_stat[0x64]) data |= 0x10; // NumPad 4
65 if(key_stat[0x65]) data |= 0x20; // NumPad 5
66 if(key_stat[0x66]) data |= 0x40; // NumPad 6
67 if(key_stat[0x67]) data |= 0x80; // NumPad 7
70 if(key_stat[0x68]) data |= 0x01; // NumPad 8
71 if(key_stat[0x69]) data |= 0x02; // NumPad 9
72 if(key_stat[0x6a]) data |= 0x04; // NumPad *
73 if(key_stat[0x6b]) data |= 0x08; // NumPad +
74 if(key_stat[0x6c]) data |= 0x10; // NumPad =
75 if(key_stat[0x6d]) data |= 0x20; // NumPad -
76 if(key_stat[0x6e]) data |= 0x40; // NumPad .
77 if(key_stat[0x6f]) data |= 0x80; // NumPad /
79 if(key_stat[0xdb]) data |= 0x04; // [ -> NumPad *
80 if(key_stat[0xe2]) data |= 0x08; // _ -> NumPad +
81 if(key_stat[0xbf]) data |= 0x10; // / -> NumPad =
82 if(key_stat[0xdd]) data |= 0x20; // ] -> NumPad -
83 if(key_stat[0xdc]) data |= 0x80; // \ -> NumPad /
86 if(key_stat[0x30]) data |= 0x01; // 0
87 if(key_stat[0x31]) data |= 0x02; // 1
88 if(key_stat[0x32]) data |= 0x04; // 2
89 if(key_stat[0x33]) data |= 0x08; // 3
90 if(key_stat[0x34]) data |= 0x10; // 4
91 if(key_stat[0x35]) data |= 0x20; // 5
92 if(key_stat[0x36]) data |= 0x40; // 6
93 if(key_stat[0x37]) data |= 0x80; // 7
96 if(key_stat[0x38]) data |= 0x01; // 8
97 if(key_stat[0x39]) data |= 0x02; // 9
98 if(key_stat[0xba]) data |= 0x04; // :
99 if(key_stat[0xbb]) data |= 0x08; // ;
100 if(key_stat[0xbc]) data |= 0x10; // ,
101 if(key_stat[0xde]) data |= 0x20; // ^
102 if(key_stat[0xbe]) data |= 0x40; // .
103 if(key_stat[0x24]) data |= 0x80; // Home
105 if(!(addr & 0x010)) {
106 if(key_stat[0x20]) data |= 0x01; // Space
107 if(key_stat[0x41]) data |= 0x02; // A
108 if(key_stat[0x42]) data |= 0x04; // B
109 if(key_stat[0x43]) data |= 0x08; // C
110 if(key_stat[0x44]) data |= 0x10; // D
111 if(key_stat[0x45]) data |= 0x20; // E
112 if(key_stat[0x46]) data |= 0x40; // F
113 if(key_stat[0x47]) data |= 0x80; // G
115 if(!(addr & 0x020)) {
116 if(key_stat[0x48]) data |= 0x01; // H
117 if(key_stat[0x49]) data |= 0x02; // I
118 if(key_stat[0x4a]) data |= 0x04; // J
119 if(key_stat[0x4b]) data |= 0x08; // K
120 if(key_stat[0x4c]) data |= 0x10; // L
121 if(key_stat[0x4d]) data |= 0x20; // M
122 if(key_stat[0x4e]) data |= 0x40; // N
123 if(key_stat[0x4f]) data |= 0x80; // O
125 if(!(addr & 0x040)) {
126 if(key_stat[0x50]) data |= 0x01; // P
127 if(key_stat[0x51]) data |= 0x02; // Q
128 if(key_stat[0x52]) data |= 0x04; // R
129 if(key_stat[0x53]) data |= 0x08; // S
130 if(key_stat[0x54]) data |= 0x10; // T
131 if(key_stat[0x55]) data |= 0x20; // U
132 if(key_stat[0x56]) data |= 0x40; // V
133 if(key_stat[0x57]) data |= 0x80; // W
135 if(!(addr & 0x080)) {
136 if(key_stat[0x58]) data |= 0x01; // X
137 if(key_stat[0x59]) data |= 0x02; // Y
138 if(key_stat[0x5a]) data |= 0x04; // Z
139 if(key_stat[0x2d]) data |= 0x08; // Ins
140 if(key_stat[0x27]) data |= 0x10; // Right
141 if(key_stat[0x26]) data |= 0x20; // Up
142 if(key_stat[0x0d]) data |= 0x40; // Enter
143 if(key_stat[0x03]) data |= 0x80; // Break
145 if(!(addr & 0x100)) {
146 if(key_stat[0x70]) data |= 0x01; // F1
147 if(key_stat[0x71]) data |= 0x02; // F2
148 if(key_stat[0x72]) data |= 0x04; // F3
149 if(key_stat[0x73]) data |= 0x08; // F4
150 if(key_stat[0x74]) data |= 0x10; // F5
151 if(key_stat[0x75]) data |= 0x20; // F6
152 if(key_stat[0x76]) data |= 0x40; // F7
153 if(key_stat[0x77]) data |= 0x80; // F8
155 if(!(addr & 0x200)) {
156 if(key_stat[0x12]) data |= 0x04; // Alt
157 if(key_stat[0x10]) data |= 0x08; // Shift
158 if(key_stat[0x11]) data |= 0x10; // Ctrl
160 return (data ^ 0xff);
165 #define STATE_VERSION 1
167 bool JR800_IO::process_state(FILEIO* state_fio, bool loading)
169 if(!state_fio->StateCheckUint32(STATE_VERSION)) {
172 if(!state_fio->StateCheckInt32(this_device_id)) {