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 #include "../../statesub.h"
106 void KEYBOARD::decl_state()
108 enter_decl_state(STATE_VERSION);
110 DECL_STATE_ENTRY_FIFO(key_buf);
111 DECL_STATE_ENTRY_UINT8(kbstat);
112 DECL_STATE_ENTRY_UINT8(kbdata);
113 DECL_STATE_ENTRY_UINT8(kbint);
114 DECL_STATE_ENTRY_UINT8(kbmsk);
115 DECL_STATE_ENTRY_1D_ARRAY(table, sizeof(table));
120 void KEYBOARD::save_state(FILEIO* state_fio)
122 if(state_entry != NULL) {
123 state_entry->save_state(state_fio);
126 // state_fio->FputUint32(STATE_VERSION);
127 // state_fio->FputInt32(this_device_id);
129 // key_buf->save_state((void *)state_fio);
130 // state_fio->FputUint8(kbstat);
131 // state_fio->FputUint8(kbdata);
132 // state_fio->FputUint8(kbint);
133 // state_fio->FputUint8(kbmsk);
134 // state_fio->Fwrite(table, sizeof(table), 1);
137 bool KEYBOARD::load_state(FILEIO* state_fio)
140 if(state_entry != NULL) {
141 mb = state_entry->load_state(state_fio);
147 // if(state_fio->FgetUint32() != STATE_VERSION) {
150 // if(state_fio->FgetInt32() != this_device_id) {
153 // if(!key_buf->load_state((void *)state_fio)) {
156 // kbstat = state_fio->FgetUint8();
157 // kbdata = state_fio->FgetUint8();
158 // kbint = state_fio->FgetUint8();
159 // kbmsk = state_fio->FgetUint8();
160 // state_fio->Fread(table, sizeof(table), 1);