2 CASIO PV-2000 Emulator 'EmuGaki'
4 Author : Takeda.Toshiya
12 static const int key_map[16][8] = {
13 {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38}, // 1 2 3 4 5 6 7 8
14 {0x51, 0x57, 0x45, 0x52, 0x54, 0x59, 0x55, 0x49}, // Q W E R T Y U I
15 {0x41, 0x53, 0x44, 0x46, 0x47, 0x48, 0x4a, 0x4b}, // A S D F G H J K
16 {0x1d, 0x5a, 0x58, 0x43, 0x56, 0x42, 0x4e, 0x20}, // KANA Z X C V B N SPACE
17 {0x24, 0x00, 0x00, 0xdc, 0x30, 0xde, 0xbd, 0x39}, // HOME ? ? \ 0 ^ - 9
18 {0x00, 0x00, 0x00, 0x00, 0x50, 0xdb, 0xc0, 0x4f}, // UR DR DL UL P [ @ O
19 {0x00, 0x00, 0x27, 0x28, 0xbb, 0xdd, 0xba, 0x4c}, // R2 D2 R1 D1 ; ] : L
20 {0x00, 0x00, 0x26, 0x25, 0xbc, 0xbf, 0xbe, 0x4d}, // U2 L2 U1 L1 , / . M
21 {0x73, 0x72, 0x71, 0x70, 0xe2, 0x2e, 0x74, 0x0d}, // A3 A2 A1 A0 _ DEL MODE RET
22 {0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // STOP ? ? ? ? ? ? ?
23 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
24 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
25 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
26 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
27 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
28 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
31 void KEYBOARD::initialize()
33 joy_stat = emu->get_joy_buffer();
36 void KEYBOARD::reset()
38 memset(key_stat, 0, sizeof(key_stat));
43 void KEYBOARD::write_io8(uint32_t addr, uint32_t data)
45 intr_enb = (data == 0xf);
49 uint32_t KEYBOARD::read_io8(uint32_t addr)
55 if(key_stat[key_map[key_no][7]]) val |= 1;
56 if(key_stat[key_map[key_no][6]]) val |= 2;
57 if(key_stat[key_map[key_no][5]]) val |= 4;
58 if(key_stat[key_map[key_no][4]]) val |= 8;
61 if(key_stat[key_map[key_no][3]]) val |= 1;
62 if(key_stat[key_map[key_no][2]]) val |= 2;
63 if(key_stat[key_map[key_no][1]]) val |= 4;
64 if(key_stat[key_map[key_no][0]]) val |= 8;
66 if(joy_stat[0] & 0x02) val |= 1;
67 if(joy_stat[0] & 0x08) val |= 2;
68 if(joy_stat[1] & 0x02) val |= 4;
69 if(joy_stat[1] & 0x08) val |= 8;
70 } else if(key_no == 7) {
71 if(joy_stat[0] & 0x04) val |= 1;
72 if(joy_stat[0] & 0x01) val |= 2;
73 if(joy_stat[1] & 0x04) val |= 4;
74 if(joy_stat[1] & 0x01) val |= 8;
75 } else if(key_no == 8) {
76 if(joy_stat[0] & 0x10) val |= 1;
77 if(joy_stat[0] & 0x20) val |= 2;
78 if(joy_stat[1] & 0x10) val |= 4;
79 if(joy_stat[1] & 0x20) val |= 8;
83 if(key_stat[0x11]) val |= 1; // COLOR (CTRL)
84 if(key_stat[0x09]) val |= 2; // FUNC (TAB)
85 if(key_stat[0x10]) val |= 4; // SHIFT
91 void KEYBOARD::key_down(int code)
93 if(!(code == 0x09 || code == 0x10 || code == 0x11)) {
95 d_cpu->set_intr_line(true, true, 0);
99 if((0x30 <= code && code <= 0x5a) || (0xba <= code && code <= 0xe2)) {
100 memset(key_stat + 0x30, 0, 0x5a - 0x30 + 1);
101 memset(key_stat + 0xba, 0, 0xe2 - 0xba + 1);
106 void KEYBOARD::key_up(int code)
111 #define STATE_VERSION 1
114 bool KEYBOARD::process_state(FILEIO* state_fio, bool loading)
116 if(!state_fio->StateCheckUint32(STATE_VERSION)) {
119 if(!state_fio->StateCheckInt32(this_device_id)) {
122 state_fio->StateBuffer(key_stat, sizeof(key_stat), 1);
123 state_fio->StateInt32(key_no);
124 state_fio->StateBool(intr_enb);