#define STATE_VERSION 1
-#include "../../statesub.h"
-
-void DISPLAY::decl_state()
-{
- enter_decl_state(STATE_VERSION);
-
- DECL_STATE_ENTRY_BOOL(chr);
- DECL_STATE_ENTRY_BOOL(wide);
- DECL_STATE_ENTRY_UINT16(cursor);
- DECL_STATE_ENTRY_UINT16(cblink);
- DECL_STATE_ENTRY_1D_ARRAY(vram, sizeof(vram));
- DECL_STATE_ENTRY_UINT16(vram_addr);
-
- leave_decl_state();
-}
-
-void DISPLAY::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(chr);
-// state_fio->FputBool(wide);
-// state_fio->FputUint16(cursor);
-// state_fio->FputUint16(cblink);
-// state_fio->Fwrite(vram, sizeof(vram), 1);
-// state_fio->FputUint16(vram_addr);
-}
-
-bool DISPLAY::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;
-// }
-// chr = state_fio->FgetBool();
-// wide = state_fio->FgetBool();
-// cursor = state_fio->FgetUint16();
-// cblink = state_fio->FgetUint16();
-// state_fio->Fread(vram, sizeof(vram), 1);
-// vram_addr = state_fio->FgetUint16();
- return true;
-}
-
bool DISPLAY::process_state(FILEIO* state_fio, bool loading)
{
if(!state_fio->StateCheckUint32(STATE_VERSION)) {
uint32_t read_io8(uint32_t addr);
void write_signal(int id, uint32_t data, uint32_t mask);
void event_frame();
- 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_crtc(HD46505* device)
#define STATE_VERSION 1
-#include "../../statesub.h"
-
-void KEYBOARD::decl_state()
-{
- enter_decl_state(STATE_VERSION);
-
- DECL_STATE_ENTRY_FIFO(key_buf);
- DECL_STATE_ENTRY_INT32(key_code);
- DECL_STATE_ENTRY_BOOL(kana);
- DECL_STATE_ENTRY_INT32(event_cnt);
-
- 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);
-
-// key_buf->save_state((void *)state_fio);
-// state_fio->FputInt32(key_code);
-// state_fio->FputBool(kana);
-// state_fio->FputInt32(event_cnt);
-}
-
-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;
-// }
-// if(!key_buf->load_state((void *)state_fio)) {
-// return false;
-// }
-// key_code = state_fio->FgetInt32();
-// kana = state_fio->FgetBool();
-// event_cnt = state_fio->FgetInt32();
- return true;
-}
-
bool KEYBOARD::process_state(FILEIO* state_fio, bool loading)
{
if(!state_fio->StateCheckUint32(STATE_VERSION)) {
void release();
void reset();
void event_frame();
- 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_cpu(DEVICE* device)
} \
}
-void MEMORY::initialize()
+void MYCOMZ80_MEMORY::initialize()
{
// init memory
memset(ram, 0, sizeof(ram));
SET_BANK_R(0x0000, 0xffff, ram);
}
-void MEMORY::reset()
+void MYCOMZ80_MEMORY::reset()
{
addr_mask = 0xc000;
rom_sel = true;
update_memory_map();
}
-void MEMORY::write_data8(uint32_t addr, uint32_t data)
+void MYCOMZ80_MEMORY::write_data8(uint32_t addr, uint32_t data)
{
addr = (addr & 0xffff) | addr_mask;
wbank[addr >> 12][addr & 0xfff] = data;
}
-uint32_t MEMORY::read_data8(uint32_t addr)
+uint32_t MYCOMZ80_MEMORY::read_data8(uint32_t addr)
{
addr = (addr & 0xffff) | addr_mask;
return rbank[addr >> 12][addr & 0xfff];
}
-void MEMORY::write_io8(uint32_t addr, uint32_t data)
+void MYCOMZ80_MEMORY::write_io8(uint32_t addr, uint32_t data)
{
// $00: system control
switch(data) {
}
}
-void MEMORY::update_memory_map()
+void MYCOMZ80_MEMORY::update_memory_map()
{
if(rom_sel) {
SET_BANK_R(0xc000, 0xefff, bios);
#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_UINT32(addr_mask);
- DECL_STATE_ENTRY_BOOL(rom_sel);
-
- 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->FputUint32(addr_mask);
-// state_fio->FputBool(rom_sel);
-}
-
-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);
-// addr_mask = state_fio->FgetUint32();
-// rom_sel = state_fio->FgetBool();
-
- // post process
- update_memory_map();
- return true;
-}
-
-bool MEMORY::process_state(FILEIO* state_fio, bool loading)
+bool MYCOMZ80_MEMORY::process_state(FILEIO* state_fio, bool loading)
{
if(!state_fio->StateCheckUint32(STATE_VERSION)) {
return false;
#include "../../emu.h"
#include "../device.h"
-class MEMORY : public DEVICE
+class MYCOMZ80_MEMORY : public DEVICE
{
private:
uint8_t* rbank[16];
void update_memory_map();
public:
- MEMORY(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+ MYCOMZ80_MEMORY(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
{
set_device_name(_T("Memory Bus"));
}
- ~MEMORY() {}
+ ~MYCOMZ80_MEMORY() {}
// common functions
void initialize();
void write_data8(uint32_t addr, uint32_t data);
uint32_t read_data8(uint32_t addr);
void write_io8(uint32_t addr, uint32_t data);
- void decl_state();
- void save_state(FILEIO* state_fio);
- bool load_state(FILEIO* state_fio);
+ bool process_state(FILEIO* state_fio, bool loading);
};
#endif
#include "display.h"
#include "keyboard.h"
-#include "memory.h"
+#include "./memory.h"
// ----------------------------------------------------------------------------
// initialize
display = new DISPLAY(this, emu);
keyboard = new KEYBOARD(this, emu);
- memory = new MEMORY(this, emu);
+ memory = new MYCOMZ80_MEMORY(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 3
-#include "../../statesub.h"
-#include "../../qt/gui/csp_logger.h"
-extern CSP_Logger DLL_PREFIX_I *csp_logger;
-
-void VM::decl_state(void)
-{
- state_entry = new csp_state_utils(STATE_VERSION, 0, (_TCHAR *)(_T("CSP::MYCOM_Z80A_HEAD")), csp_logger);
- 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;
+ }
+ }
return true;
}
class DISPLAY;
class KEYBOARD;
-class MEMORY;
+class MYCOMZ80_MEMORY;
class VM : public VM_TEMPLATE
{
DISPLAY* display;
KEYBOARD* keyboard;
- MEMORY* memory;
+ MYCOMZ80_MEMORY* memory;
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
#define STATE_VERSION 1
-#include "../../statesub.h"
-
-void CMT::decl_state()
-{
- enter_decl_state(STATE_VERSION);
-
- DECL_STATE_ENTRY_UINT8(pa);
- DECL_STATE_ENTRY_UINT8(pc);
- DECL_STATE_ENTRY_BOOL(play);
- DECL_STATE_ENTRY_BOOL(rec);
- DECL_STATE_ENTRY_BOOL(now_play);
- DECL_STATE_ENTRY_BOOL(now_rewind);
- DECL_STATE_ENTRY_INT32(register_id_frew);
- DECL_STATE_ENTRY_INT32(register_id_ffwd);
- DECL_STATE_ENTRY_INT32(register_id_fwd);
- DECL_STATE_ENTRY_INT32(register_id_stop);
- DECL_STATE_ENTRY_INT32(register_id_eject);
-#ifndef _MZ80B
- DECL_STATE_ENTRY_INT32(register_id_apss);
- DECL_STATE_ENTRY_BOOL(now_apss);
- DECL_STATE_ENTRY_BOOL(now_apss_tmp);
-#endif
- DECL_STATE_ENTRY_INT32(register_id_ipl);
-
- leave_decl_state();
-}
-
-void CMT::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(pa);
-// state_fio->FputUint8(pc);
-// state_fio->FputBool(play);
-// state_fio->FputBool(rec);
-// state_fio->FputBool(now_play);
-// state_fio->FputBool(now_rewind);
-// state_fio->FputInt32(register_id_frew);
-// state_fio->FputInt32(register_id_ffwd);
-// state_fio->FputInt32(register_id_fwd);
-// state_fio->FputInt32(register_id_stop);
-// state_fio->FputInt32(register_id_eject);
-//#ifndef _MZ80B
-// state_fio->FputInt32(register_id_apss);
-// state_fio->FputBool(now_apss);
-// state_fio->FputBool(now_apss_tmp);
-//#endif
-// state_fio->FputInt32(register_id_ipl);
-}
-
-bool CMT::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;
-// }
-// pa = state_fio->FgetUint8();
-// pc = state_fio->FgetUint8();
-// play = state_fio->FgetBool();
-// rec = state_fio->FgetBool();
-// now_play = state_fio->FgetBool();
-// now_rewind = state_fio->FgetBool();
-// register_id_frew = state_fio->FgetInt32();
-// register_id_ffwd = state_fio->FgetInt32();
-// register_id_fwd = state_fio->FgetInt32();
-// register_id_stop = state_fio->FgetInt32();
-// register_id_eject = state_fio->FgetInt32();
-//#ifndef _MZ80B
-// register_id_apss = state_fio->FgetInt32();
-// now_apss = state_fio->FgetBool();
-// now_apss_tmp = state_fio->FgetBool();
-//#endif
-// register_id_ipl = state_fio->FgetInt32();
- return true;
-}
-
bool CMT::process_state(FILEIO* state_fio, bool loading)
{
if(!state_fio->StateCheckUint32(STATE_VERSION)) {
void reset();
void write_signal(int id, uint32_t data, uint32_t mask);
void event_callback(int event_id, int err);
- 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_pio(DEVICE* device)
#define STATE_VERSION 1
-#include "../../statesub.h"
-
-void CRTC::decl_state()
-{
- enter_decl_state(STATE_VERSION);
-
- DECL_STATE_ENTRY_BOOL(scan_line);
- DECL_STATE_ENTRY_BOOL(scan_tmp);
- DECL_STATE_ENTRY_BOOL(monitor_200line);
- DECL_STATE_ENTRY_BOOL(monitor_digital);
- DECL_STATE_ENTRY_BOOL(monitor_tmp);
- DECL_STATE_ENTRY_UINT8(textreg_num);
- DECL_STATE_ENTRY_1D_ARRAY(textreg, sizeof(textreg));
- DECL_STATE_ENTRY_UINT8(cgreg_num);
- DECL_STATE_ENTRY_1D_ARRAY(cgreg, sizeof(cgreg));
- DECL_STATE_ENTRY_UINT8(scrn_size);
- DECL_STATE_ENTRY_UINT8(cg_mask);
- DECL_STATE_ENTRY_UINT8(cg_mask256);
- DECL_STATE_ENTRY_BOOL(cg_mask256_init);
- DECL_STATE_ENTRY_BOOL(font_size);
- DECL_STATE_ENTRY_BOOL(column_size);
- DECL_STATE_ENTRY_1D_ARRAY(latch, sizeof(latch));
- DECL_STATE_ENTRY_UINT16(GDEVS);
- DECL_STATE_ENTRY_UINT16(GDEVE);
- DECL_STATE_ENTRY_UINT8(GDEHS);
- DECL_STATE_ENTRY_UINT8(GDEHE);
- DECL_STATE_ENTRY_INT32(GDEHSC);
- DECL_STATE_ENTRY_INT32(GDEHEC);
- DECL_STATE_ENTRY_BOOL(hblank);
- DECL_STATE_ENTRY_BOOL(vblank);
- DECL_STATE_ENTRY_BOOL(blink);
- DECL_STATE_ENTRY_UINT8(clear_flag);
- DECL_STATE_ENTRY_1D_ARRAY(palette_reg, sizeof(palette_reg));
- DECL_STATE_ENTRY_BOOL(pal_select);
- DECL_STATE_ENTRY_BOOL(screen_mask);
- DECL_STATE_ENTRY_2D_ARRAY(priority16, 16, 9);
-
- DECL_STATE_ENTRY_SCRNTYPE_T_1D_ARRAY(palette16, 16 + 8);
- DECL_STATE_ENTRY_SCRNTYPE_T_1D_ARRAY(palette4096, 16);
- DECL_STATE_ENTRY_1D_ARRAY(palette4096r, sizeof(palette4096r));
- DECL_STATE_ENTRY_1D_ARRAY(palette4096g, sizeof(palette4096g));
- DECL_STATE_ENTRY_1D_ARRAY(palette4096b, sizeof(palette4096b));
- DECL_STATE_ENTRY_SCRNTYPE_T_1D_ARRAY(palette16txt, 9);
- DECL_STATE_ENTRY_SCRNTYPE_T_1D_ARRAY(palette4096txt, 9);
- DECL_STATE_ENTRY_SCRNTYPE_T_2D_ARRAY(palette16pri, 16, 9);
- DECL_STATE_ENTRY_SCRNTYPE_T_2D_ARRAY(palette4096pri, 16, 9);
- DECL_STATE_ENTRY_UINT8(prev16);
- DECL_STATE_ENTRY_BOOL(update16);
- DECL_STATE_ENTRY_2D_ARRAY(priority256, 256, 16+64);
- DECL_STATE_ENTRY_SCRNTYPE_T_1D_ARRAY(palette256, 256 + 16 + 64);
- DECL_STATE_ENTRY_SCRNTYPE_T_1D_ARRAY(palette256txt, 16 + 64);
- DECL_STATE_ENTRY_SCRNTYPE_T_2D_ARRAY(palette256pri, 256, 16+64);
- DECL_STATE_ENTRY_SCRNTYPE_T(prev256);
- DECL_STATE_ENTRY_BOOL(update256);
- DECL_STATE_ENTRY_2D_ARRAY(map_addr, 400, 80);
- DECL_STATE_ENTRY_2D_ARRAY(map_hdsc, 400, 80);
- DECL_STATE_ENTRY_3D_ARRAY(text_matrix, 256, 8, 8);
- DECL_STATE_ENTRY_3D_ARRAY(text_matrixw, 256, 8, 16);
- DECL_STATE_ENTRY_UINT8(trans_color);
- DECL_STATE_ENTRY_BOOL(map_init);
- DECL_STATE_ENTRY_BOOL(trans_init);
- leave_decl_state();
-}
-
-void CRTC::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(scan_line);
-// state_fio->FputBool(scan_tmp);
-// state_fio->FputBool(monitor_200line);
-// state_fio->FputBool(monitor_digital);
-// state_fio->FputBool(monitor_tmp);
-// state_fio->FputUint8(textreg_num);
-// state_fio->Fwrite(textreg, sizeof(textreg), 1);
-// state_fio->FputUint8(cgreg_num);
-// state_fio->Fwrite(cgreg, sizeof(cgreg), 1);
-// state_fio->FputUint8(scrn_size);
-// state_fio->FputUint8(cg_mask);
-// state_fio->FputUint8(cg_mask256);
-// state_fio->FputBool(cg_mask256_init);
-// state_fio->FputBool(font_size);
-// state_fio->FputBool(column_size);
-// state_fio->Fwrite(latch, sizeof(latch), 1);
-// state_fio->FputUint16(GDEVS);
-// state_fio->FputUint16(GDEVE);
-// state_fio->FputUint8(GDEHS);
-// state_fio->FputUint8(GDEHE);
-// state_fio->FputInt32(GDEHSC);
-// state_fio->FputInt32(GDEHEC);
-// state_fio->FputBool(hblank);
-// state_fio->FputBool(vblank);
-// state_fio->FputBool(blink);
-// state_fio->FputUint8(clear_flag);
-// state_fio->Fwrite(palette_reg, sizeof(palette_reg), 1);
-// state_fio->FputBool(pal_select);
-// state_fio->FputBool(screen_mask);
-// state_fio->Fwrite(priority16, sizeof(priority16), 1);
-// state_fio->Fwrite(palette16, sizeof(palette16), 1);
-// state_fio->Fwrite(palette4096, sizeof(palette4096), 1);
-// state_fio->Fwrite(palette4096r, sizeof(palette4096r), 1);
-// state_fio->Fwrite(palette4096g, sizeof(palette4096g), 1);
-// state_fio->Fwrite(palette4096b, sizeof(palette4096b), 1);
-// state_fio->Fwrite(palette16txt, sizeof(palette16txt), 1);
-// state_fio->Fwrite(palette4096txt, sizeof(palette4096txt), 1);
-// state_fio->Fwrite(palette16pri, sizeof(palette16pri), 1);
-// state_fio->Fwrite(palette4096pri, sizeof(palette4096pri), 1);
-// state_fio->FputUint8(prev16);
-// state_fio->FputBool(update16);
-// state_fio->Fwrite(priority256, sizeof(priority256), 1);
-// state_fio->Fwrite(palette256, sizeof(palette256), 1);
-// state_fio->Fwrite(palette256txt, sizeof(palette256txt), 1);
-// state_fio->Fwrite(palette256pri, sizeof(palette256pri), 1);
-// state_fio->FputUint32((uint32_t)prev256);
-// state_fio->FputBool(update256);
-// state_fio->Fwrite(map_addr, sizeof(map_addr), 1);
-// state_fio->Fwrite(map_hdsc, sizeof(map_hdsc), 1);
-// state_fio->Fwrite(text_matrix, sizeof(text_matrix), 1);
-// state_fio->Fwrite(text_matrixw, sizeof(text_matrixw), 1);
-// state_fio->FputUint8(trans_color);
-// state_fio->FputBool(map_init);
-// state_fio->FputBool(trans_init);
-}
-
-bool CRTC::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;
-// }
-// scan_line = state_fio->FgetBool();
-// scan_tmp = state_fio->FgetBool();
-// monitor_200line = state_fio->FgetBool();
-// monitor_digital = state_fio->FgetBool();
-// monitor_tmp = state_fio->FgetBool();
-// textreg_num = state_fio->FgetUint8();
-// state_fio->Fread(textreg, sizeof(textreg), 1);
-// cgreg_num = state_fio->FgetUint8();
-// state_fio->Fread(cgreg, sizeof(cgreg), 1);
-// scrn_size = state_fio->FgetUint8();
-// cg_mask = state_fio->FgetUint8();
-// cg_mask256 = state_fio->FgetUint8();
-// cg_mask256_init = state_fio->FgetBool();
-// font_size = state_fio->FgetBool();
-// column_size = state_fio->FgetBool();
-// state_fio->Fread(latch, sizeof(latch), 1);
-// GDEVS = state_fio->FgetUint16();
-// GDEVE = state_fio->FgetUint16();
-// GDEHS = state_fio->FgetUint8();
-// GDEHE = state_fio->FgetUint8();
-// GDEHSC = state_fio->FgetInt32();
-// GDEHEC = state_fio->FgetInt32();
-// hblank = state_fio->FgetBool();
-// vblank = state_fio->FgetBool();
-// blink = state_fio->FgetBool();
-// clear_flag = state_fio->FgetUint8();
-// state_fio->Fread(palette_reg, sizeof(palette_reg), 1);
-// pal_select = state_fio->FgetBool();
-// screen_mask = state_fio->FgetBool();
-// state_fio->Fread(priority16, sizeof(priority16), 1);
-// state_fio->Fread(palette16, sizeof(palette16), 1);
-// state_fio->Fread(palette4096, sizeof(palette4096), 1);
-// state_fio->Fread(palette4096r, sizeof(palette4096r), 1);
-// state_fio->Fread(palette4096g, sizeof(palette4096g), 1);
-// state_fio->Fread(palette4096b, sizeof(palette4096b), 1);
-// state_fio->Fread(palette16txt, sizeof(palette16txt), 1);
-// state_fio->Fread(palette4096txt, sizeof(palette4096txt), 1);
-// state_fio->Fread(palette16pri, sizeof(palette16pri), 1);
-// state_fio->Fread(palette4096pri, sizeof(palette4096pri), 1);
-// prev16 = state_fio->FgetUint8();
-// update16 = state_fio->FgetBool();
-// state_fio->Fread(priority256, sizeof(priority256), 1);
-// state_fio->Fread(palette256, sizeof(palette256), 1);
-// state_fio->Fread(palette256txt, sizeof(palette256txt), 1);
-// state_fio->Fread(palette256pri, sizeof(palette256pri), 1);
-// prev256 = (scrntype_t)state_fio->FgetUint32();
-// update256 = state_fio->FgetBool();
-// state_fio->Fread(map_addr, sizeof(map_addr), 1);
-// state_fio->Fread(map_hdsc, sizeof(map_hdsc), 1);
-// state_fio->Fread(text_matrix, sizeof(text_matrix), 1);
-// state_fio->Fread(text_matrixw, sizeof(text_matrixw), 1);
-// trans_color = state_fio->FgetUint8();
-// map_init = state_fio->FgetBool();
-// trans_init = state_fio->FgetBool();
- return true;
-}
-
bool CRTC::process_state(FILEIO* state_fio, bool loading)
{
if(!state_fio->StateCheckUint32(STATE_VERSION)) {
state_fio->StateBool(pal_select);
state_fio->StateBool(screen_mask);
state_fio->StateBuffer(priority16, sizeof(priority16), 1);
- state_fio->StateBuffer(palette16, sizeof(palette16), 1);
- state_fio->StateBuffer(palette4096, sizeof(palette4096), 1);
+ //state_fio->StateBuffer(palette16, sizeof(palette16), 1);
+ for(int i = 0; i < (sizeof(palette16) / sizeof(scrntype_t)); i++) {
+ if(loading) {
+ uint8_t r, g, b;
+ r = state_fio->FgetUint8();
+ g = state_fio->FgetUint8();
+ b = state_fio->FgetUint8();
+ palette16[i] = RGB_COLOR(r, g, b);
+ } else {
+ uint8_t r, g, b;
+ r = R_OF_COLOR(palette16[i]);
+ g = G_OF_COLOR(palette16[i]);
+ b = B_OF_COLOR(palette16[i]);
+ state_fio->FputUint8(r);
+ state_fio->FputUint8(g);
+ state_fio->FputUint8(b);
+ }
+ }
+ //state_fio->StateBuffer(palette4096, sizeof(palette4096), 1);
+ for(int i = 0; i < (sizeof(palette4096) / sizeof(scrntype_t)); i++) {
+ if(loading) {
+ uint8_t r, g, b;
+ r = state_fio->FgetUint8();
+ g = state_fio->FgetUint8();
+ b = state_fio->FgetUint8();
+ palette4096[i] = RGB_COLOR(r, g, b);
+ } else {
+ uint8_t r, g, b;
+ r = R_OF_COLOR(palette4096[i]);
+ g = G_OF_COLOR(palette4096[i]);
+ b = B_OF_COLOR(palette4096[i]);
+ state_fio->FputUint8(r);
+ state_fio->FputUint8(g);
+ state_fio->FputUint8(b);
+ }
+ }
state_fio->StateBuffer(palette4096r, sizeof(palette4096r), 1);
state_fio->StateBuffer(palette4096g, sizeof(palette4096g), 1);
state_fio->StateBuffer(palette4096b, sizeof(palette4096b), 1);
- state_fio->StateBuffer(palette16txt, sizeof(palette16txt), 1);
- state_fio->StateBuffer(palette4096txt, sizeof(palette4096txt), 1);
- state_fio->StateBuffer(palette16pri, sizeof(palette16pri), 1);
- state_fio->StateBuffer(palette4096pri, sizeof(palette4096pri), 1);
+ //state_fio->StateBuffer(palette16txt, sizeof(palette16txt), 1);
+ for(int i = 0; i < (sizeof(palette16txt) / sizeof(scrntype_t)); i++) {
+ if(loading) {
+ uint8_t r, g, b;
+ r = state_fio->FgetUint8();
+ g = state_fio->FgetUint8();
+ b = state_fio->FgetUint8();
+ palette16txt[i] = RGB_COLOR(r, g, b);
+ } else {
+ uint8_t r, g, b;
+ r = R_OF_COLOR(palette16txt[i]);
+ g = G_OF_COLOR(palette16txt[i]);
+ b = B_OF_COLOR(palette16txt[i]);
+ state_fio->FputUint8(r);
+ state_fio->FputUint8(g);
+ state_fio->FputUint8(b);
+ }
+ }
+ //state_fio->StateBuffer(palette4096txt, sizeof(palette4096txt), 1);
+ for(int i = 0; i < (sizeof(palette4096txt) / sizeof(scrntype_t)); i++) {
+ if(loading) {
+ uint8_t r, g, b;
+ r = state_fio->FgetUint8();
+ g = state_fio->FgetUint8();
+ b = state_fio->FgetUint8();
+ palette4096txt[i] = RGB_COLOR(r, g, b);
+ } else {
+ uint8_t r, g, b;
+ r = R_OF_COLOR(palette4096txt[i]);
+ g = G_OF_COLOR(palette4096txt[i]);
+ b = B_OF_COLOR(palette4096txt[i]);
+ state_fio->FputUint8(r);
+ state_fio->FputUint8(g);
+ state_fio->FputUint8(b);
+ }
+ }
+ //state_fio->StateBuffer(palette16pri, sizeof(palette16pri), 1);
+ for(int i = 0; i < 16; i++) {
+ for(int j = 0; j < 9; j++) {
+ if(loading) {
+ uint8_t r, g, b;
+ r = state_fio->FgetUint8();
+ g = state_fio->FgetUint8();
+ b = state_fio->FgetUint8();
+ palette16pri[i][j] = RGB_COLOR(r, g, b);
+ } else {
+ uint8_t r, g, b;
+ r = R_OF_COLOR(palette16pri[i][j]);
+ g = G_OF_COLOR(palette16pri[i][j]);
+ b = B_OF_COLOR(palette16pri[i][j]);
+ state_fio->FputUint8(r);
+ state_fio->FputUint8(g);
+ state_fio->FputUint8(b);
+ }
+ }
+ }
+ //state_fio->StateBuffer(palette4096pri, sizeof(palette4096pri), 1);
+ for(int i = 0; i < 16; i++) {
+ for(int j = 0; j < 9; j++) {
+ if(loading) {
+ uint8_t r, g, b;
+ r = state_fio->FgetUint8();
+ g = state_fio->FgetUint8();
+ b = state_fio->FgetUint8();
+ palette4096pri[i][j] = RGB_COLOR(r, g, b);
+ } else {
+ uint8_t r, g, b;
+ r = R_OF_COLOR(palette4096pri[i][j]);
+ g = G_OF_COLOR(palette4096pri[i][j]);
+ b = B_OF_COLOR(palette4096pri[i][j]);
+ state_fio->FputUint8(r);
+ state_fio->FputUint8(g);
+ state_fio->FputUint8(b);
+ }
+ }
+ }
+
state_fio->StateUint8(prev16);
state_fio->StateBool(update16);
- state_fio->StateBuffer(priority256, sizeof(priority256), 1);
- state_fio->StateBuffer(palette256, sizeof(palette256), 1);
- state_fio->StateBuffer(palette256txt, sizeof(palette256txt), 1);
- state_fio->StateBuffer(palette256pri, sizeof(palette256pri), 1);
- state_fio->StateUint32((uint32_t)prev256);
+ //state_fio->StateBuffer(priority256, sizeof(priority256), 1);
+ for(int i = 0; i < 256; i++) {
+ for(int j = 0; j < (16 + 64); j++) {
+ state_fio->StateUint16(priority256[i][j]);
+ }
+ }
+ //state_fio->StateBuffer(palette256, sizeof(palette256), 1);
+ for(int i = 0; i < (sizeof(palette256) / sizeof(scrntype_t)); i++) {
+ if(loading) {
+ uint8_t r, g, b;
+ r = state_fio->FgetUint8();
+ g = state_fio->FgetUint8();
+ b = state_fio->FgetUint8();
+ palette256[i] = RGB_COLOR(r, g, b);
+ } else {
+ uint8_t r, g, b;
+ r = R_OF_COLOR(palette256[i]);
+ g = G_OF_COLOR(palette256[i]);
+ b = B_OF_COLOR(palette256[i]);
+ state_fio->FputUint8(r);
+ state_fio->FputUint8(g);
+ state_fio->FputUint8(b);
+ }
+ }
+ //state_fio->StateBuffer(palette256txt, sizeof(palette256txt), 1);
+ for(int i = 0; i < (sizeof(palette256txt) / sizeof(scrntype_t)); i++) {
+ if(loading) {
+ uint8_t r, g, b;
+ r = state_fio->FgetUint8();
+ g = state_fio->FgetUint8();
+ b = state_fio->FgetUint8();
+ palette256txt[i] = RGB_COLOR(r, g, b);
+ } else {
+ uint8_t r, g, b;
+ r = R_OF_COLOR(palette256txt[i]);
+ g = G_OF_COLOR(palette256txt[i]);
+ b = B_OF_COLOR(palette256txt[i]);
+ state_fio->FputUint8(r);
+ state_fio->FputUint8(g);
+ state_fio->FputUint8(b);
+ }
+ }
+ //state_fio->StateBuffer(palette256pri, sizeof(palette256pri), 1);
+ for(int i = 0; i < 256; i++) {
+ for(int j = 0; j < (16 + 64); j++) {
+ if(loading) {
+ uint8_t r, g, b;
+ r = state_fio->FgetUint8();
+ g = state_fio->FgetUint8();
+ b = state_fio->FgetUint8();
+ palette256pri[i][j] = RGB_COLOR(r, g, b);
+ } else {
+ uint8_t r, g, b;
+ r = R_OF_COLOR(palette256pri[i][j]);
+ g = G_OF_COLOR(palette256pri[i][j]);
+ b = B_OF_COLOR(palette256pri[i][j]);
+ state_fio->FputUint8(r);
+ state_fio->FputUint8(g);
+ state_fio->FputUint8(b);
+ }
+ }
+ }
+ //state_fio->StateUint32((uint32_t)prev256);
+ if(loading) {
+ uint8_t r, g, b;
+ r = state_fio->FgetUint8();
+ g = state_fio->FgetUint8();
+ b = state_fio->FgetUint8();
+ prev256 = RGB_COLOR(r, g, b);
+ } else {
+ uint8_t r, g, b;
+ r = R_OF_COLOR(prev256);
+ g = G_OF_COLOR(prev256);
+ b = B_OF_COLOR(prev256);
+ state_fio->FputUint8(r);
+ state_fio->FputUint8(g);
+ state_fio->FputUint8(b);
+ }
state_fio->StateBool(update256);
- state_fio->StateBuffer(map_addr, sizeof(map_addr), 1);
+ //state_fio->StateBuffer(map_addr, sizeof(map_addr), 1);
+ for(int i = 0; i < 400; i++) {
+ for(int j = 0; j < 80; j++) {
+ state_fio->StateUint16(map_addr[i][j]);
+ }
+ }
state_fio->StateBuffer(map_hdsc, sizeof(map_hdsc), 1);
state_fio->StateBuffer(text_matrix, sizeof(text_matrix), 1);
state_fio->StateBuffer(text_matrixw, sizeof(text_matrixw), 1);
void event_callback(int event_id, int err);
void event_vline(int v, int clock);
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);
// unique function
void set_context_mem(DEVICE* device)
#define STATE_VERSION 1
-#include "../../statesub.h"
-
-void FLOPPY::decl_state()
-{
- enter_decl_state(STATE_VERSION);
-
- DECL_STATE_ENTRY_BOOL(reversed);
-
- 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->FputBool(reversed);
-}
-
-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;
-// }
-// reversed = state_fio->FgetBool();
- return true;
-}
-#endif
-
bool FLOPPY::process_state(FILEIO* state_fio, bool loading)
{
if(!state_fio->StateCheckUint32(STATE_VERSION)) {
state_fio->StateBool(reversed);
return true;
}
+
+#endif
void write_io8(uint32_t addr, uint32_t data);
#ifdef _MZ2500
void write_signal(int id, uint32_t data, uint32_t mask);
- 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 functions
#define STATE_VERSION 1
-#include "../../statesub.h"
-
-void INTERRUPT::decl_state()
-{
- enter_decl_state(STATE_VERSION);
-
- DECL_STATE_ENTRY_UINT8(select);
- {
- DECL_STATE_ENTRY_UINT8_STRIDE((irq[0].vector), 4, sizeof(irq[0]));
- DECL_STATE_ENTRY_BOOL_STRIDE((irq[0].enb_intr), 4, sizeof(irq[0]));
- DECL_STATE_ENTRY_BOOL_STRIDE((irq[0].req_intr), 4, sizeof(irq[0]));
- DECL_STATE_ENTRY_BOOL_STRIDE((irq[0].in_service), 4, sizeof(irq[0]));
- }
- DECL_STATE_ENTRY_INT32(req_intr_ch);
- DECL_STATE_ENTRY_BOOL(iei);
- DECL_STATE_ENTRY_BOOL(oei);
- DECL_STATE_ENTRY_UINT32(intr_bit);
-
- leave_decl_state();
-}
-
-
-void INTERRUPT::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(select);
-// state_fio->Fwrite(irq, sizeof(irq), 1);
-// state_fio->FputInt32(req_intr_ch);
-// state_fio->FputBool(iei);
-// state_fio->FputBool(oei);
-// state_fio->FputUint32(intr_bit);
-}
-
-bool INTERRUPT::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;
-// }
-// select = state_fio->FgetUint8();
-// state_fio->Fread(irq, sizeof(irq), 1);
-// req_intr_ch = state_fio->FgetInt32();
-// iei = state_fio->FgetBool();
-// oei = state_fio->FgetBool();
-// intr_bit = state_fio->FgetUint32();
- return true;
-}
-
bool INTERRUPT::process_state(FILEIO* state_fio, bool loading)
{
if(!state_fio->StateCheckUint32(STATE_VERSION)) {
return false;
}
state_fio->StateUint8(select);
- state_fio->StateBuffer(irq, sizeof(irq), 1);
+ //state_fio->StateBuffer(irq, sizeof(irq), 1);
+ for(int i = 0; i < 4; i++) {
+ state_fio->StateUint8(irq[i].vector);
+ state_fio->StateBool(irq[i].enb_intr);
+ state_fio->StateBool(irq[i].req_intr);
+ state_fio->StateBool(irq[i].in_service);
+ }
state_fio->StateInt32(req_intr_ch);
state_fio->StateBool(iei);
state_fio->StateBool(oei);
void reset();
void write_io8(uint32_t addr, uint32_t data);
void write_signal(int id, uint32_t data, uint32_t mask);
- void decl_state();
- void save_state(FILEIO* state_fio);
- bool load_state(FILEIO* state_fio);
+ bool process_state(FILEIO* state_fio, bool loading);
// interrupt common functions
void set_context_intr(DEVICE* device, uint32_t bit)
#define STATE_VERSION 2
-#include "../../statesub.h"
-
-void JOYSTICK::decl_state()
-{
- enter_decl_state(STATE_VERSION);
-
- DECL_STATE_ENTRY_UINT32(mode);
-
- leave_decl_state();
-}
-
-void JOYSTICK::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->FputUint32(mode);
-}
-
-bool JOYSTICK::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;
-// }
-// mode = state_fio->FgetUint32();
- return true;
-}
-
bool JOYSTICK::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);
};
#endif
#define STATE_VERSION 1
-#include "../../statesub.h"
-
-void KEYBOARD::decl_state()
-{
- enter_decl_state(STATE_VERSION);
-
- DECL_STATE_ENTRY_UINT8(column);
-
- 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->FputUint8(column);
-}
-
-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;
-// }
-// column = state_fio->FgetUint8();
- return true;
-}
-
bool KEYBOARD::process_state(FILEIO* state_fio, bool loading)
{
if(!state_fio->StateCheckUint32(STATE_VERSION)) {
void initialize();
void write_signal(int id, uint32_t data, uint32_t mask);
void event_frame();
- 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_pio_i(DEVICE* device)
} \
}
-void MEMORY::initialize()
+void MZ2500_MEMORY::initialize()
{
// init memory
memset(ram, 0, sizeof(ram));
// NOTE: IPL reset is done at system boot
-void MEMORY::reset()
+void MZ2500_MEMORY::reset()
{
// ipl reset
bank = 0;
extra_wait = 0;
}
-void MEMORY::special_reset()
+void MZ2500_MEMORY::special_reset()
{
// reset
bank = 0;
extra_wait = 0;
}
-void MEMORY::write_data8_tmp(int b, uint32_t addr, uint32_t data)
+void MZ2500_MEMORY::write_data8_tmp(int b, uint32_t addr, uint32_t data)
{
if(is_vram[b] && !blank) {
// vram wait
wbank[addr >> 11][addr & 0x7ff] = data;
}
-uint32_t MEMORY::read_data8_tmp(int b, uint32_t addr)
+uint32_t MZ2500_MEMORY::read_data8_tmp(int b, uint32_t addr)
{
if(is_vram[b] && !blank) {
// vram wait
}
-void MEMORY::write_data8(uint32_t addr, uint32_t data)
+void MZ2500_MEMORY::write_data8(uint32_t addr, uint32_t data)
{
addr &= 0xffff;
int b = addr >> 13;
write_data8_tmp(b, addr, data);
}
-uint32_t MEMORY::read_data8(uint32_t addr)
+uint32_t MZ2500_MEMORY::read_data8(uint32_t addr)
{
addr &= 0xffff;
int b = addr >> 13;
return read_data8_tmp(b, addr);
}
-void MEMORY::write_data8w(uint32_t addr, uint32_t data, int* wait)
+void MZ2500_MEMORY::write_data8w(uint32_t addr, uint32_t data, int* wait)
{
addr &= 0xffff;
int b = addr >> 13;
}
}
-uint32_t MEMORY::read_data8w(uint32_t addr, int* wait)
+uint32_t MZ2500_MEMORY::read_data8w(uint32_t addr, int* wait)
{
addr &= 0xffff;
int b = addr >> 13;
return data;
}
-uint32_t MEMORY::fetch_op(uint32_t addr, int* wait)
+uint32_t MZ2500_MEMORY::fetch_op(uint32_t addr, int* wait)
{
*wait = 1;
return read_data8(addr);
}
-void MEMORY::write_io8(uint32_t addr, uint32_t data)
+void MZ2500_MEMORY::write_io8(uint32_t addr, uint32_t data)
{
switch(addr & 0xff) {
case 0xb4:
}
}
-uint32_t MEMORY::read_io8(uint32_t addr)
+uint32_t MZ2500_MEMORY::read_io8(uint32_t addr)
{
switch(addr & 0xff) {
case 0xb4:
return 0xff;
}
-void MEMORY::write_signal(int id, uint32_t data, uint32_t mask)
+void MZ2500_MEMORY::write_signal(int id, uint32_t data, uint32_t mask)
{
if(id == SIG_MEMORY_HBLANK) {
hblank = ((data & mask) != 0);
blank = next;
}
-void MEMORY::set_map(uint8_t data)
+void MZ2500_MEMORY::set_map(uint8_t data)
{
int base = bank * 0x2000;
#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(tvram, sizeof(tvram));
- DECL_STATE_ENTRY_1D_ARRAY(pcg, sizeof(pcg));
- DECL_STATE_ENTRY_UINT8(bank);
- DECL_STATE_ENTRY_1D_ARRAY(page, sizeof(page));
- DECL_STATE_ENTRY_UINT8(dic_bank);
- DECL_STATE_ENTRY_UINT8(kanji_bank);
- DECL_STATE_ENTRY_BOOL(blank);
- DECL_STATE_ENTRY_BOOL(hblank);
- DECL_STATE_ENTRY_BOOL(vblank);
- DECL_STATE_ENTRY_BOOL(busreq);
-
- 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(tvram, sizeof(tvram), 1);
-// state_fio->Fwrite(pcg, sizeof(pcg), 1);
-// state_fio->FputUint8(bank);
-// state_fio->Fwrite(page, sizeof(page), 1);
-// state_fio->FputUint8(dic_bank);
-// state_fio->FputUint8(kanji_bank);
-// state_fio->FputBool(blank);
-// state_fio->FputBool(hblank);
-// state_fio->FputBool(vblank);
-// state_fio->FputBool(busreq);
-}
-
-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(tvram, sizeof(tvram), 1);
-// state_fio->Fread(pcg, sizeof(pcg), 1);
-// bank = state_fio->FgetUint8();
-// state_fio->Fread(page, sizeof(page), 1);
-// dic_bank = state_fio->FgetUint8();
-// kanji_bank = state_fio->FgetUint8();
-// blank = state_fio->FgetBool();
-// hblank = state_fio->FgetBool();
-// vblank = state_fio->FgetBool();
-// busreq = state_fio->FgetBool();
-
- // post process
- uint8_t bank_tmp = bank;
- bank = 0;
- for(int i = 0; i < 8; i++) {
- set_map(page[i]);
- }
- bank = bank_tmp;
- return true;
-}
-
-bool MEMORY::process_state(FILEIO* state_fio, bool loading)
+bool MZ2500_MEMORY::process_state(FILEIO* state_fio, bool loading)
{
if(!state_fio->StateCheckUint32(STATE_VERSION)) {
return false;
[ memory ]
*/
-#ifndef _MEMORY_H_
-#define _MEMORY_H_
+#ifndef _MZ2500_MEMORY_H_
+#define _MZ2500_MEMORY_H_
#include "../vm.h"
#include "../../emu.h"
#define SIG_MEMORY_HBLANK 0
#define SIG_MEMORY_VBLANK 1
-class MEMORY : public DEVICE
+class MZ2500_MEMORY : public DEVICE
{
private:
DEVICE *d_cpu, *d_crtc;
void set_map(uint8_t data);
public:
- MEMORY(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+ MZ2500_MEMORY(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
{
- set_device_name(_T("Memory Bus"));
+ set_device_name(_T("Memory Bus(MZ2500)"));
}
- ~MEMORY() {}
+ ~MZ2500_MEMORY() {}
// common functions
void initialize();
void write_io8(uint32_t addr, uint32_t data);
uint32_t read_io8(uint32_t addr);
void write_signal(int id, uint32_t data, uint32_t mask);
- 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_cpu(DEVICE* device)
} \
}
-void MEMORY::initialize()
+void MZ80B_MEMORY::initialize()
{
// memory
memset(rdmy, 0xff, sizeof(rdmy));
register_vline_event(this);
}
-void MEMORY::reset()
+void MZ80B_MEMORY::reset()
{
// ipl reset
SET_BANK(0x0000, 0x07ff, wdmy, ipl, false);
update_vram_map();
}
-void MEMORY::special_reset()
+void MZ80B_MEMORY::special_reset()
{
// reset
SET_BANK(0x0000, 0xffff, ram, ram, false);
update_vram_map();
}
-void MEMORY::write_data8(uint32_t addr, uint32_t data)
+void MZ80B_MEMORY::write_data8(uint32_t addr, uint32_t data)
{
addr &= 0xffff;
if(!hblank && is_vram[addr >> 11]) {
wbank[addr >> 11][addr & 0x7ff] = data;
}
-uint32_t MEMORY::read_data8(uint32_t addr)
+uint32_t MZ80B_MEMORY::read_data8(uint32_t addr)
{
addr &= 0xffff;
if(!hblank && is_vram[addr >> 11]) {
return rbank[addr >> 11][addr & 0x7ff];
}
-uint32_t MEMORY::fetch_op(uint32_t addr, int *wait)
+uint32_t MZ80B_MEMORY::fetch_op(uint32_t addr, int *wait)
{
addr &= 0xffff;
*wait = (ipl_selected && addr < 0x800);
return rbank[addr >> 11][addr & 0x7ff];
}
-void MEMORY::write_io8(uint32_t addr, uint32_t data)
+void MZ80B_MEMORY::write_io8(uint32_t addr, uint32_t data)
{
switch(addr & 0xff) {
#ifndef _MZ80B
}
}
-void MEMORY::write_signal(int id, uint32_t data, uint32_t mask)
+void MZ80B_MEMORY::write_signal(int id, uint32_t data, uint32_t mask)
{
if(id == SIG_MEMORY_VRAM_SEL) {
if(vram_sel != (data & mask)) {
}
}
-void MEMORY::event_vline(int v, int clock)
+void MZ80B_MEMORY::event_vline(int v, int clock)
{
if(v == 0) {
d_pio->write_signal(SIG_I8255_PORT_B, 1, 1);
// }
}
-void MEMORY::event_callback(int event_id, int err)
+void MZ80B_MEMORY::event_callback(int event_id, int err)
{
if(event_id == EVENT_HBLANK) {
hblank = true;
}
#ifndef _MZ80B
-void MEMORY::update_green_palette()
+void MZ80B_MEMORY::update_green_palette()
{
palette_green[reverse ? 1 : 0] = RGB_COLOR(0, 0, 0);
palette_green[reverse ? 0 : 1] = RGB_COLOR(0, 255, 0);
}
#endif
-void MEMORY::update_vram_map()
+void MZ80B_MEMORY::update_vram_map()
{
#ifndef _MZ80B
if(vram_sel == 0x80) {
#endif
}
-void MEMORY::load_dat_image(const _TCHAR* file_path)
+void MZ80B_MEMORY::load_dat_image(const _TCHAR* file_path)
{
FILEIO* fio = new FILEIO();
if(fio->Fopen(file_path, FILEIO_READ_BINARY)) {
delete fio;
}
-bool MEMORY::load_mzt_image(const _TCHAR* file_path)
+bool MZ80B_MEMORY::load_mzt_image(const _TCHAR* file_path)
{
bool result = false;
bool is_mtw = check_file_extension(file_path, _T(".mtw"));
return result;
}
-void MEMORY::draw_screen()
+void MZ80B_MEMORY::draw_screen()
{
// render text
#ifndef _MZ80B
#define STATE_VERSION 3
-#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(tvram, sizeof(tvram));
- DECL_STATE_ENTRY_BOOL(ipl_selected);
- DECL_STATE_ENTRY_UINT8(vram_sel);
- DECL_STATE_ENTRY_UINT8(vram_page);
- DECL_STATE_ENTRY_UINT8(back_color);
- DECL_STATE_ENTRY_UINT8(text_color);
- DECL_STATE_ENTRY_UINT8(vram_mask);
- DECL_STATE_ENTRY_BOOL(width80);
- DECL_STATE_ENTRY_BOOL(reverse);
- DECL_STATE_ENTRY_BOOL(vgate);
- DECL_STATE_ENTRY_BOOL(hblank);
-#ifdef _MZ80B
- DECL_STATE_ENTRY_1D_ARRAY(pio3039_palette, sizeof(pio3039_palette));
- DECL_STATE_ENTRY_BOOL(pio3039_txt_sw);
- DECL_STATE_ENTRY_UINT8(pio3039_data);
-#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(tvram, sizeof(tvram), 1);
-// state_fio->FputBool(ipl_selected);
-// state_fio->FputUint8(vram_sel);
-// state_fio->FputUint8(vram_page);
-// state_fio->FputUint8(back_color);
-// state_fio->FputUint8(text_color);
-// state_fio->FputUint8(vram_mask);
-// state_fio->FputBool(width80);
-// state_fio->FputBool(reverse);
-// state_fio->FputBool(vgate);
-// state_fio->FputBool(hblank);
-//#ifdef _MZ80B
-// state_fio->Fwrite(pio3039_palette, sizeof(pio3039_palette), 1);
-// state_fio->FputBool(pio3039_txt_sw);
-// state_fio->FputUint8(pio3039_data);
-//#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(tvram, sizeof(tvram), 1);
-// ipl_selected = state_fio->FgetBool();
-// vram_sel = state_fio->FgetUint8();
-// vram_page = state_fio->FgetUint8();
-// back_color = state_fio->FgetUint8();
-// text_color = state_fio->FgetUint8();
-// vram_mask = state_fio->FgetUint8();
-// width80 = state_fio->FgetBool();
-// reverse = state_fio->FgetBool();
-// vgate = state_fio->FgetBool();
-// hblank = state_fio->FgetBool();
-//#ifdef _MZ80B
-// state_fio->Fread(pio3039_palette, sizeof(pio3039_palette), 1);
-// pio3039_txt_sw = state_fio->FgetBool();
-// pio3039_data = state_fio->FgetUint8();
-//#endif
-
- // post process
- if(ipl_selected) {
- SET_BANK(0x0000, 0x07ff, wdmy, ipl, false);
- SET_BANK(0x0800, 0x7fff, wdmy, rdmy, false);
- SET_BANK(0x8000, 0xffff, ram, ram, false);
- } else {
- SET_BANK(0x0000, 0xffff, ram, ram, false);
- }
- update_vram_map();
-#ifndef _MZ80B
- update_green_palette();
-#endif
- return true;
-}
-
-bool MEMORY::process_state(FILEIO* state_fio, bool loading)
+bool MZ80B_MEMORY::process_state(FILEIO* state_fio, bool loading)
{
if(!state_fio->StateCheckUint32(STATE_VERSION)) {
return false;
class Z80;
-class MEMORY : public DEVICE
+class MZ80B_MEMORY : public DEVICE
{
private:
Z80 *d_cpu;
#endif
public:
- MEMORY(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+ MZ80B_MEMORY(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
{
- set_device_name(_T("Memory Bus"));
+ set_device_name(_T("Memory Bus(MZ80B/2000/2200)"));
}
- ~MEMORY() {}
+ ~MZ80B_MEMORY() {}
// common functions
void initialize();
void write_signal(int id, uint32_t data, uint32_t mask);
void event_vline(int v, int clock);
void event_callback(int event_id, int err);
- 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_cpu(Z80* device)
#define STATE_VERSION 1
-#include "../../statesub.h"
-
-void MOUSE::decl_state()
-{
- enter_decl_state(STATE_VERSION);
-
- DECL_STATE_ENTRY_BOOL(select);
-
- leave_decl_state();
-}
-void MOUSE::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(select);
-}
-
-bool MOUSE::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;
-// }
-// select = state_fio->FgetBool();
- return true;
-}
-
bool MOUSE::process_state(FILEIO* state_fio, bool loading)
{
if(!state_fio->StateCheckUint32(STATE_VERSION)) {
// common functions
void initialize();
void write_signal(int id, uint32_t data, uint32_t mask);
- 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_sio(DEVICE* device)
#define STATE_VERSION 2
-#include "../../statesub.h"
-
-void MZ1E30::decl_state()
-{
- enter_decl_state(STATE_VERSION);
-
- DECL_STATE_ENTRY_UINT32(rom_address);
- DECL_STATE_ENTRY_BOOL(irq_status);
- DECL_STATE_ENTRY_BOOL(drq_status);
-
- leave_decl_state();
-}
-
-void MZ1E30::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->FputUint32(rom_address);
-// state_fio->FputBool(irq_status);
-// state_fio->FputBool(drq_status);
-}
-
-bool MZ1E30::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;
-// }
-// rom_address = state_fio->FgetUint32();
-// irq_status = state_fio->FgetBool();
-// drq_status = state_fio->FgetBool();
- return true;
-}
-
bool MZ1E30::process_state(FILEIO* state_fio, bool loading)
{
if(!state_fio->StateCheckUint32(STATE_VERSION)) {
void write_dma_io8(uint32_t addr, uint32_t data);
uint32_t read_dma_io8(uint32_t addr);
void write_signal(int id, uint32_t data, uint32_t mask);
- 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_host(DEVICE* device)
#define STATE_VERSION 1
-#include "../../statesub.h"
-
-void MZ1M01::decl_state()
-{
- enter_decl_state(STATE_VERSION);
-
- DECL_STATE_ENTRY_1D_ARRAY(ram, sizeof(ram));
- DECL_STATE_ENTRY_1D_ARRAY(port, sizeof(port));
-
- leave_decl_state();
-}
-
-void MZ1M01::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(port, sizeof(port), 1);
-}
-
-bool MZ1M01::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(port, sizeof(port), 1);
- return true;
-}
-
bool MZ1M01::process_state(FILEIO* state_fio, bool loading)
{
if(!state_fio->StateCheckUint32(STATE_VERSION)) {
void write_io8(uint32_t addr, uint32_t data);
uint32_t read_io8(uint32_t addr);
void write_signal(int id, uint32_t data, uint32_t mask);
- 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_cpu(DEVICE* device)
#define STATE_VERSION 1
-#include "../../statesub.h"
-
-void MZ1R12::decl_state()
-{
- enter_decl_state(STATE_VERSION);
-
- DECL_STATE_ENTRY_1D_ARRAY(sram, sizeof(sram));
- DECL_STATE_ENTRY_BOOL(read_only);
- DECL_STATE_ENTRY_UINT16(address);
- DECL_STATE_ENTRY_UINT32(crc32);
-
- leave_decl_state();
-}
-
-void MZ1R12::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(sram, sizeof(sram), 1);
-// state_fio->FputBool(read_only);
-// state_fio->FputUint16(address);
-// state_fio->FputUint32(crc32);
-}
-
-bool MZ1R12::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(sram, sizeof(sram), 1);
-// read_only = state_fio->FgetBool();
-// address = state_fio->FgetUint16();
-// crc32 = state_fio->FgetUint32();
- return true;
-}
-
bool MZ1R12::process_state(FILEIO* state_fio, bool loading)
{
if(!state_fio->StateCheckUint32(STATE_VERSION)) {
void release();
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);
};
#endif
#define STATE_VERSION 1
-#include "../../statesub.h"
-
-void MZ1R13::decl_state()
-{
- enter_decl_state(STATE_VERSION);
-
- DECL_STATE_ENTRY_UINT16(address);
- DECL_STATE_ENTRY_BOOL(select_kanji);
-
- leave_decl_state();
-}
-
-void MZ1R13::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->FputUint16(address);
-// state_fio->FputBool(select_kanji);
-}
-
-bool MZ1R13::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;
-// }
-// address = state_fio->FgetUint16();
-// select_kanji = state_fio->FgetBool();
- return true;
-}
-
bool MZ1R13::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);
};
#endif
#define STATE_VERSION 1
-#include "../../statesub.h"
-
-void MZ1R37::decl_state()
-{
- enter_decl_state(STATE_VERSION);
-
- DECL_STATE_ENTRY_INT32(tmp_buffer_size);
- DECL_STATE_ENTRY_VARARRAY_VAR(buffer, tmp_buffer_size);
- DECL_STATE_ENTRY_UINT32(address);
-
- leave_decl_state();
-}
-
-void MZ1R37::save_state(FILEIO* state_fio)
-{
- tmp_buffer_size = EMM_SIZE;
- if(state_entry != NULL) {
- state_entry->save_state(state_fio);
- }
-// state_fio->FputUint32(STATE_VERSION);
-// state_fio->FputInt32(this_device_id);
-
-// state_fio->Fwrite(buffer, EMM_SIZE, 1);
-// state_fio->FputUint32(address);
-}
-
-bool MZ1R37::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(buffer, EMM_SIZE, 1);
-// address = state_fio->FgetUint32();
- return true;
-}
-
bool MZ1R37::process_state(FILEIO* state_fio, bool loading)
{
if(!state_fio->StateCheckUint32(STATE_VERSION)) {
void release();
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);
};
#endif
#include "interrupt.h"
#include "joystick.h"
#include "keyboard.h"
-#include "memory.h"
+#include "./memory.h"
#include "mouse.h"
#include "mz1e26.h"
#include "mz1e30.h"
interrupt = new INTERRUPT(this, emu);
joystick = new JOYSTICK(this, emu);
keyboard = new KEYBOARD(this, emu);
- memory = new MEMORY(this, emu);
+ memory = new MZ2500_MEMORY(this, emu);
mouse = new MOUSE(this, emu);
mz1e26 = new MZ1E26(this, emu);
mz1e30 = new MZ1E30(this, emu);
}
}
monitor_type = config.monitor_type;
- decl_state();
}
VM::~VM()
#define STATE_VERSION 7
-#include "../../statesub.h"
-#include "../../qt/gui/csp_logger.h"
-extern CSP_Logger DLL_PREFIX_I *csp_logger;
-
-void VM::decl_state(void)
-{
- state_entry = new csp_state_utils(STATE_VERSION, 0, (_TCHAR *)(_T("CSP::MZ2500_SERIES_HEAD")), csp_logger);
- DECL_STATE_ENTRY_BOOL(monitor_type);
- 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);
- }
-
- //state_fio->FputInt32(monitor_type);
-}
-
-bool VM::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;
- //}
- for(DEVICE* device = first_device; device; device = device->next_device) {
- if(!device->load_state(state_fio)) {
- return false;
- }
- }
- //monitor_type = state_fio->FgetInt32();
- 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.
state_fio->StateInt32(monitor_type);
return true;
}
class INTERRUPT;
class JOYSTICK;
class KEYBOARD;
-class MEMORY;
+class MZ2500_MEMORY;
class MOUSE;
class MZ1E26;
class MZ1E30;
INTERRUPT* interrupt;
JOYSTICK* joystick;
KEYBOARD* keyboard;
- MEMORY* memory;
+ MZ2500_MEMORY* memory;
MOUSE* mouse;
MZ1E26* mz1e26;
MZ1E30* mz1e30;
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
#include "cmt.h"
#include "floppy.h"
#include "keyboard.h"
-#include "memory80b.h"
+#include "./memory80b.h"
#include "mz1r12.h"
#include "mz1r13.h"
#include "printer.h"
cmt = new CMT(this, emu);
floppy = new FLOPPY(this, emu);
keyboard = new KEYBOARD(this, emu);
- memory = new MEMORY(this, emu);
+ memory = new MZ80B_MEMORY(this, emu);
mz1r12 = new MZ1R12(this, emu);
mz1r13 = new MZ1R13(this, emu);
printer = new PRINTER(this, emu);
for(DEVICE* device = first_device; device; device = device->next_device) {
device->initialize();
}
- decl_state();
}
VM::~VM()
#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)
-{
- state_entry = new csp_state_utils(STATE_VERSION, 0, (_TCHAR *)(_T("CSP::MZ80B_SERIES_HEAD")), csp_logger);
- 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) 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;
+ }
+ }
return true;
}
class CMT;
class FLOPPY;
class KEYBOARD;
-class MEMORY;
+class MZ80B_MEMORY;
class MZ1R12;
class MZ1R13;
class PRINTER;
CMT* cmt;
FLOPPY* floppy;
KEYBOARD* keyboard;
- MEMORY* memory;
+ MZ80B_MEMORY* memory;
MZ1R12* mz1r12;
MZ1R13* mz1r13;
PRINTER* printer;
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
#define STATE_VERSION 1
-#include "../../statesub.h"
-
-void SERIAL::decl_state()
-{
- enter_decl_state(STATE_VERSION);
-
- DECL_STATE_ENTRY_BOOL(addr_a0);
-
- leave_decl_state();
-}
-
-void SERIAL::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(addr_a0);
-}
-
-bool SERIAL::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;
-// }
-// addr_a0 = state_fio->FgetBool();
- return true;
-}
-
bool SERIAL::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 functions
void set_context_sio(Z80SIO* device)
#define STATE_VERSION 1
-#include "../../statesub.h"
-
-void CRTC::decl_state()
-{
- enter_decl_state(STATE_VERSION);
-
- DECL_STATE_ENTRY_UINT8(textreg_num);
- DECL_STATE_ENTRY_1D_ARRAY(textreg, sizeof(textreg));
- DECL_STATE_ENTRY_1D_ARRAY(rmwreg_num, sizeof(rmwreg_num));
- DECL_STATE_ENTRY_2D_ARRAY(rmwreg, 2, 32);
- DECL_STATE_ENTRY_UINT8(cgreg_num);
- DECL_STATE_ENTRY_1D_ARRAY(cgreg, sizeof(cgreg));
- DECL_STATE_ENTRY_UINT8(scrn_size);
- DECL_STATE_ENTRY_UINT8(cg_mask);
- DECL_STATE_ENTRY_BOOL(font_size);
- DECL_STATE_ENTRY_BOOL(column_size);
- DECL_STATE_ENTRY_2D_ARRAY(latch, 2, 4);
- DECL_STATE_ENTRY_UINT16(GDEVS);
- DECL_STATE_ENTRY_UINT16(GDEVE);
- DECL_STATE_ENTRY_UINT8(GDEHS);
- DECL_STATE_ENTRY_UINT8(GDEHE);
- DECL_STATE_ENTRY_INT32(GDEHSC);
- DECL_STATE_ENTRY_INT32(GDEHEC);
- DECL_STATE_ENTRY_BOOL(blank);
- DECL_STATE_ENTRY_BOOL(hblank);
- DECL_STATE_ENTRY_BOOL(vblank);
- DECL_STATE_ENTRY_BOOL(blink);
- DECL_STATE_ENTRY_UINT8(clear_flag);
- DECL_STATE_ENTRY_1D_ARRAY(palette_reg, sizeof(palette_reg));
- DECL_STATE_ENTRY_BOOL(pal_select);
- DECL_STATE_ENTRY_BOOL(screen_mask);
- DECL_STATE_ENTRY_2D_ARRAY(priority16, 16, 9);
- DECL_STATE_ENTRY_SCRNTYPE_T_1D_ARRAY(palette16, 16 + 8);
- DECL_STATE_ENTRY_SCRNTYPE_T_1D_ARRAY(palette4096, 16);
- DECL_STATE_ENTRY_1D_ARRAY(palette4096r, sizeof(palette4096r));
- DECL_STATE_ENTRY_1D_ARRAY(palette4096g, sizeof(palette4096g));
- DECL_STATE_ENTRY_1D_ARRAY(palette4096b, sizeof(palette4096b));
- DECL_STATE_ENTRY_SCRNTYPE_T_1D_ARRAY(palette16txt, 9);
- DECL_STATE_ENTRY_SCRNTYPE_T_1D_ARRAY(palette4096txt, 9);
- DECL_STATE_ENTRY_SCRNTYPE_T_2D_ARRAY(palette16pri, 16, 9);
- DECL_STATE_ENTRY_SCRNTYPE_T_2D_ARRAY(palette4096pri, 16, 9);
- DECL_STATE_ENTRY_UINT8(prev16);
- DECL_STATE_ENTRY_BOOL(update16);
- DECL_STATE_ENTRY_2D_ARRAY(map_addr, 400, 80);
- DECL_STATE_ENTRY_2D_ARRAY(map_hdsc, 400, 80);
- DECL_STATE_ENTRY_3D_ARRAY(text_matrix, 256, 8, 8);
- DECL_STATE_ENTRY_3D_ARRAY(text_matrixw, 256, 8, 16);
- DECL_STATE_ENTRY_UINT8(trans_color);
- DECL_STATE_ENTRY_BOOL(map_init);
- DECL_STATE_ENTRY_BOOL(trans_init);
-
- leave_decl_state();
-}
-
-void CRTC::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(textreg_num);
-// state_fio->Fwrite(textreg, sizeof(textreg), 1);
-// state_fio->Fwrite(rmwreg_num, sizeof(rmwreg_num), 1);
-// state_fio->Fwrite(rmwreg, sizeof(rmwreg), 1);
-// state_fio->FputUint8(cgreg_num);
-// state_fio->Fwrite(cgreg, sizeof(cgreg), 1);
-// state_fio->FputUint8(scrn_size);
-// state_fio->FputUint8(cg_mask);
-// state_fio->FputBool(font_size);
-// state_fio->FputBool(column_size);
-// state_fio->Fwrite(latch, sizeof(latch), 1);
-// state_fio->FputUint16(GDEVS);
-// state_fio->FputUint16(GDEVE);
-// state_fio->FputUint8(GDEHS);
-// state_fio->FputUint8(GDEHE);
-// state_fio->FputInt32(GDEHSC);
-// state_fio->FputInt32(GDEHEC);
-// state_fio->FputBool(blank);
-// state_fio->FputBool(hblank);
-// state_fio->FputBool(vblank);
-// state_fio->FputBool(blink);
-// state_fio->FputUint8(clear_flag);
-// state_fio->Fwrite(palette_reg, sizeof(palette_reg), 1);
-// state_fio->FputBool(pal_select);
-// state_fio->FputBool(screen_mask);
-// state_fio->Fwrite(priority16, sizeof(priority16), 1);
-// state_fio->Fwrite(palette16, sizeof(palette16), 1);
-// state_fio->Fwrite(palette4096, sizeof(palette4096), 1);
-// state_fio->Fwrite(palette4096r, sizeof(palette4096r), 1);
-// state_fio->Fwrite(palette4096g, sizeof(palette4096g), 1);
-// state_fio->Fwrite(palette4096b, sizeof(palette4096b), 1);
-// state_fio->Fwrite(palette16txt, sizeof(palette16txt), 1);
-// state_fio->Fwrite(palette4096txt, sizeof(palette4096txt), 1);
-// state_fio->Fwrite(palette16pri, sizeof(palette16pri), 1);
-// state_fio->Fwrite(palette4096pri, sizeof(palette4096pri), 1);
-// state_fio->FputUint8(prev16);
-// state_fio->FputBool(update16);
-// state_fio->Fwrite(map_addr, sizeof(map_addr), 1);
-// state_fio->Fwrite(map_hdsc, sizeof(map_hdsc), 1);
-// state_fio->Fwrite(text_matrix, sizeof(text_matrix), 1);
-// state_fio->Fwrite(text_matrixw, sizeof(text_matrixw), 1);
-// state_fio->FputUint8(trans_color);
-// state_fio->FputBool(map_init);
-// state_fio->FputBool(trans_init);
-}
-
-bool CRTC::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;
-// }
-// textreg_num = state_fio->FgetUint8();
-// state_fio->Fread(textreg, sizeof(textreg), 1);
-// state_fio->Fread(rmwreg_num, sizeof(rmwreg_num), 1);
-// state_fio->Fread(rmwreg, sizeof(rmwreg), 1);
-// cgreg_num = state_fio->FgetUint8();
-// state_fio->Fread(cgreg, sizeof(cgreg), 1);
-// scrn_size = state_fio->FgetUint8();
-// cg_mask = state_fio->FgetUint8();
-// font_size = state_fio->FgetBool();
-// column_size = state_fio->FgetBool();
-// state_fio->Fread(latch, sizeof(latch), 1);
-// GDEVS = state_fio->FgetUint16();
-// GDEVE = state_fio->FgetUint16();
-// GDEHS = state_fio->FgetUint8();
-// GDEHE = state_fio->FgetUint8();
-// GDEHSC = state_fio->FgetInt32();
-// GDEHEC = state_fio->FgetInt32();
-// blank = state_fio->FgetBool();
-// hblank = state_fio->FgetBool();
-// vblank = state_fio->FgetBool();
-// blink = state_fio->FgetBool();
-// clear_flag = state_fio->FgetUint8();
-// state_fio->Fread(palette_reg, sizeof(palette_reg), 1);
-// pal_select = state_fio->FgetBool();
-// screen_mask = state_fio->FgetBool();
-// state_fio->Fread(priority16, sizeof(priority16), 1);
-// state_fio->Fread(palette16, sizeof(palette16), 1);
-// state_fio->Fread(palette4096, sizeof(palette4096), 1);
-// state_fio->Fread(palette4096r, sizeof(palette4096r), 1);
-// state_fio->Fread(palette4096g, sizeof(palette4096g), 1);
-// state_fio->Fread(palette4096b, sizeof(palette4096b), 1);
-// state_fio->Fread(palette16txt, sizeof(palette16txt), 1);
-// state_fio->Fread(palette4096txt, sizeof(palette4096txt), 1);
-// state_fio->Fread(palette16pri, sizeof(palette16pri), 1);
-// state_fio->Fread(palette4096pri, sizeof(palette4096pri), 1);
-// prev16 = state_fio->FgetUint8();
-// update16 = state_fio->FgetBool();
-// state_fio->Fread(map_addr, sizeof(map_addr), 1);
-// state_fio->Fread(map_hdsc, sizeof(map_hdsc), 1);
-// state_fio->Fread(text_matrix, sizeof(text_matrix), 1);
-// state_fio->Fread(text_matrixw, sizeof(text_matrixw), 1);
-// trans_color = state_fio->FgetUint8();
-// map_init = state_fio->FgetBool();
-// trans_init = state_fio->FgetBool();
- return true;
-}
-
bool CRTC::process_state(FILEIO* state_fio, bool loading)
{
if(!state_fio->StateCheckUint32(STATE_VERSION)) {
state_fio->StateBool(pal_select);
state_fio->StateBool(screen_mask);
state_fio->StateBuffer(priority16, sizeof(priority16), 1);
- state_fio->StateBuffer(palette16, sizeof(palette16), 1);
- state_fio->StateBuffer(palette4096, sizeof(palette4096), 1);
+ //state_fio->StateBuffer(palette16, sizeof(palette16), 1);
+ for(int i = 0; i < (sizeof(palette16) / sizeof(scrntype_t)); i++) {
+ if(loading) {
+ uint8_t r, g, b;
+ r = state_fio->FgetUint8();
+ g = state_fio->FgetUint8();
+ b = state_fio->FgetUint8();
+ palette16[i] = RGB_COLOR(r, g, b);
+ } else {
+ uint8_t r, g, b;
+ r = R_OF_COLOR(palette16[i]);
+ g = G_OF_COLOR(palette16[i]);
+ b = B_OF_COLOR(palette16[i]);
+ state_fio->FputUint8(r);
+ state_fio->FputUint8(g);
+ state_fio->FputUint8(b);
+ }
+ }
+ //state_fio->StateBuffer(palette4096, sizeof(palette4096), 1);
+ for(int i = 0; i < (sizeof(palette4096) / sizeof(scrntype_t)); i++) {
+ if(loading) {
+ uint8_t r, g, b;
+ r = state_fio->FgetUint8();
+ g = state_fio->FgetUint8();
+ b = state_fio->FgetUint8();
+ palette4096[i] = RGB_COLOR(r, g, b);
+ } else {
+ uint8_t r, g, b;
+ r = R_OF_COLOR(palette4096[i]);
+ g = G_OF_COLOR(palette4096[i]);
+ b = B_OF_COLOR(palette4096[i]);
+ state_fio->FputUint8(r);
+ state_fio->FputUint8(g);
+ state_fio->FputUint8(b);
+ }
+ }
state_fio->StateBuffer(palette4096r, sizeof(palette4096r), 1);
state_fio->StateBuffer(palette4096g, sizeof(palette4096g), 1);
state_fio->StateBuffer(palette4096b, sizeof(palette4096b), 1);
- state_fio->StateBuffer(palette16txt, sizeof(palette16txt), 1);
- state_fio->StateBuffer(palette4096txt, sizeof(palette4096txt), 1);
- state_fio->StateBuffer(palette16pri, sizeof(palette16pri), 1);
- state_fio->StateBuffer(palette4096pri, sizeof(palette4096pri), 1);
+ //state_fio->StateBuffer(palette16txt, sizeof(palette16txt), 1);
+ for(int i = 0; i < (sizeof(palette16txt) / sizeof(scrntype_t)); i++) {
+ if(loading) {
+ uint8_t r, g, b;
+ r = state_fio->FgetUint8();
+ g = state_fio->FgetUint8();
+ b = state_fio->FgetUint8();
+ palette16txt[i] = RGB_COLOR(r, g, b);
+ } else {
+ uint8_t r, g, b;
+ r = R_OF_COLOR(palette16txt[i]);
+ g = G_OF_COLOR(palette16txt[i]);
+ b = B_OF_COLOR(palette16txt[i]);
+ state_fio->FputUint8(r);
+ state_fio->FputUint8(g);
+ state_fio->FputUint8(b);
+ }
+ }
+ //state_fio->StateBuffer(palette4096txt, sizeof(palette4096txt), 1);
+ for(int i = 0; i < (sizeof(palette4096txt) / sizeof(scrntype_t)); i++) {
+ if(loading) {
+ uint8_t r, g, b;
+ r = state_fio->FgetUint8();
+ g = state_fio->FgetUint8();
+ b = state_fio->FgetUint8();
+ palette4096txt[i] = RGB_COLOR(r, g, b);
+ } else {
+ uint8_t r, g, b;
+ r = R_OF_COLOR(palette4096txt[i]);
+ g = G_OF_COLOR(palette4096txt[i]);
+ b = B_OF_COLOR(palette4096txt[i]);
+ state_fio->FputUint8(r);
+ state_fio->FputUint8(g);
+ state_fio->FputUint8(b);
+ }
+ }
+ //state_fio->StateBuffer(palette16pri, sizeof(palette16pri), 1);
+ for(int i = 0; i < 16; i++) {
+ for(int j = 0; j < 9; j++) {
+ if(loading) {
+ uint8_t r, g, b;
+ r = state_fio->FgetUint8();
+ g = state_fio->FgetUint8();
+ b = state_fio->FgetUint8();
+ palette16pri[i][j] = RGB_COLOR(r, g, b);
+ } else {
+ uint8_t r, g, b;
+ r = R_OF_COLOR(palette16pri[i][j]);
+ g = G_OF_COLOR(palette16pri[i][j]);
+ b = B_OF_COLOR(palette16pri[i][j]);
+ state_fio->FputUint8(r);
+ state_fio->FputUint8(g);
+ state_fio->FputUint8(b);
+ }
+ }
+ }
+ //state_fio->StateBuffer(palette4096pri, sizeof(palette4096pri), 1);
+ for(int i = 0; i < 16; i++) {
+ for(int j = 0; j < 9; j++) {
+ if(loading) {
+ uint8_t r, g, b;
+ r = state_fio->FgetUint8();
+ g = state_fio->FgetUint8();
+ b = state_fio->FgetUint8();
+ palette4096pri[i][j] = RGB_COLOR(r, g, b);
+ } else {
+ uint8_t r, g, b;
+ r = R_OF_COLOR(palette4096pri[i][j]);
+ g = G_OF_COLOR(palette4096pri[i][j]);
+ b = B_OF_COLOR(palette4096pri[i][j]);
+ state_fio->FputUint8(r);
+ state_fio->FputUint8(g);
+ state_fio->FputUint8(b);
+ }
+ }
+ }
state_fio->StateUint8(prev16);
state_fio->StateBool(update16);
- state_fio->StateBuffer(map_addr, sizeof(map_addr), 1);
+ //state_fio->StateBuffer(map_addr, sizeof(map_addr), 1);
+ for(int i = 0; i < 400; i++) {
+ for(int j = 0; j < 80; j++) {
+ state_fio->StateUint32(map_addr[i][j]);
+ }
+ }
state_fio->StateBuffer(map_hdsc, sizeof(map_hdsc), 1);
state_fio->StateBuffer(text_matrix, sizeof(text_matrix), 1);
state_fio->StateBuffer(text_matrixw, sizeof(text_matrixw), 1);
void write_signal(int id, uint32_t data, uint32_t mask);
void event_callback(int event_id, int err);
void event_vline(int v, int clock);
- 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_pic(DEVICE* device)
#define STATE_VERSION 2
-#include "../../statesub.h"
-
-void JOYSTICK::decl_state()
-{
- enter_decl_state(STATE_VERSION);
-
- DECL_STATE_ENTRY_UINT32(mode);
-
- leave_decl_state();
-}
-
-void JOYSTICK::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->FputUint32(mode);
-}
-
-bool JOYSTICK::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;
-// }
-// mode = state_fio->FgetUint32();
- return true;
-}
-
bool JOYSTICK::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);
};
#endif
#define STATE_VERSION 1
-#include "../../statesub.h"
-
-void KEYBOARD::decl_state()
-{
- enter_decl_state(STATE_VERSION);
-
- DECL_STATE_ENTRY_UINT8(column);
-
- 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->FputUint8(column);
-}
-
-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;
-// }
-// column = state_fio->FgetUint8();
- return true;
-}
-
bool KEYBOARD::process_state(FILEIO* state_fio, bool loading)
{
if(!state_fio->StateCheckUint32(STATE_VERSION)) {
void initialize();
void write_signal(int id, uint32_t data, uint32_t mask);
void event_frame();
- 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_pio0(DEVICE* device)
[ memory ]
*/
-#include "memory.h"
+#include "./memory.h"
#define SET_BANK(s, e, w, r) { \
int sb = (s) >> 11, eb = (e) >> 11; \
} \
}
-void MEMORY::initialize()
+void MZ2800_MEMORY::initialize()
{
// init memory
memset(ram, 0, sizeof(ram));
delete fio;
}
-void MEMORY::reset()
+void MZ2800_MEMORY::reset()
{
SET_BANK(0x000000, 0x0bffff, ram, ram);
SET_BANK(0x0c0000, 0x0dffff, vram, vram);
vram_bank = dic_bank = kanji_bank = 0;
}
-void MEMORY::write_data8(uint32_t addr, uint32_t data)
+void MZ2800_MEMORY::write_data8(uint32_t addr, uint32_t data)
{
if((addr & 0xfc0000) == 0x80000) {
write_dma_data8((addr & 0x3ffff) | mem_window, data);
}
}
-uint32_t MEMORY::read_data8(uint32_t addr)
+uint32_t MZ2800_MEMORY::read_data8(uint32_t addr)
{
if((addr & 0xfc0000) == 0x80000) {
return read_dma_data8((addr & 0x3ffff) | mem_window);
}
}
-void MEMORY::write_dma_data8(uint32_t addr, uint32_t data)
+void MZ2800_MEMORY::write_dma_data8(uint32_t addr, uint32_t data)
{
wbank[addr >> 11][addr & 0x7ff] = data;
}
-uint32_t MEMORY::read_dma_data8(uint32_t addr)
+uint32_t MZ2800_MEMORY::read_dma_data8(uint32_t addr)
{
return rbank[addr >> 11][addr & 0x7ff];
}
-void MEMORY::write_io8(uint32_t addr, uint32_t data)
+void MZ2800_MEMORY::write_io8(uint32_t addr, uint32_t data)
{
switch(addr & 0x7fff) {
case 0x8c:
}
}
-uint32_t MEMORY::read_io8(uint32_t addr)
+uint32_t MZ2800_MEMORY::read_io8(uint32_t addr)
{
switch(addr & 0x7fff) {
case 0x8c:
#define STATE_VERSION 2
-#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(ext, sizeof(ext));
- DECL_STATE_ENTRY_1D_ARRAY(vram, sizeof(vram));
- DECL_STATE_ENTRY_1D_ARRAY(tvram, sizeof(tvram));
- DECL_STATE_ENTRY_1D_ARRAY(pcg, sizeof(pcg));
- DECL_STATE_ENTRY_UINT32(mem_window);
- DECL_STATE_ENTRY_UINT8(vram_bank);
- DECL_STATE_ENTRY_UINT8(dic_bank);
- DECL_STATE_ENTRY_UINT8(kanji_bank);
-
- 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(ext, sizeof(ext), 1);
-// state_fio->Fwrite(vram, sizeof(vram), 1);
-// state_fio->Fwrite(tvram, sizeof(tvram), 1);
-// state_fio->Fwrite(pcg, sizeof(pcg), 1);
-// state_fio->FputUint32(mem_window);
-// state_fio->FputUint8(vram_bank);
-// state_fio->FputUint8(dic_bank);
-// state_fio->FputUint8(kanji_bank);
-}
-
-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(ext, sizeof(ext), 1);
-// state_fio->Fread(vram, sizeof(vram), 1);
-// state_fio->Fread(tvram, sizeof(tvram), 1);
-// state_fio->Fread(pcg, sizeof(pcg), 1);
-// mem_window = state_fio->FgetUint32();
-// vram_bank = state_fio->FgetUint8();
-// dic_bank = state_fio->FgetUint8();
-// kanji_bank = state_fio->FgetUint8();
-
- // post process
- if(vram_bank == 4) {
- SET_BANK(0x0c0000, 0x0dffff, vram + 0x00000, vram + 0x00000);
- } else if(vram_bank == 5) {
- SET_BANK(0x0c0000, 0x0dffff, vram + 0x20000, vram + 0x20000);
- } else if(vram_bank == 6) {
- SET_BANK(0x0c0000, 0x0dffff, vram + 0x40000, vram + 0x40000);
- } else if(vram_bank == 7) {
- SET_BANK(0x0c0000, 0x0dffff, vram + 0x60000, vram + 0x60000);
- } else {
- SET_BANK(0x0c0000, 0x0dffff, vram + 0x00000, vram + 0x00000);
- }
- SET_BANK(0x0e0000, 0x0effff, wdmy, dic + ((dic_bank & 0x18) >> 3) * 0x10000);
- if(kanji_bank & 0x80) {
- SET_BANK(0x0f0000, 0x0f0fff, wdmy, kanji + 0x1000 * (kanji_bank & 0x7f));
- } else {
- SET_BANK(0x0f0000, 0x0f0fff, pcg, pcg);
- }
- SET_BANK(0x0f1000, 0x0f3fff, pcg + 0x1000, pcg + 0x1000);
- SET_BANK(0x0f4000, 0x0f5fff, tvram, tvram);
- SET_BANK(0x0f6000, 0x0f7fff, tvram, tvram);
- return true;
-}
-
-bool MEMORY::process_state(FILEIO* state_fio, bool loading)
+bool MZ2800_MEMORY::process_state(FILEIO* state_fio, bool loading)
{
if(!state_fio->StateCheckUint32(STATE_VERSION)) {
return false;
[ memory ]
*/
-#ifndef _MEMORY_H_
-#define _MEMORY_H_
+#ifndef _MZ2800_MEMORY_H_
+#define _MZ2800_MEMORY_H_
#include "../vm.h"
#include "../../emu.h"
#include "../device.h"
-class MEMORY : public DEVICE
+class MZ2800_MEMORY : public DEVICE
{
private:
DEVICE* d_crtc;
uint8_t vram_bank, dic_bank, kanji_bank;
public:
- MEMORY(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+ MZ2800_MEMORY(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
{
set_device_name(_T("Memory Bus"));
}
- ~MEMORY() {}
+ ~MZ2800_MEMORY() {}
// common functions
void initialize();
uint32_t read_dma_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);
// unitque functions
void set_context_crtc(DEVICE* device)
#define STATE_VERSION 1
-#include "../../statesub.h"
-
-void MOUSE::decl_state()
-{
- enter_decl_state(STATE_VERSION);
-
- DECL_STATE_ENTRY_BOOL(select);
-
- leave_decl_state();
-}
-
-
-void MOUSE::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(select);
-}
-
-bool MOUSE::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;
-// }
-// select = state_fio->FgetBool();
- return true;
-}
-
bool MOUSE::process_state(FILEIO* state_fio, bool loading)
{
if(!state_fio->StateCheckUint32(STATE_VERSION)) {
// common functions
void initialize();
void write_signal(int id, uint32_t data, uint32_t mask);
- 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_sio(DEVICE* device)
#include "floppy.h"
#include "joystick.h"
#include "keyboard.h"
-#include "memory.h"
+#include "./memory.h"
#include "mouse.h"
#include "printer.h"
#include "reset.h"
floppy = new FLOPPY(this, emu);
joystick = new JOYSTICK(this, emu);
keyboard = new KEYBOARD(this, emu);
- memory = new MEMORY(this, emu);
+ memory = new MZ2800_MEMORY(this, emu);
mouse = new MOUSE(this, emu);
printer = new PRINTER(this, emu);
rst = new RESET(this, emu);
for(DEVICE* device = first_device; device; device = device->next_device) {
device->initialize();
}
- decl_state();
}
VM::~VM()
#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)
-{
- state_entry = new csp_state_utils(STATE_VERSION, 0, (_TCHAR *)(_T("CSP::MZ_2800_HEAD")), csp_logger);
- 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 FLOPPY;
class JOYSTICK;
class KEYBOARD;
-class MEMORY;
+class MZ2800_MEMORY;
class MOUSE;
class PRINTER;
class RESET;
FLOPPY* floppy;
JOYSTICK* joystick;
KEYBOARD* keyboard;
- MEMORY* memory;
+ MZ2800_MEMORY* memory;
MOUSE* mouse;
PRINTER* printer;
RESET* rst;
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
#define STATE_VERSION 1
-#include "../../statesub.h"
-
-void RESET::decl_state()
-{
- enter_decl_state(STATE_VERSION);
-
- DECL_STATE_ENTRY_UINT8(prev);
-
- leave_decl_state();
-}
-
-void RESET::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(prev);
-}
-
-bool RESET::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;
-// }
-// prev = state_fio->FgetUint8();
- return true;
-}
-
bool RESET::process_state(FILEIO* state_fio, bool loading)
{
if(!state_fio->StateCheckUint32(STATE_VERSION)) {
// common functions
void initialize();
void write_signal(int id, uint32_t data, uint32_t mask);
- void decl_state();
- void save_state(FILEIO* state_fio);
- bool load_state(FILEIO* state_fio);
+ bool process_state(FILEIO* state_fio, bool loading);
};
#endif
state_fio->StateBool(drq_status);
return true;
}
-
-bool SASI::process_state(FILEIO* state_fio, bool loading)
-{
- if(!state_fio->StateCheckUint32(STATE_VERSION)) {
- return false;
- }
- if(!state_fio->StateCheckInt32(this_device_id)) {
- return false;
- }
- state_fio->StateUint8(control);
- state_fio->StateBool(irq_status);
- state_fio->StateBool(drq_status);
- return true;
-}
#define STATE_VERSION 1
-#include "../../statesub.h"
-
-void SERIAL::decl_state()
-{
- enter_decl_state(STATE_VERSION);
-
- DECL_STATE_ENTRY_UINT32(addr_a0);
-
- leave_decl_state();
-}
-
-void SERIAL::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(addr_a0);
-}
-
-bool SERIAL::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;
-// }
-// addr_a0 = state_fio->FgetBool();
- return true;
-}
-
bool SERIAL::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 functions
void set_context_sio(Z80SIO* device)