2 FUJITSU FMR-50 Emulator 'eFMR-50'
3 FUJITSU FMR-60 Emulator 'eFMR-60'
5 Author : Takeda.Toshiya
13 #include "../../fifo.h"
17 void KEYBOARD::initialize()
19 key_buf = new FIFO(64);
20 register_frame_event(this);
23 void KEYBOARD::release()
29 void KEYBOARD::reset()
31 memset(table, 0, sizeof(table));
33 kbstat = kbdata = kbint = kbmsk = 0;
36 void KEYBOARD::write_io8(uint32_t addr, uint32_t data)
52 uint32_t KEYBOARD::read_io8(uint32_t addr)
57 d_pic->write_signal(SIG_I8259_CHIP0 | SIG_I8259_IR1, 0, 0);
68 void KEYBOARD::event_frame()
70 if(!(kbstat & 1) && !key_buf->empty()) {
72 kbdata = key_buf->read();
74 if((kbstat & 1) && (kbmsk & 1) && !(kbint & 1)) {
76 d_pic->write_signal(SIG_I8259_CHIP0 | SIG_I8259_IR1, 1, 1);
81 void KEYBOARD::key_down(int code)
85 if(code = key_table[code]) {
86 // $11:CTRL, $10:SHIFT
87 key_buf->write(0xa0 | (table[0x11] ? 8 : 0) | (table[0x10] ? 4 : 0));
93 void KEYBOARD::key_up(int code)
97 if(code = key_table[code]) {
104 #define STATE_VERSION 1
106 bool KEYBOARD::process_state(FILEIO* state_fio, bool loading)
108 if(!state_fio->StateCheckUint32(STATE_VERSION)) {
111 if(!state_fio->StateCheckInt32(this_device_id)) {
114 if(!key_buf->process_state((void *)state_fio, loading)) {
117 state_fio->StateUint8(kbstat);
118 state_fio->StateUint8(kbdata);
119 state_fio->StateUint8(kbint);
120 state_fio->StateUint8(kbmsk);
121 state_fio->StateBuffer(table, sizeof(table), 1);