OSDN Git Service

[VM][WIP] Use namespace to devices per VMs.
[csp-qt/common_source_project-fm7.git] / source / src / vm / x1 / keyboard.cpp
index 09ddf4a..783049c 100644 (file)
@@ -2,6 +2,7 @@
        SHARP X1 Emulator 'eX1'
        SHARP X1twin Emulator 'eX1twin'
        SHARP X1turbo Emulator 'eX1turbo'
+       SHARP X1turboZ Emulator 'eX1turboZ'
 
        Author : Takeda.Toshiya
        Date   : 2013.05.01-
@@ -16,6 +17,8 @@
 #define CAPS   0xfe
 #define KANA   0xff
 
+namespace X1 {
+
 static const uint8_t matrix[15][8] = {
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //    (CMT buttons ???)
        {0x1b, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37}, //    ESC     1       2       3       4       5       6       7
@@ -124,23 +127,23 @@ uint32_t KEYBOARD::read_io8(uint32_t addr)
                        }
                        
                        // check phantom keys (thanks Mr.Sato)
-                       for(int i = 1; i < 15; i++) {
+                       for(int i = 0; i < 15; i++) {
                                if(!(column & (1 << i))) {
                                        uint8_t row_hold;
-                                       uint8_t row_byte = key_map[i];
+                                       uint8_t row_reak = key_map[i] & (~diode[i]);
                                        do {
-                                               row_hold = row_byte;
+                                               row_hold = row_reak;
                                                for(int c = 0; c < 15; c++) {
                                                        if(c != i){
-                                                               uint8_t row_bridge = (key_map[c] & (~diode[c]));
-                                                               if(row_byte & row_bridge) {
-                                                                       row_byte |= key_map[c];
+                                                               uint8_t row_bridge = key_map[c] & (~diode[c]);
+                                                               if(row_reak & row_bridge) {
+                                                                       row_reak |= row_bridge;
                                                                }
-                                                               if(row_hold != row_byte) break;
+                                                               if(row_hold != row_reak) break;
                                                        }
                                                }
-                                       } while(row_hold != row_byte);
-                                       value |= row_byte;
+                                       } while(row_hold != row_reak);
+                                       value |= key_map[i] | row_reak;
                                }
                        }
                        return ~value;
@@ -163,27 +166,18 @@ void KEYBOARD::key_down(int code, bool repeat)
 
 #define STATE_VERSION  1
 
-void KEYBOARD::save_state(FILEIO* state_fio)
+bool KEYBOARD::process_state(FILEIO* state_fio, bool loading)
 {
-       state_fio->FputUint32(STATE_VERSION);
-       state_fio->FputInt32(this_device_id);
-       
-       state_fio->FputUint8(caps_locked);
-       state_fio->FputUint8(kana_locked);
-       state_fio->FputUint16(column);
+       if(!state_fio->StateCheckUint32(STATE_VERSION)) {
+               return false;
+       }
+       if(!state_fio->StateCheckInt32(this_device_id)) {
+               return false;
+       }
+       state_fio->StateUint8(caps_locked);
+       state_fio->StateUint8(kana_locked);
+       state_fio->StateUint16(column);
+       return true;
 }
 
-bool KEYBOARD::load_state(FILEIO* state_fio)
-{
-       if(state_fio->FgetUint32() != STATE_VERSION) {
-               return false;
-       }
-       if(state_fio->FgetInt32() != this_device_id) {
-               return false;
-       }
-       caps_locked = state_fio->FgetUint8();
-       kana_locked= state_fio->FgetUint8();
-       column = state_fio->FgetUint16();
-       return true;
 }
-