2 SHARP MZ-80K/C Emulator 'EmuZ-80K'
3 SHARP MZ-1200 Emulator 'EmuZ-1200'
5 Author : Takeda.Toshiya
8 SHARP MZ-80A Emulator 'EmuZ-80A'
18 static const int key_map[10][8] = {
21 // 10KEY "00" -> 10KEY "/"
22 {0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13},
23 {0x5a, 0x00, 0x2e, 0x41, 0x51, 0x57, 0x31, 0x32},
24 {0x43, 0x58, 0x53, 0x44, 0x45, 0x52, 0x33, 0x34},
25 {0x42, 0x56, 0x46, 0x47, 0x54, 0x59, 0x35, 0x36},
26 {0x20, 0x4e, 0x48, 0x4a, 0x55, 0x49, 0x37, 0x38},
27 {0x4d, 0xbc, 0x4b, 0x4c, 0x4f, 0x50, 0x39, 0x30},
28 {0xbe, 0xbf, 0xbb, 0xba, 0xc0, 0xdb, 0xbd, 0xde},
29 {0xe2, 0x00, 0xdd, 0x0d, 0x26, 0x27, 0xdc, 0x24},
30 {0x60, 0x6f, 0x61, 0x62, 0x64, 0x65, 0x67, 0x68},
31 {0x6e, 0x00, 0x63, 0x00, 0x66, 0x6d, 0x69, 0x6b},
35 [ ^ ] [ F1] [ / ] [ * ] [ - ]
36 [ \ ] [ F2] [ 7 ] [ 8 ] [ 9 ]
37 [ [ ] [ F3] [ 4 ] [ 5 ] [ 6 ]
38 [ ] ] [ F4] [ 1 ] [ 2 ] [ 3 ]
39 [ _ ] [ F5] [ F6] [ F7] [ F8]
41 {0x31, 0x33, 0x35, 0x37, 0x39, 0xbd, 0x70, 0x6a},
42 {0x32, 0x34, 0x36, 0x38, 0x30, 0xde, 0x6f, 0x6d},
43 {0x51, 0x45, 0x54, 0x55, 0x4f, 0xc0, 0x71, 0x68},
44 {0x57, 0x52, 0x59, 0x49, 0x50, 0xdc, 0x67, 0x69},
45 {0x41, 0x44, 0x47, 0x4a, 0x4c, 0xba, 0x72, 0x65},
46 {0x53, 0x46, 0x48, 0x4b, 0xbb, 0xdb, 0x64, 0x66},
47 {0x5a, 0x43, 0x42, 0x4d, 0xbe, 0x15, 0x73, 0x62},
48 {0x58, 0x56, 0x4e, 0xbc, 0xbf, 0xdd, 0x61, 0x63},
49 {0x10, 0x2e, 0x00, 0x27, 0x0d, 0x00, 0x74, 0x76},
50 {0x24, 0x20, 0x28, 0x13, 0x00, 0xe2, 0x75, 0x77},
54 void KEYBOARD::initialize()
56 #if defined(_MZ80K) || defined(_MZ1200)
57 memset(key_buf, 0, sizeof(key_buf));
59 key_stat = emu->get_key_buffer();
65 register_frame_event(this);
68 void KEYBOARD::write_signal(int id, uint32_t data, uint32_t mask)
74 void KEYBOARD::event_frame()
76 #if defined(_MZ80K) || defined(_MZ1200)
77 if(key_buf[0x10] & 0x7f) {
78 key_buf[0x10] = (key_buf[0x10] & 0x80) | ((key_buf[0x10] & 0x7f) - 1);
80 if(key_buf[0x15] & 0x7f) {
81 key_buf[0x15] = (key_buf[0x15] & 0x80) | ((key_buf[0x15] & 0x7f) - 1);
87 void KEYBOARD::update_key()
91 #if defined(_MZ80K) || defined(_MZ1200)
92 uint8_t key10_stored = key_buf[0x10];
93 uint8_t key15_stored = key_buf[0x15];
94 memcpy(key_buf, key_stat, sizeof(key_buf));
95 key_buf[0x10] &= 0x80;
96 key_buf[0x10] |= key10_stored & 0x7f;
97 key_buf[0x15] = key15_stored & 0x7f;
99 #define key_buf key_stat
103 for(int i = 0; i < 8; i++) {
104 if(key_buf[key_map[column][i]]) {
109 d_pio->write_signal(SIG_I8255_PORT_B, stat, 0xff);
112 void KEYBOARD::key_down(int code)
114 #if defined(_MZ80K) || defined(_MZ1200)
117 key_buf[0x10] = kana ? 4 : 0;
123 #define STATE_VERSION 2
125 bool KEYBOARD::process_state(FILEIO* state_fio, bool loading)
127 if(!state_fio->StateCheckUint32(STATE_VERSION)) {
130 if(!state_fio->StateCheckInt32(this_device_id)) {
133 state_fio->StateUint8(column);
134 state_fio->StateBool(kana);