X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=source%2Fsrc%2Fvm%2Ffm7%2Fkanjirom.cpp;h=2a4b91c0b2916e70ce7f366c6cb6ef3cba54e211;hb=9657068762e0ebc1ed5a42638db31cdcdda7c9db;hp=44e6e4858511e293fcc061e3834934514af096a1;hpb=6cb889b364c5b808716c504e083e3606539f8bce;p=csp-qt%2Fcommon_source_project-fm7.git diff --git a/source/src/vm/fm7/kanjirom.cpp b/source/src/vm/fm7/kanjirom.cpp index 44e6e4858..2a4b91c0b 100644 --- a/source/src/vm/fm7/kanjirom.cpp +++ b/source/src/vm/fm7/kanjirom.cpp @@ -12,7 +12,9 @@ #include "fm7_common.h" #include "kanjirom.h" -KANJIROM::KANJIROM(VM *parent_vm, EMU* parent_emu, bool type_2std): DEVICE(parent_vm, parent_emu) +namespace FM7 { + +KANJIROM::KANJIROM(VM_TEMPLATE* parent_vm, EMU* parent_emu, bool type_2std): DEVICE(parent_vm, parent_emu) { FILEIO *fio; read_ok = false; @@ -20,25 +22,25 @@ KANJIROM::KANJIROM(VM *parent_vm, EMU* parent_emu, bool type_2std): DEVICE(paren fio = new FILEIO(); memset(data_table, 0xff, 0x20000); // read_table[0].memory = data_table; - p_emu = parent_emu; if(type_2std) { class2 = true; - if(fio->Fopen(create_local_path(_T("KANJI2.ROM")), FILEIO_READ_BINARY)) { + if(fio->Fopen(create_local_path(_T(ROM_KANJI_CLASS2)), FILEIO_READ_BINARY)) { fio->Fread(data_table, 0x20000, 1); fio->Fclose(); read_ok = true; } } else { class2 = false; - if(fio->Fopen(create_local_path(_T("KANJI1.ROM")), FILEIO_READ_BINARY)) { + if(fio->Fopen(create_local_path(_T(ROM_KANJI_CLASS1)), FILEIO_READ_BINARY)) { fio->Fread(data_table, 0x20000, 1); fio->Fclose(); read_ok = true; - } else if(fio->Fopen(create_local_path(_T("KANJI.ROM")), FILEIO_READ_BINARY)) { + } else if(fio->Fopen(create_local_path(_T(ROM_KANJI_CLASS1_FALLBACK)), FILEIO_READ_BINARY)) { fio->Fread(data_table, 0x20000, 1); fio->Fclose(); read_ok = true; - } + } + } if(class2) { set_device_name(_T("FM7_KANJI_CLASS2")); @@ -50,16 +52,23 @@ KANJIROM::KANJIROM(VM *parent_vm, EMU* parent_emu, bool type_2std): DEVICE(paren } else { set_device_name(_T("FM7_KANJI_CLASS1")); } + this->out_debug_log(_T("KANJIROM READ %s."), read_ok ? "OK" : "FAILED"); + kanjiaddr.d = 0; delete fio; return; } +KANJIROM::~KANJIROM() +{ +} + void KANJIROM::reset(void) { kanjiaddr.d = 0; } + void KANJIROM::write_data8(uint32_t addr, uint32_t data) { switch(addr) { @@ -96,37 +105,25 @@ void KANJIROM::release() { } -#define STATE_VERSION 2 -void KANJIROM::save_state(FILEIO *state_fio) -{ - state_fio->FputUint32_BE(STATE_VERSION); - state_fio->FputInt32_BE(this_device_id); - this->out_debug_log(_T("Save State: KANJIROM: id=%d ver=%d\n"), this_device_id, STATE_VERSION); - - state_fio->FputBool(class2); - state_fio->FputBool(read_ok); - state_fio->Fwrite(data_table, sizeof(data_table), 1); - state_fio->FputUint16_BE(kanjiaddr.w.l); -} +#define STATE_VERSION 5 -bool KANJIROM::load_state(FILEIO *state_fio) +bool KANJIROM::process_state(FILEIO *state_fio, bool loading) { - uint32_t version; - version = state_fio->FgetUint32_BE(); - if(this_device_id != state_fio->FgetInt32_BE()) return false; - this->out_debug_log(_T("Load State: KANJIROM: id=%d ver=%d\n"), this_device_id, version); - - if(version >= 1) { - class2 = state_fio->FgetBool(); - read_ok = state_fio->FgetBool(); - state_fio->Fread(data_table, sizeof(data_table), 1); - if(version == 1) return true; + if(!state_fio->StateCheckUint32(STATE_VERSION)) { + return false; } - if(version >= 2) { - kanjiaddr.d = 0; - kanjiaddr.w.l = state_fio->FgetUint16_BE(); - if(version == 2) return true; + if(!state_fio->StateCheckInt32(this_device_id)) { + return false; } - return false; + + state_fio->StateBool(class2); + state_fio->StateBool(read_ok); + state_fio->StateBuffer(data_table, sizeof(data_table), 1); + state_fio->StateUint32(kanjiaddr.d); + if(loading) { + kanjiaddr.w.h = 0; + } + return true; } +}