OSDN Git Service

[VM][FM7] Fix state save/load.
[csp-qt/common_source_project-fm7.git] / source / src / vm / fm7 / keyboard.cpp
index 8d55cd1..f020953 100644 (file)
@@ -320,12 +320,14 @@ void KEYBOARD::key_down_main(void)
                        key_fifo->write(code);
                        if(scancode < 0x5c) {
                                double usec = (double)repeat_time_long * 1000.0;
-                               if(event_keyrepeat >= 0) cancel_event(this, event_keyrepeat);
-                               event_keyrepeat = -1;
+                               if((repeat_keycode == 0) && repeat_mode) {
+                                       if(event_keyrepeat >= 0) cancel_event(this, event_keyrepeat);
+                                       event_keyrepeat = -1;
+                                       register_event(this,
+                                                                  ID_KEYBOARD_AUTOREPEAT_FIRST,
+                                                                  usec, false, &event_keyrepeat);
+                               }
                                repeat_keycode = (uint8_t)scancode;
-                               if(repeat_mode) register_event(this,
-                                                                                          ID_KEYBOARD_AUTOREPEAT_FIRST,
-                                                                                          usec, false, &event_keyrepeat);
                        }
                }
        }
@@ -1062,6 +1064,7 @@ void KEYBOARD::save_state(FILEIO *state_fio)
 {
        state_fio->FputUint32_BE(STATE_VERSION);
        state_fio->FputInt32_BE(this_device_id);
+       p_emu->out_debug_log("Save State: KEYBOARD: id=%d ver=%d\n", this_device_id, STATE_VERSION);
 
        // Version 1
        {
@@ -1132,6 +1135,7 @@ bool KEYBOARD::load_state(FILEIO *state_fio)
        
        version = state_fio->FgetUint32_BE();
        if(this_device_id != state_fio->FgetInt32_BE()) return false;
+       p_emu->out_debug_log("Load State: KEYBOARD: id=%d ver=%d\n", this_device_id, version);
 
        if(version >= 1) {
                keycode_7 = state_fio->FgetUint32_BE();
@@ -1193,7 +1197,7 @@ bool KEYBOARD::load_state(FILEIO *state_fio)
                did_hidden_message_av_1 = state_fio->FgetBool();
 #endif
        }
-       if(version == 2) {
+       if(version == STATE_VERSION) {
                return true;
        }
        return false;