2 CANON BX-1 Emulator 'eBX-1'
4 Author : Takeda.Toshiya
11 #include "../../fifo.h"
15 static const int table[256] = {
29 0x42, // 0D Enter CR/LF
43 0x4F, // 1B Escape CLEAR
48 0x41, // 20 Space SPACE
52 0x45, // 24 Home alpha^x
61 0x60, // 2D Ins INSERT
62 0x61, // 2E Del DELETE
124 0x4D, // 6C NUM Ent =
129 0x53, // 71 F2 RENAME
130 0x55, // 72 F3 PROTECT
131 0x57, // 73 F4 PROG-LIST
133 0x5B, // 75 F6 CONDENSE
134 0x5D, // 76 F7 LINE-NO.
137 0x0B, // 79 F10 SIGN CHG
139 0x0F, // 7B F12 START ?
140 0x50, // 7C F13 PROGRAM
142 0x54, // 7E F15 SECURE
143 0x56, // 7F F16 OPERATE
144 0x58, // 80 F17 TRACE
145 0x5A, // 81 F18 DISK-LIST
146 0x5C, // 82 F19 RECALL
161 0x4E, // 91 ScrLk PAPER FEED
176 0x11, // A0 L Shift SML
177 -1, // A1 R Shift (Switch F1-F8)
178 0x10, // A2 L Ctrl CAP
179 0x3C, // A3 R Ctrl UC
274 void KEYBOARD::initialize()
276 fifo_down = new FIFO(8);
279 void KEYBOARD::release()
281 fifo_down->release();
285 void KEYBOARD::reset()
290 uint32_t KEYBOARD::read_io8(uint32_t addr)
292 uint32_t value = 0xff;
294 switch(addr & 0xffff) {
296 if(!fifo_down->empty()) {
297 value = fifo_down->read_not_remove(0) | 0x80;
303 // bit7: JPN/ENG Jumper?
306 value = (config.dipswitch & 2) ? 0 : 0x20;
307 value |= (config.dipswitch & 4) ? 0 : 0x80;
313 void KEYBOARD::key_down(int code)
315 if(code >= 0x70 && code <= 0x7b && emu->get_key_buffer()[0xa1]) {
316 // Right Shift + F1-F12 -> F13-F24
319 if(table[code & 0xff] != -1) {
320 fifo_down->write(table[code & 0xff]);
324 void KEYBOARD::key_up(int code)
328 #define STATE_VERSION 2
330 bool KEYBOARD::process_state(FILEIO* state_fio, bool loading)
332 if(!state_fio->StateCheckUint32(STATE_VERSION)) {
335 if(!state_fio->StateCheckInt32(this_device_id)) {
338 if(!fifo_down->process_state((void *)state_fio, loading)) {