X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=source%2Fsrc%2Fvm%2Fmz5500%2Fmz5500.cpp;h=e8548f27646487157e8160e69fe3572348843bc8;hb=1a7386afa4c2ce25de158ba8285bc795446a8584;hp=117206722c19aa29d8a9cb3be1aeb639069073cb;hpb=75c44472a1250625fba8d2835934e592cabb5a14;p=csp-qt%2Fcommon_source_project-fm7.git diff --git a/source/src/vm/mz5500/mz5500.cpp b/source/src/vm/mz5500/mz5500.cpp index 117206722..e8548f276 100644 --- a/source/src/vm/mz5500/mz5500.cpp +++ b/source/src/vm/mz5500/mz5500.cpp @@ -41,9 +41,14 @@ #include "display.h" #include "keyboard.h" -#include "memory.h" +#include "./memory.h" #include "sysport.h" +using MZ5500::DISPLAY; +using MZ5500::KEYBOARD; +using MZ5500::MEMORY; +using MZ5500::SYSPORT; + // ---------------------------------------------------------------------------- // initialize // ---------------------------------------------------------------------------- @@ -231,10 +236,12 @@ VM::VM(EMU* parent_emu) : VM_TEMPLATE(parent_emu) io->set_iomap_range_r(0x270, 0x27f, sysport); // initialize all devices +#if defined(__GIT_REPO_VERSION) + strncpy(_git_revision, __GIT_REPO_VERSION, sizeof(_git_revision) - 1); +#endif for(DEVICE* device = first_device; device; device = device->next_device) { device->initialize(); } - decl_state(); for(int i = 0; i < 4; i++) { #if defined(_MZ6500) || defined(_MZ6550) fdc->set_drive_type(i, DRIVE_TYPE_2HD); @@ -428,57 +435,36 @@ void VM::update_config() #define STATE_VERSION 5 -#include "../../statesub.h" -#include "../../qt/gui/csp_logger.h" -extern CSP_Logger DLL_PREFIX_I *csp_logger; - -void VM::decl_state(void) -{ -#if defined(_MZ5500) - state_entry = new csp_state_utils(STATE_VERSION, 0, (_TCHAR *)(_T("CSP::MZ_5500_HEAD")), csp_logger); -#elif defined(_MZ6500) - state_entry = new csp_state_utils(STATE_VERSION, 0, (_TCHAR *)(_T("CSP::MZ_6500_HEAD")), csp_logger); -#elif defined(_MZ6550) - state_entry = new csp_state_utils(STATE_VERSION, 0, (_TCHAR *)(_T("CSP::MZ_6550_HEAD")), csp_logger); -#else - state_entry = new csp_state_utils(STATE_VERSION, 0, (_TCHAR *)(_T("CSP::MZ_5500_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) +bool VM::process_state(FILEIO* state_fio, bool loading) { - //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"); + if(!state_fio->StateCheckUint32(STATE_VERSION)) { return false; } - for(DEVICE* device = first_device; device; device = device->next_device) { - if(!device->load_state(state_fio)) { + 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)) { + 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)) { + if(loading) { + printf("Data loading Error: DEVID=%d\n", device->this_device_id); + } + return false; + } + } return true; } -