From aceae4e764439f1847620868f05444a15679bfe9 Mon Sep 17 00:00:00 2001 From: "K.Ohta" Date: Sun, 21 Oct 2018 21:48:44 +0900 Subject: [PATCH] [VM] . --- source/src/vm/pc98ha/calendar.cpp | 44 +------------ source/src/vm/pc98ha/calendar.h | 4 +- source/src/vm/pc98ha/floppy.cpp | 45 ------------- source/src/vm/pc98ha/floppy.h | 4 +- source/src/vm/pc98ha/keyboard.cpp | 47 -------------- source/src/vm/pc98ha/keyboard.h | 4 +- source/src/vm/pc98ha/memory.cpp | 129 ++++---------------------------------- source/src/vm/pc98ha/memory.h | 14 ++--- source/src/vm/pc98ha/note.cpp | 44 ------------- source/src/vm/pc98ha/note.h | 4 +- source/src/vm/pc98ha/pc98ha.cpp | 84 +++++++------------------ source/src/vm/pc98ha/pc98ha.h | 8 +-- 12 files changed, 48 insertions(+), 383 deletions(-) diff --git a/source/src/vm/pc98ha/calendar.cpp b/source/src/vm/pc98ha/calendar.cpp index 40b591121..6b3f65aca 100644 --- a/source/src/vm/pc98ha/calendar.cpp +++ b/source/src/vm/pc98ha/calendar.cpp @@ -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 + diff --git a/source/src/vm/pc98ha/calendar.h b/source/src/vm/pc98ha/calendar.h index 680fdd908..f5b63acdc 100644 --- a/source/src/vm/pc98ha/calendar.h +++ b/source/src/vm/pc98ha/calendar.h @@ -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 diff --git a/source/src/vm/pc98ha/floppy.cpp b/source/src/vm/pc98ha/floppy.cpp index 1f4fe340c..d0e0f5e6c 100644 --- a/source/src/vm/pc98ha/floppy.cpp +++ b/source/src/vm/pc98ha/floppy.cpp @@ -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)) { diff --git a/source/src/vm/pc98ha/floppy.h b/source/src/vm/pc98ha/floppy.h index e92841366..158248bef 100644 --- a/source/src/vm/pc98ha/floppy.h +++ b/source/src/vm/pc98ha/floppy.h @@ -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) diff --git a/source/src/vm/pc98ha/keyboard.cpp b/source/src/vm/pc98ha/keyboard.cpp index 942cb9b0f..0cbc46a8c 100644 --- a/source/src/vm/pc98ha/keyboard.cpp +++ b/source/src/vm/pc98ha/keyboard.cpp @@ -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)) { diff --git a/source/src/vm/pc98ha/keyboard.h b/source/src/vm/pc98ha/keyboard.h index 3b38289e9..148712e29 100644 --- a/source/src/vm/pc98ha/keyboard.h +++ b/source/src/vm/pc98ha/keyboard.h @@ -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) diff --git a/source/src/vm/pc98ha/memory.cpp b/source/src/vm/pc98ha/memory.cpp index f6b845ec8..1c7e7cbd2 100644 --- a/source/src/vm/pc98ha/memory.cpp +++ b/source/src/vm/pc98ha/memory.cpp @@ -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; diff --git a/source/src/vm/pc98ha/memory.h b/source/src/vm/pc98ha/memory.h index e66756299..716fac0d2 100644 --- a/source/src/vm/pc98ha/memory.h +++ b/source/src/vm/pc98ha/memory.h @@ -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() diff --git a/source/src/vm/pc98ha/note.cpp b/source/src/vm/pc98ha/note.cpp index bb48ddf69..381010ef6 100644 --- a/source/src/vm/pc98ha/note.cpp +++ b/source/src/vm/pc98ha/note.cpp @@ -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)) { diff --git a/source/src/vm/pc98ha/note.h b/source/src/vm/pc98ha/note.h index e6312f94f..df495612a 100644 --- a/source/src/vm/pc98ha/note.h +++ b/source/src/vm/pc98ha/note.h @@ -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) diff --git a/source/src/vm/pc98ha/pc98ha.cpp b/source/src/vm/pc98ha/pc98ha.cpp index f01a7f8d0..96fa8d937 100644 --- a/source/src/vm/pc98ha/pc98ha.cpp +++ b/source/src/vm/pc98ha/pc98ha.cpp @@ -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; } diff --git a/source/src/vm/pc98ha/pc98ha.h b/source/src/vm/pc98ha/pc98ha.h index 35351ceb7..ddbeeb40b 100644 --- a/source/src/vm/pc98ha/pc98ha.h +++ b/source/src/vm/pc98ha/pc98ha.h @@ -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 -- 2.11.0