2 FUJITSU FMR-50 Emulator 'eFMR-50'
3 FUJITSU FMR-60 Emulator 'eFMR-60'
5 Author : Takeda.Toshiya
13 #include "../../fifo.h"
15 void KEYBOARD::initialize()
17 key_buf = new FIFO(64);
18 register_frame_event(this);
21 void KEYBOARD::release()
27 void KEYBOARD::reset()
29 memset(table, 0, sizeof(table));
31 kbstat = kbdata = kbint = kbmsk = 0;
34 void KEYBOARD::write_io8(uint32_t addr, uint32_t data)
50 uint32_t KEYBOARD::read_io8(uint32_t addr)
55 d_pic->write_signal(SIG_I8259_CHIP0 | SIG_I8259_IR1, 0, 0);
66 void KEYBOARD::event_frame()
68 if(!(kbstat & 1) && !key_buf->empty()) {
70 kbdata = key_buf->read();
72 if((kbstat & 1) && (kbmsk & 1) && !(kbint & 1)) {
74 d_pic->write_signal(SIG_I8259_CHIP0 | SIG_I8259_IR1, 1, 1);
79 void KEYBOARD::key_down(int code)
83 if(code = key_table[code]) {
84 // $11:CTRL, $10:SHIFT
85 key_buf->write(0xa0 | (table[0x11] ? 8 : 0) | (table[0x10] ? 4 : 0));
91 void KEYBOARD::key_up(int code)
95 if(code = key_table[code]) {
102 #define STATE_VERSION 1
104 void KEYBOARD::save_state(FILEIO* state_fio)
106 state_fio->FputUint32(STATE_VERSION);
107 state_fio->FputInt32(this_device_id);
109 key_buf->save_state((void *)state_fio);
110 state_fio->FputUint8(kbstat);
111 state_fio->FputUint8(kbdata);
112 state_fio->FputUint8(kbint);
113 state_fio->FputUint8(kbmsk);
114 state_fio->Fwrite(table, sizeof(table), 1);
117 bool KEYBOARD::load_state(FILEIO* state_fio)
119 if(state_fio->FgetUint32() != STATE_VERSION) {
122 if(state_fio->FgetInt32() != this_device_id) {
125 if(!key_buf->load_state((void *)state_fio)) {
128 kbstat = state_fio->FgetUint8();
129 kbdata = state_fio->FgetUint8();
130 kbint = state_fio->FgetUint8();
131 kbmsk = state_fio->FgetUint8();
132 state_fio->Fread(table, sizeof(table), 1);