OSDN Git Service

[VM] .
authorK.Ohta <whatisthis.sowhat@gmail.com>
Sun, 21 Oct 2018 12:48:44 +0000 (21:48 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Sun, 21 Oct 2018 12:48:44 +0000 (21:48 +0900)
12 files changed:
source/src/vm/pc98ha/calendar.cpp
source/src/vm/pc98ha/calendar.h
source/src/vm/pc98ha/floppy.cpp
source/src/vm/pc98ha/floppy.h
source/src/vm/pc98ha/keyboard.cpp
source/src/vm/pc98ha/keyboard.h
source/src/vm/pc98ha/memory.cpp
source/src/vm/pc98ha/memory.h
source/src/vm/pc98ha/note.cpp
source/src/vm/pc98ha/note.h
source/src/vm/pc98ha/pc98ha.cpp
source/src/vm/pc98ha/pc98ha.h

index 40b5911..6b3f65a 100644 (file)
@@ -55,48 +55,6 @@ uint32_t CALENDAR::read_io8(uint32_t addr)
 #ifdef _PC98HA
 #define STATE_VERSION  1
 
-#include "../../statesub.h"
-
-void CALENDAR::decl_state()
-{
-       enter_decl_state(STATE_VERSION);
-
-       DECL_STATE_ENTRY_UINT8(ch);
-
-       leave_decl_state();
-}
-
-void CALENDAR::save_state(FILEIO* state_fio)
-{
-       if(state_entry != NULL) {
-               state_entry->save_state(state_fio);
-       }
-//     state_fio->FputUint32(STATE_VERSION);
-//     state_fio->FputInt32(this_device_id);
-       
-//     state_fio->FputUint8(ch);
-}
-
-bool CALENDAR::load_state(FILEIO* state_fio)
-{
-       bool mb = false;
-       if(state_entry != NULL) {
-               mb = state_entry->load_state(state_fio);
-       }
-       if(!mb) {
-               return false;
-       }
-//     if(state_fio->FgetUint32() != STATE_VERSION) {
-//             return false;
-//     }
-//     if(state_fio->FgetInt32() != this_device_id) {
-//             return false;
-//     }
-//     ch = state_fio->FgetUint8();
-       return true;
-}
-#endif
-
 bool CALENDAR::process_state(FILEIO* state_fio, bool loading)
 {
        if(!state_fio->StateCheckUint32(STATE_VERSION)) {
@@ -108,3 +66,5 @@ bool CALENDAR::process_state(FILEIO* state_fio, bool loading)
        state_fio->StateUint8(ch);
        return true;
 }
+#endif
+
index 680fdd9..f5b63ac 100644 (file)
@@ -35,9 +35,7 @@ public:
        void write_io8(uint32_t addr, uint32_t data);
        uint32_t read_io8(uint32_t addr);
 #ifdef _PC98HA
-       void decl_state();
-       void save_state(FILEIO* state_fio);
-       bool load_state(FILEIO* state_fio);
+       bool process_state(FILEIO* state_fio, bool loading);
 #endif
        
        // unique function
index 1f4fe34..d0e0f5e 100644 (file)
@@ -69,51 +69,6 @@ uint32_t FLOPPY::read_io8(uint32_t addr)
 
 #define STATE_VERSION  1
 
-
-#include "../../statesub.h"
-
-void FLOPPY::decl_state()
-{
-       enter_decl_state(STATE_VERSION);
-
-       DECL_STATE_ENTRY_UINT8(ctrlreg);
-       DECL_STATE_ENTRY_UINT8(modereg);
-
-       leave_decl_state();
-}
-
-void FLOPPY::save_state(FILEIO* state_fio)
-{
-       if(state_entry != NULL) {
-               state_entry->save_state(state_fio);
-       }
-//     state_fio->FputUint32(STATE_VERSION);
-//     state_fio->FputInt32(this_device_id);
-       
-//     state_fio->FputUint8(ctrlreg);
-//     state_fio->FputUint8(modereg);
-}
-
-bool FLOPPY::load_state(FILEIO* state_fio)
-{
-       bool mb = false;
-       if(state_entry != NULL) {
-               mb = state_entry->load_state(state_fio);
-       }
-       if(!mb) {
-               return false;
-       }
-//     if(state_fio->FgetUint32() != STATE_VERSION) {
-//             return false;
-//     }
-//     if(state_fio->FgetInt32() != this_device_id) {
-//             return false;
-//     }
-//     ctrlreg = state_fio->FgetUint8();
-//     modereg = state_fio->FgetUint8();
-       return true;
-}
-
 bool FLOPPY::process_state(FILEIO* state_fio, bool loading)
 {
        if(!state_fio->StateCheckUint32(STATE_VERSION)) {
index e928413..158248b 100644 (file)
@@ -37,9 +37,7 @@ public:
        void reset();
        void write_io8(uint32_t addr, uint32_t data);
        uint32_t read_io8(uint32_t addr);
-       void decl_state();
-       void save_state(FILEIO* state_fio);
-       bool load_state(FILEIO* state_fio);
+       bool process_state(FILEIO* state_fio, bool loading);
        
        // unique function
        void set_context_fdc(UPD765A* device)
index 942cb9b..0cbc46a 100644 (file)
@@ -72,53 +72,6 @@ void KEYBOARD::key_up(int code)
 
 #define STATE_VERSION  1
 
-#include "../../statesub.h"
-
-void KEYBOARD::decl_state()
-{
-       enter_decl_state(STATE_VERSION);
-
-       DECL_STATE_ENTRY_BOOL(kana);
-       DECL_STATE_ENTRY_BOOL(caps);
-       DECL_STATE_ENTRY_1D_ARRAY(flag, sizeof(flag));
-
-       leave_decl_state();
-}
-
-void KEYBOARD::save_state(FILEIO* state_fio)
-{
-       if(state_entry != NULL) {
-               state_entry->save_state(state_fio);
-       }
-//     state_fio->FputUint32(STATE_VERSION);
-//     state_fio->FputInt32(this_device_id);
-       
-//     state_fio->FputBool(kana);
-//     state_fio->FputBool(caps);
-//     state_fio->Fwrite(flag, sizeof(flag), 1);
-}
-
-bool KEYBOARD::load_state(FILEIO* state_fio)
-{
-       bool mb = false;
-       if(state_entry != NULL) {
-               mb = state_entry->load_state(state_fio);
-       }
-       if(!mb) {
-               return false;
-       }
-//     if(state_fio->FgetUint32() != STATE_VERSION) {
-//             return false;
-//     }
-//     if(state_fio->FgetInt32() != this_device_id) {
-//             return false;
-//     }
-//     kana = state_fio->FgetBool();
-//     caps = state_fio->FgetBool();
-//     state_fio->Fread(flag, sizeof(flag), 1);
-       return true;
-}
-
 bool KEYBOARD::process_state(FILEIO* state_fio, bool loading)
 {
        if(!state_fio->StateCheckUint32(STATE_VERSION)) {
index 3b38289..148712e 100644 (file)
@@ -35,9 +35,7 @@ public:
        // common functions
        void initialize();
        void reset();
-       void decl_state();
-       void save_state(FILEIO* state_fio);
-       bool load_state(FILEIO* state_fio);
+       bool process_state(FILEIO* state_fio, bool loading);
        
        // unique functions
        void set_context_sio(DEVICE* device)
index f6b845e..1c7e7cb 100644 (file)
@@ -8,7 +8,7 @@
        [ memory ]
 */
 
-#include "memory.h"
+#include "./memory.h"
 
 #define SET_BANK(s, e, w, r) { \
        int sb = (s) >> 14, eb = (e) >> 14; \
@@ -26,7 +26,7 @@
        } \
 }
 
-void MEMORY::initialize()
+void PC98LT_MEMORY::initialize()
 {
        // init memory
        memset(ram, 0, sizeof(ram));
@@ -87,7 +87,7 @@ void MEMORY::initialize()
 #endif
 }
 
-void MEMORY::release()
+void PC98LT_MEMORY::release()
 {
        // save ram images
        FILEIO* fio = new FILEIO();
@@ -114,7 +114,7 @@ void MEMORY::release()
        delete fio;
 }
 
-void MEMORY::reset()
+void PC98LT_MEMORY::reset()
 {
        // set memory bank
        learn_bank = dic_bank = kanji_bank = romdrv_bank = 0;
@@ -126,7 +126,7 @@ void MEMORY::reset()
        update_bank();
 }
 
-void MEMORY::write_data8(uint32_t addr, uint32_t data)
+void PC98LT_MEMORY::write_data8(uint32_t addr, uint32_t data)
 {
        addr &= 0xfffff;
        wbank[addr >> 14][addr & 0x3fff] = data;
@@ -138,13 +138,13 @@ void MEMORY::write_data8(uint32_t addr, uint32_t data)
 #endif
 }
 
-uint32_t MEMORY::read_data8(uint32_t addr)
+uint32_t PC98LT_MEMORY::read_data8(uint32_t addr)
 {
        addr &= 0xfffff;
        return rbank[addr >> 14][addr & 0x3fff];
 }
 
-void MEMORY::write_io8(uint32_t addr, uint32_t data)
+void PC98LT_MEMORY::write_io8(uint32_t addr, uint32_t data)
 {
        switch(addr & 0xffff) {
 #ifdef _PC98HA
@@ -205,7 +205,7 @@ void MEMORY::write_io8(uint32_t addr, uint32_t data)
        }
 }
 
-uint32_t MEMORY::read_io8(uint32_t addr)
+uint32_t PC98LT_MEMORY::read_io8(uint32_t addr)
 {
        switch(addr & 0xffff) {
        case 0x0c10:
@@ -220,7 +220,7 @@ uint32_t MEMORY::read_io8(uint32_t addr)
        return 0xff;
 }
 
-void MEMORY::update_bank()
+void PC98LT_MEMORY::update_bank()
 {
        SET_BANK(0x00000, 0xfffff, wdmy, rdmy);
        
@@ -253,7 +253,7 @@ void MEMORY::update_bank()
        SET_BANK(0xf0000, 0xfffff, wdmy, ipl);
 }
 
-void MEMORY::draw_screen()
+void PC98LT_MEMORY::draw_screen()
 {
        // draw to real screen
        scrntype_t cd = RGB_COLOR(48, 56, 16);
@@ -278,114 +278,7 @@ void MEMORY::draw_screen()
 
 #define STATE_VERSION  1
 
-#include "../../statesub.h"
-
-void MEMORY::decl_state()
-{
-       enter_decl_state(STATE_VERSION);
-
-       DECL_STATE_ENTRY_1D_ARRAY(ram, sizeof(ram));
-       DECL_STATE_ENTRY_1D_ARRAY(vram, sizeof(vram));
-       DECL_STATE_ENTRY_1D_ARRAY(learn, sizeof(learn));
-#ifdef _PC98HA
-       DECL_STATE_ENTRY_1D_ARRAY(ramdrv, sizeof(ramdrv));
-       DECL_STATE_ENTRY_1D_ARRAY(ems, sizeof(ems));
-       DECL_STATE_ENTRY_1D_ARRAY(memcard, sizeof(memcard));
-#endif
-       DECL_STATE_ENTRY_UINT32(learn_crc32);
-#ifdef _PC98HA
-       DECL_STATE_ENTRY_UINT32(ramdrv_crc32);
-       DECL_STATE_ENTRY_UINT32(memcard_crc32);
-#endif
-       DECL_STATE_ENTRY_UINT8(learn_bank);
-       DECL_STATE_ENTRY_UINT8(dic_bank);
-       DECL_STATE_ENTRY_UINT8(kanji_bank);
-       DECL_STATE_ENTRY_UINT8(romdrv_bank);
-#ifdef _PC98HA
-       DECL_STATE_ENTRY_UINT8(ramdrv_bank);
-       DECL_STATE_ENTRY_UINT8(ramdrv_sel);
-       DECL_STATE_ENTRY_1D_ARRAY(ems_bank, sizeof(ems_bank));
-#endif
-
-       leave_decl_state();
-}
-
-void MEMORY::save_state(FILEIO* state_fio)
-{
-       if(state_entry != NULL) {
-               state_entry->save_state(state_fio);
-       }
-//     state_fio->FputUint32(STATE_VERSION);
-//     state_fio->FputInt32(this_device_id);
-       
-//     state_fio->Fwrite(ram, sizeof(ram), 1);
-//     state_fio->Fwrite(vram, sizeof(vram), 1);
-//     state_fio->Fwrite(learn, sizeof(learn), 1);
-//#ifdef _PC98HA
-//     state_fio->Fwrite(ramdrv, sizeof(ramdrv), 1);
-//     state_fio->Fwrite(ems, sizeof(ems), 1);
-//     state_fio->Fwrite(memcard, sizeof(memcard), 1);
-//#endif
-//     state_fio->FputUint32(learn_crc32);
-//#ifdef _PC98HA
-//     state_fio->FputUint32(ramdrv_crc32);
-//     state_fio->FputUint32(memcard_crc32);
-//#endif
-//     state_fio->FputUint8(learn_bank);
-//     state_fio->FputUint8(dic_bank);
-//     state_fio->FputUint8(kanji_bank);
-//     state_fio->FputUint8(romdrv_bank);
-//#ifdef _PC98HA
-//     state_fio->FputUint8(ramdrv_bank);
-//     state_fio->FputUint8(ramdrv_sel);
-//     state_fio->Fwrite(ems_bank, sizeof(ems_bank), 1);
-//#endif
-}
-
-bool MEMORY::load_state(FILEIO* state_fio)
-{
-       bool mb = false;
-       if(state_entry != NULL) {
-               mb = state_entry->load_state(state_fio);
-       }
-       if(!mb) {
-               return false;
-       }
-//     if(state_fio->FgetUint32() != STATE_VERSION) {
-//             return false;
-//     }
-//     if(state_fio->FgetInt32() != this_device_id) {
-//             return false;
-//     }
-//     state_fio->Fread(ram, sizeof(ram), 1);
-//     state_fio->Fread(vram, sizeof(vram), 1);
-//     state_fio->Fread(learn, sizeof(learn), 1);
-//#ifdef _PC98HA
-//     state_fio->Fread(ramdrv, sizeof(ramdrv), 1);
-//     state_fio->Fread(ems, sizeof(ems), 1);
-//     state_fio->Fread(memcard, sizeof(memcard), 1);
-//#endif
-//     learn_crc32 = state_fio->FgetUint32();
-//#ifdef _PC98HA
-//     ramdrv_crc32 = state_fio->FgetUint32();
-//     memcard_crc32 = state_fio->FgetUint32();
-//#endif
-//     learn_bank = state_fio->FgetUint8();
-//     dic_bank = state_fio->FgetUint8();
-//     kanji_bank = state_fio->FgetUint8();
-//     romdrv_bank = state_fio->FgetUint8();
-//#ifdef _PC98HA
-//     ramdrv_bank = state_fio->FgetUint8();
-//     ramdrv_sel = state_fio->FgetUint8();
-//     state_fio->Fread(ems_bank, sizeof(ems_bank), 1);
-//#endif
-       
-       // post process
-       update_bank();
-       return true;
-}
-
-bool MEMORY::process_state(FILEIO* state_fio, bool loading)
+bool PC98LT_MEMORY::process_state(FILEIO* state_fio, bool loading)
 {
        if(!state_fio->StateCheckUint32(STATE_VERSION)) {
                return false;
index e667562..716fac0 100644 (file)
@@ -8,8 +8,8 @@
        [ memory ]
 */
 
-#ifndef _MEMORY_H_
-#define _MEMORY_H_
+#ifndef _PC98LT_MEMORY_H_
+#define _PC98LT_MEMORY_H_
 
 #include "../vm.h"
 #include "../../emu.h"
@@ -17,7 +17,7 @@
 
 #define SIG_MEMORY_IR2 0
 
-class MEMORY : public DEVICE
+class PC98LT_MEMORY : public DEVICE
 {
 private:
        uint8_t* rbank[64];     // 1MB / 16KB
@@ -57,11 +57,11 @@ private:
 #endif
        
 public:
-       MEMORY(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       PC98LT_MEMORY(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                set_device_name(_T("Memory Bus"));
        }
-       ~MEMORY() {}
+       ~PC98LT_MEMORY() {}
        
        // common functions
        void initialize();
@@ -71,9 +71,7 @@ public:
        uint32_t read_data8(uint32_t addr);
        void write_io8(uint32_t addr, uint32_t data);
        uint32_t read_io8(uint32_t addr);
-       void decl_state();
-       void save_state(FILEIO* state_fio);
-       bool load_state(FILEIO* state_fio);
+       bool process_state(FILEIO* state_fio, bool loading);
        
        // unique functions
        uint8_t* get_vram()
index bb48ddf..381010e 100644 (file)
@@ -80,50 +80,6 @@ uint32_t NOTE::read_io8(uint32_t addr)
 
 #define STATE_VERSION  1
 
-#include "../../statesub.h"
-
-void NOTE::decl_state()
-{
-       enter_decl_state(STATE_VERSION);
-
-       DECL_STATE_ENTRY_UINT8(ch);
-       DECL_STATE_ENTRY_1D_ARRAY(regs, sizeof(regs));
-
-       leave_decl_state();
-}
-
-void NOTE::save_state(FILEIO* state_fio)
-{
-       if(state_entry != NULL) {
-               state_entry->save_state(state_fio);
-       }
-//     state_fio->FputUint32(STATE_VERSION);
-//     state_fio->FputInt32(this_device_id);
-       
-//     state_fio->FputUint8(ch);
-//     state_fio->Fwrite(regs, sizeof(regs), 1);
-}
-
-bool NOTE::load_state(FILEIO* state_fio)
-{
-       bool mb = false;
-       if(state_entry != NULL) {
-               mb = state_entry->load_state(state_fio);
-       }
-       if(!mb) {
-               return false;
-       }
-//     if(state_fio->FgetUint32() != STATE_VERSION) {
-//             return false;
-//     }
-//     if(state_fio->FgetInt32() != this_device_id) {
-//             return false;
-//     }
-//     ch = state_fio->FgetUint8();
-//     state_fio->Fread(regs, sizeof(regs), 1);
-       return true;
-}
-
 bool NOTE::process_state(FILEIO* state_fio, bool loading)
 {
        if(!state_fio->StateCheckUint32(STATE_VERSION)) {
index e6312f9..df49561 100644 (file)
@@ -32,9 +32,7 @@ public:
        void initialize();
        void write_io8(uint32_t addr, uint32_t data);
        uint32_t read_io8(uint32_t addr);
-       void decl_state();
-       void save_state(FILEIO* state_fio);
-       bool load_state(FILEIO* state_fio);
+       bool process_state(FILEIO* state_fio, bool loading);
        
        // unique function
        void set_context_pic(DEVICE* device)
index f01a7f8..96fa8d9 100644 (file)
@@ -44,7 +44,7 @@
 #include "calendar.h"
 #include "floppy.h"
 #include "keyboard.h"
-#include "memory.h"
+#include "./memory.h"
 #include "note.h"
 
 // ----------------------------------------------------------------------------
@@ -103,7 +103,7 @@ VM::VM(EMU* parent_emu) : VM_TEMPLATE(parent_emu)
        calendar = new CALENDAR(this, emu);
        floppy = new FLOPPY(this, emu);
        keyboard = new KEYBOARD(this, emu);
-       memory = new MEMORY(this, emu);
+       memory = new PC98LT_MEMORY(this, emu);
        note = new NOTE(this, emu);
        // set contexts
        event->set_context_cpu(cpu);
@@ -220,7 +220,6 @@ VM::VM(EMU* parent_emu) : VM_TEMPLATE(parent_emu)
        for(DEVICE* device = first_device; device; device = device->next_device) {
                device->initialize();
        }
-       decl_state();
 }
 
 VM::~VM()
@@ -403,76 +402,37 @@ void VM::update_config()
 
 #define STATE_VERSION  6
 
-#include "../../statesub.h"
-#include "../../qt/gui/csp_logger.h"
-extern CSP_Logger DLL_PREFIX_I *csp_logger;
-
-void VM::decl_state(void)
-{
-#if defined(_PC98HA)
-       state_entry = new csp_state_utils(STATE_VERSION, 0, (_TCHAR *)(_T("CSP::PC_98HA_HEAD")), csp_logger);
-#elif defined(_PC98LT)
-       state_entry = new csp_state_utils(STATE_VERSION, 0, (_TCHAR *)(_T("CSP::PC_98LT_HEAD")), csp_logger);
-#else
-       state_entry = new csp_state_utils(STATE_VERSION, 0, (_TCHAR *)(_T("CSP::PC_98LT_SERIES_HEAD")), csp_logger);
-#endif
-
-       for(DEVICE* device = first_device; device; device = device->next_device) {
-               device->decl_state();
-       }
-}
-
-void VM::save_state(FILEIO* state_fio)
-{
-       //state_fio->FputUint32(STATE_VERSION);
-       
-       if(state_entry != NULL) {
-               state_entry->save_state(state_fio);
-       }
-       for(DEVICE* device = first_device; device; device = device->next_device) {
-               device->save_state(state_fio);
-       }
-}
-
-bool VM::load_state(FILEIO* state_fio)
-{
-       //if(state_fio->FgetUint32() != STATE_VERSION) {
-       //      return false;
-       //}
-       bool mb = false;
-       if(state_entry != NULL) {
-               mb = state_entry->load_state(state_fio);
-       }
-       if(!mb) {
-               emu->out_debug_log("INFO: HEADER DATA ERROR");
-               return false;
-       }
-       for(DEVICE* device = first_device; device; device = device->next_device) {
-               if(!device->load_state(state_fio)) {
-                       return false;
-               }
-       }
-       return true;
-}
-
 bool VM::process_state(FILEIO* state_fio, bool loading)
 {
        if(!state_fio->StateCheckUint32(STATE_VERSION)) {
                return false;
        }
-       for(DEVICE* device = first_device; device; device = device->next_device) {
-               const char *name = typeid(*device).name() + 6; // skip "class "
+       for(DEVICE* device = first_device; device; device = device->next_device) {
+               // Note: typeid(foo).name is fixed by recent ABI.Not dec 6.
+               // const char *name = typeid(*device).name();
+               //       But, using get_device_name() instead of typeid(foo).name() 20181008 K.O
+               const char *name = device->get_device_name();
                int len = strlen(name);
                
                if(!state_fio->StateCheckInt32(len)) {
+                       if(loading) {
+                               printf("Class name len Error: DEVID=%d EXPECT=%s\n", device->this_device_id, name);
+                       }
                        return false;
                }
                if(!state_fio->StateCheckBuffer(name, len, 1)) {
-                       return false;
-               }
+                       if(loading) {
+                               printf("Class name Error: DEVID=%d EXPECT=%s\n", device->this_device_id, name);
+                       }
+                       return false;
+               }
                if(!device->process_state(state_fio, loading)) {
-                       return false;
-               }
-       }
+                       if(loading) {
+                               printf("Data loading Error: DEVID=%d\n", device->this_device_id);
+                       }
+                       return false;
+               }
+       }
+       // Machine specified.
        return true;
 }
index 35351ce..ddbeeb4 100644 (file)
@@ -97,7 +97,7 @@ class BIOS;
 class CALENDAR;
 class FLOPPY;
 class KEYBOARD;
-class MEMORY;
+class PC98LT_MEMORY;
 class NOTE;
 
 class VM : public VM_TEMPLATE
@@ -136,7 +136,7 @@ protected:
        CALENDAR* calendar;
        FLOPPY* floppy;
        KEYBOARD* keyboard;
-       MEMORY* memory;
+       PC98LT_MEMORY* memory;
        NOTE* note;
        
 public:
@@ -187,9 +187,7 @@ public:
        bool is_frame_skippable();
        
        void update_config();
-       void decl_state();
-       void save_state(FILEIO* state_fio);
-       bool load_state(FILEIO* state_fio);
+       bool process_state(FILEIO* state_fio, bool loading);
        
        // ----------------------------------------
        // for each device