OSDN Git Service

[VM][MZ2800] Fix crash at building VM. Thanks to http://hanabi.2ch.net/test/read...
[csp-qt/common_source_project-fm7.git] / source / src / vm / mz2800 / keyboard.cpp
index f70f54c..2b56977 100644 (file)
@@ -30,12 +30,12 @@ static const int key_map[14][8] = {
 
 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
@@ -46,7 +46,7 @@ void KEYBOARD::write_signal(int id, uint32 data, uint32 mask)
 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]) {
@@ -68,7 +68,7 @@ void KEYBOARD::event_frame()
        
        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);
                }
@@ -80,8 +80,30 @@ void KEYBOARD::event_frame()
 
 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;
+}
+