X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=source%2Fsrc%2Fvm%2Fsmc777%2Fsmc777.cpp;h=4ecfd19dabdeffb343a86751e7fb50a0a1ae601a;hb=90a1d498c79c26d69c78435600856b152aa07291;hp=f186bff81134be32b53b92c9996bc54a386b7b5f;hpb=876abe285d288971e70d4ca8267cf5bf13d2a498;p=csp-qt%2Fcommon_source_project-fm7.git diff --git a/source/src/vm/smc777/smc777.cpp b/source/src/vm/smc777/smc777.cpp index f186bff81..4ecfd19da 100644 --- a/source/src/vm/smc777/smc777.cpp +++ b/source/src/vm/smc777/smc777.cpp @@ -37,7 +37,7 @@ // initialize // ---------------------------------------------------------------------------- -VM::VM(EMU* parent_emu) : emu(parent_emu) +VM::VM(EMU* parent_emu) : VM_TEMPLATE(parent_emu) { // create devices first_device = last_device = NULL; @@ -112,9 +112,13 @@ VM::VM(EMU* parent_emu) : emu(parent_emu) #endif // 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 < MAX_DRIVE; i++) { fdc->set_drive_type(i, DRIVE_TYPE_2DD); // 1DD fdc->set_drive_rpm(i, 600); @@ -264,6 +268,16 @@ void VM::key_up(int code) memory->key_down_up(code, false); } +bool VM::get_caps_locked() +{ + return memory->get_caps_locked(); +} + +bool VM::get_kana_locked() +{ + return memory->get_kana_locked(); +} + // ---------------------------------------------------------------------------- // user interface // ---------------------------------------------------------------------------- @@ -301,11 +315,13 @@ uint32_t VM::is_floppy_disk_accessed() void VM::play_tape(int drv, const _TCHAR* file_path) { drec->play_tape(file_path); +// drec->set_remote(true); } void VM::rec_tape(int drv, const _TCHAR* file_path) { drec->rec_tape(file_path); +// drec->set_remote(true); } void VM::close_tape(int drv) @@ -313,6 +329,7 @@ void VM::close_tape(int drv) emu->lock_vm(); drec->close_tape(); emu->unlock_vm(); +// drec->set_remote(false); } bool VM::is_tape_inserted(int drv) @@ -375,12 +392,33 @@ void VM::update_config() } } -#define STATE_VERSION 3 +#define STATE_VERSION 4 + +#include "../../statesub.h" +#include "../../qt/gui/csp_logger.h" +extern CSP_Logger DLL_PREFIX_I *csp_logger; + +void VM::decl_state(void) +{ +#if defined(_SMC70) + state_entry = new csp_state_utils(STATE_VERSION, 0, (_TCHAR *)(_T("CSP::SMC_70_HEAD")), csp_logger); +#elif defined(_SMC777) + state_entry = new csp_state_utils(STATE_VERSION, 0, (_TCHAR *)(_T("CSP::SMC_777_HEAD")), csp_logger); +#else + state_entry = new csp_state_utils(STATE_VERSION, 0, (_TCHAR *)(_T("CSP::SMC_70_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); + //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); } @@ -388,7 +426,15 @@ void VM::save_state(FILEIO* state_fio) bool VM::load_state(FILEIO* state_fio) { - if(state_fio->FgetUint32() != STATE_VERSION) { + //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) {