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