void KEYBOARD::initialize()
{
- key_stat = emu->key_buffer();
+ key_stat = emu->get_key_buffer();
column = 0;
register_frame_event(this);
}
-void KEYBOARD::write_signal(int id, uint32 data, uint32 mask)
+void KEYBOARD::write_signal(int id, uint32_t data, uint32_t mask)
{
if(id == SIG_KEYBOARD_COLUMN) {
column = data & mask; // from z80pio port a
void KEYBOARD::event_frame()
{
// update key status
- uint8 buf[256];
+ uint8_t buf[256];
memcpy(buf, key_stat, sizeof(buf));
if(!buf[0x10] && buf[0x21]) {
keys[0xf] = 0xff;
for(int i = 0; i <= 0xd; i++) {
- uint8 tmp = 0;
+ uint8_t tmp = 0;
for(int j = 0; j < 8; j++) {
tmp |= (buf[key_map[i][j]]) ? 0 : (1 << j);
}
void KEYBOARD::create_keystat()
{
- uint8 val = (!(column & 0x10)) ? keys[0xf] : ((column & 0xf) > 0xd) ? 0xff : keys[column & 0xf];
+ uint8_t val = (!(column & 0x10)) ? keys[0xf] : ((column & 0xf) > 0xd) ? 0xff : keys[column & 0xf];
d_pio0->write_signal(SIG_I8255_PORT_B, val, 0x80); // to i8255 port b
d_pio1->write_signal(SIG_Z80PIO_PORT_B, val, 0xff); // to z80pio port b
}
+#define STATE_VERSION 1
+
+void KEYBOARD::save_state(FILEIO* state_fio)
+{
+ state_fio->FputUint32(STATE_VERSION);
+ state_fio->FputInt32(this_device_id);
+
+ state_fio->FputUint8(column);
+}
+
+bool KEYBOARD::load_state(FILEIO* state_fio)
+{
+ if(state_fio->FgetUint32() != STATE_VERSION) {
+ return false;
+ }
+ if(state_fio->FgetInt32() != this_device_id) {
+ return false;
+ }
+ column = state_fio->FgetUint8();
+ return true;
+}
+