#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)) {
state_fio->StateUint8(ch);
return true;
}
+#endif
+
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
#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)) {
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)
#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)) {
// 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)
[ memory ]
*/
-#include "memory.h"
+#include "./memory.h"
#define SET_BANK(s, e, w, r) { \
int sb = (s) >> 14, eb = (e) >> 14; \
} \
}
-void MEMORY::initialize()
+void PC98LT_MEMORY::initialize()
{
// init memory
memset(ram, 0, sizeof(ram));
#endif
}
-void MEMORY::release()
+void PC98LT_MEMORY::release()
{
// save ram images
FILEIO* fio = new FILEIO();
delete fio;
}
-void MEMORY::reset()
+void PC98LT_MEMORY::reset()
{
// set memory bank
learn_bank = dic_bank = kanji_bank = romdrv_bank = 0;
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;
#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
}
}
-uint32_t MEMORY::read_io8(uint32_t addr)
+uint32_t PC98LT_MEMORY::read_io8(uint32_t addr)
{
switch(addr & 0xffff) {
case 0x0c10:
return 0xff;
}
-void MEMORY::update_bank()
+void PC98LT_MEMORY::update_bank()
{
SET_BANK(0x00000, 0xfffff, wdmy, rdmy);
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);
#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;
[ memory ]
*/
-#ifndef _MEMORY_H_
-#define _MEMORY_H_
+#ifndef _PC98LT_MEMORY_H_
+#define _PC98LT_MEMORY_H_
#include "../vm.h"
#include "../../emu.h"
#define SIG_MEMORY_IR2 0
-class MEMORY : public DEVICE
+class PC98LT_MEMORY : public DEVICE
{
private:
uint8_t* rbank[64]; // 1MB / 16KB
#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();
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()
#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)) {
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)
#include "calendar.h"
#include "floppy.h"
#include "keyboard.h"
-#include "memory.h"
+#include "./memory.h"
#include "note.h"
// ----------------------------------------------------------------------------
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);
for(DEVICE* device = first_device; device; device = device->next_device) {
device->initialize();
}
- decl_state();
}
VM::~VM()
#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;
}
class CALENDAR;
class FLOPPY;
class KEYBOARD;
-class MEMORY;
+class PC98LT_MEMORY;
class NOTE;
class VM : public VM_TEMPLATE
CALENDAR* calendar;
FLOPPY* floppy;
KEYBOARD* keyboard;
- MEMORY* memory;
+ PC98LT_MEMORY* memory;
NOTE* note;
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