2 NEC N5200 Emulator 'eN5200'
4 Author : Takeda.Toshiya
13 static const int key_table[256] = {
14 -1, -1, -1, -1, -1, -1, -1, -1,0x0e,0x0f, -1, -1, -1,0x1c, -1, -1,
15 0x70,0x74,0x73,0x60, -1, -1, -1, -1, -1, -1, -1,0x00,0x35,0x51, -1, -1,
16 0x34,0x36,0x37,0x3f,0x3e,0x3b,0x3a,0x3c,0x3d, -1, -1, -1, -1,0x38,0x39, -1,
17 0x0a,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09, -1, -1, -1, -1, -1, -1,
18 0x0a,0x1d,0x2d,0x2b,0x1f,0x12,0x20,0x21,0x22,0x17,0x23,0x24,0x25,0x2f,0x2e,0x18,
19 0x19,0x10,0x13,0x1e,0x14,0x16,0x2c,0x11,0x2a,0x15,0x29, -1, -1, -1, -1, -1,
20 0x4e,0x4a,0x4b,0x4c,0x46,0x47,0x48,0x42,0x43,0x44,0x45,0x49, -1,0x40,0x50,0x41,
21 0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x60,0x61, -1, -1, -1, -1,
22 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
23 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
24 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
25 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,0x27,0x26,0x30,0x0b,0x31,0x32,
26 0x1a, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
27 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,0x1b,0x0d,0x28,0x0c, -1,
28 -1, -1,0x33, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
29 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
32 void KEYBOARD::initialize()
34 memset(flag, 0, sizeof(flag));
37 void KEYBOARD::reset()
39 kana = caps = rst = false;
42 void KEYBOARD::write_signal(int id, uint32_t data, uint32_t mask)
44 if(id == SIG_KEYBOARD_RST) {
45 bool next = ((data & mask) != 0);
48 d_sio->write_signal(SIG_I8251_RECV, 0xa0, 0xff);
49 d_sio->write_signal(SIG_I8251_RECV, 0x81, 0xff);
50 d_sio->write_signal(SIG_I8251_RECV, 0xc0, 0xff);
51 d_sio->write_signal(SIG_I8251_RECV, 0xe0, 0xff);
54 } else if(id == SIG_KEYBOARD_RECV) {
59 d_sio->write_signal(SIG_I8251_RECV, 0xa0, 0xff);
60 d_sio->write_signal(SIG_I8251_RECV, 0x81, 0xff);
61 d_sio->write_signal(SIG_I8251_RECV, 0xc0, 0xff);
62 d_sio->write_signal(SIG_I8251_RECV, 0xe0, 0xff);
67 void KEYBOARD::key_down(int code)
71 d_sio->write_signal(SIG_I8251_RECV, 0x71 | (caps ? 0 : 0x80), 0xff);
72 } else if(code == 0x15) {
74 d_sio->write_signal(SIG_I8251_RECV, 0x72 | (kana ? 0 : 0x80), 0xff);
75 } else if((code = key_table[code & 0xff]) != -1) {
77 d_sio->write_signal(SIG_I8251_RECV, code | 0x80, 0xff);
79 d_sio->write_signal(SIG_I8251_RECV, code, 0xff);
81 // d_sio->write_signal(SIG_I8251_RECV, code, 0xff);
87 void KEYBOARD::key_up(int code)
89 if((code = key_table[code & 0xff]) != -1) {
91 d_sio->write_signal(SIG_I8251_RECV, code | 0x80, 0xff);