OSDN Git Service

[VM][STATE] Apply new framework to some VMs.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Sat, 20 Oct 2018 15:26:05 +0000 (00:26 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Sat, 20 Oct 2018 15:26:05 +0000 (00:26 +0900)
59 files changed:
source/src/vm/mycomz80a/display.cpp
source/src/vm/mycomz80a/display.h
source/src/vm/mycomz80a/keyboard.cpp
source/src/vm/mycomz80a/keyboard.h
source/src/vm/mycomz80a/memory.cpp
source/src/vm/mycomz80a/memory.h
source/src/vm/mycomz80a/mycomz80a.cpp
source/src/vm/mycomz80a/mycomz80a.h
source/src/vm/mz2500/cmt.cpp
source/src/vm/mz2500/cmt.h
source/src/vm/mz2500/crtc.cpp
source/src/vm/mz2500/crtc.h
source/src/vm/mz2500/floppy.cpp
source/src/vm/mz2500/floppy.h
source/src/vm/mz2500/interrupt.cpp
source/src/vm/mz2500/interrupt.h
source/src/vm/mz2500/joystick.cpp
source/src/vm/mz2500/joystick.h
source/src/vm/mz2500/keyboard.cpp
source/src/vm/mz2500/keyboard.h
source/src/vm/mz2500/memory.cpp
source/src/vm/mz2500/memory.h
source/src/vm/mz2500/memory80b.cpp
source/src/vm/mz2500/memory80b.h
source/src/vm/mz2500/mouse.cpp
source/src/vm/mz2500/mouse.h
source/src/vm/mz2500/mz1e30.cpp
source/src/vm/mz2500/mz1e30.h
source/src/vm/mz2500/mz1m01.cpp
source/src/vm/mz2500/mz1m01.h
source/src/vm/mz2500/mz1r12.cpp
source/src/vm/mz2500/mz1r12.h
source/src/vm/mz2500/mz1r13.cpp
source/src/vm/mz2500/mz1r13.h
source/src/vm/mz2500/mz1r37.cpp
source/src/vm/mz2500/mz1r37.h
source/src/vm/mz2500/mz2500.cpp
source/src/vm/mz2500/mz2500.h
source/src/vm/mz2500/mz80b.cpp
source/src/vm/mz2500/mz80b.h
source/src/vm/mz2500/serial.cpp
source/src/vm/mz2500/serial.h
source/src/vm/mz2800/crtc.cpp
source/src/vm/mz2800/crtc.h
source/src/vm/mz2800/joystick.cpp
source/src/vm/mz2800/joystick.h
source/src/vm/mz2800/keyboard.cpp
source/src/vm/mz2800/keyboard.h
source/src/vm/mz2800/memory.cpp
source/src/vm/mz2800/memory.h
source/src/vm/mz2800/mouse.cpp
source/src/vm/mz2800/mouse.h
source/src/vm/mz2800/mz2800.cpp
source/src/vm/mz2800/mz2800.h
source/src/vm/mz2800/reset.cpp
source/src/vm/mz2800/reset.h
source/src/vm/mz2800/sasi.cpp
source/src/vm/mz2800/serial.cpp
source/src/vm/mz2800/serial.h

index 8511420..e00ed82 100644 (file)
@@ -211,62 +211,6 @@ void DISPLAY::draw_80column()
 
 #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)) {
index 549a5d8..60684b7 100644 (file)
@@ -49,9 +49,7 @@ public:
        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)
index 219b848..8cb909f 100644 (file)
@@ -219,58 +219,6 @@ void KEYBOARD::event_frame()
 
 #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)) {
index 6d26e3c..4930203 100644 (file)
@@ -39,9 +39,7 @@ public:
        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)
index ea56830..24a6bd8 100644 (file)
@@ -30,7 +30,7 @@
        } \
 }
 
-void MEMORY::initialize()
+void MYCOMZ80_MEMORY::initialize()
 {
        // init memory
        memset(ram, 0, sizeof(ram));
@@ -54,26 +54,26 @@ void MEMORY::initialize()
        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) {
@@ -94,7 +94,7 @@ void MEMORY::write_io8(uint32_t addr, uint32_t data)
        }
 }
 
-void MEMORY::update_memory_map()
+void MYCOMZ80_MEMORY::update_memory_map()
 {
        if(rom_sel) {
                SET_BANK_R(0xc000, 0xefff, bios);
@@ -106,57 +106,7 @@ void MEMORY::update_memory_map()
 
 #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;
index 68129d3..9f2967f 100644 (file)
@@ -14,7 +14,7 @@
 #include "../../emu.h"
 #include "../device.h"
 
-class MEMORY : public DEVICE
+class MYCOMZ80_MEMORY : public DEVICE
 {
 private:
        uint8_t* rbank[16];
@@ -31,11 +31,11 @@ private:
        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();
@@ -43,9 +43,7 @@ public:
        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
index fe2f236..06f3792 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "display.h"
 #include "keyboard.h"
-#include "memory.h"
+#include "./memory.h"
 
 // ----------------------------------------------------------------------------
 // initialize
@@ -59,7 +59,7 @@ VM::VM(EMU* parent_emu) : VM_TEMPLATE(parent_emu)
        
        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);
@@ -152,7 +152,6 @@ VM::VM(EMU* parent_emu) : VM_TEMPLATE(parent_emu)
        for(DEVICE* device = first_device; device; device = device->next_device) {
                device->initialize();
        }
-       decl_state();
 }
 
 VM::~VM()
@@ -369,69 +368,36 @@ void VM::update_config()
 
 #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;
 }
index b413b88..6563d56 100644 (file)
@@ -70,7 +70,7 @@ class Z80;
 
 class DISPLAY;
 class KEYBOARD;
-class MEMORY;
+class MYCOMZ80_MEMORY;
 
 class VM : public VM_TEMPLATE
 {
@@ -93,7 +93,7 @@ protected:
        
        DISPLAY* display;
        KEYBOARD* keyboard;
-       MEMORY* memory;
+       MYCOMZ80_MEMORY* memory;
        
 public:
        // ----------------------------------------
@@ -152,9 +152,7 @@ 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
index 1f70578..c94e402 100644 (file)
@@ -317,95 +317,6 @@ void CMT::close_tape()
 
 #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)) {
index 4f0ec6b..dd7ce66 100644 (file)
@@ -63,9 +63,7 @@ public:
        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)
index ab0cb61..08b83ba 100644 (file)
@@ -1692,206 +1692,6 @@ void CRTC::create_addr_map(int xmax, int ymax)
 
 #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)) {
@@ -1930,24 +1730,209 @@ bool CRTC::process_state(FILEIO* state_fio, bool loading)
        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);
index 79a73f9..80585a5 100644 (file)
@@ -119,9 +119,7 @@ public:
        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)
index a89eac8..c2cc5f0 100644 (file)
@@ -49,48 +49,6 @@ void FLOPPY::write_signal(int id, uint32_t data, uint32_t mask)
 
 #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)) {
@@ -102,3 +60,5 @@ bool FLOPPY::process_state(FILEIO* state_fio, bool loading)
        state_fio->StateBool(reversed);
        return true;
 }
+
+#endif
index 0b682a1..245dba8 100644 (file)
@@ -40,9 +40,7 @@ public:
        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
index 438c10d..e6c94f0 100644 (file)
@@ -172,68 +172,6 @@ void INTERRUPT::notify_intr_reti()
 
 #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)) {
@@ -243,7 +181,13 @@ bool INTERRUPT::process_state(FILEIO* state_fio, bool loading)
                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);
index 84ac62f..e9a3348 100644 (file)
@@ -51,9 +51,7 @@ public:
        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)
index 4e84cf8..0cbbbb3 100644 (file)
@@ -53,47 +53,6 @@ uint32_t JOYSTICK::read_io8(uint32_t addr)
 
 #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)) {
index 0150737..c18a21e 100644 (file)
@@ -30,9 +30,7 @@ public:
        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
index e793e45..c22ca52 100644 (file)
@@ -75,47 +75,6 @@ void KEYBOARD::create_keystat()
 
 #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)) {
index 4ba25ee..5d9291f 100644 (file)
@@ -40,9 +40,7 @@ public:
        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)
index 4d486a7..e7d442f 100644 (file)
@@ -31,7 +31,7 @@
        } \
 }
 
-void MEMORY::initialize()
+void MZ2500_MEMORY::initialize()
 {
        // init memory
        memset(ram, 0, sizeof(ram));
@@ -67,7 +67,7 @@ void MEMORY::initialize()
 
 // NOTE: IPL reset is done at system boot
 
-void MEMORY::reset()
+void MZ2500_MEMORY::reset()
 {
        // ipl reset
        bank = 0;
@@ -85,7 +85,7 @@ void MEMORY::reset()
        extra_wait = 0;
 }
 
-void MEMORY::special_reset()
+void MZ2500_MEMORY::special_reset()
 {
        // reset
        bank = 0;
@@ -103,7 +103,7 @@ void MEMORY::special_reset()
        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
@@ -126,7 +126,7 @@ void MEMORY::write_data8_tmp(int b, uint32_t addr, uint32_t data)
        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
@@ -149,21 +149,21 @@ uint32_t MEMORY::read_data8_tmp(int b, uint32_t addr)
 }
 
 
-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;
@@ -178,7 +178,7 @@ void MEMORY::write_data8w(uint32_t addr, uint32_t data, int* wait)
        }
 }
 
-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;
@@ -194,13 +194,13 @@ uint32_t MEMORY::read_data8w(uint32_t addr, int* wait)
        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:
@@ -236,7 +236,7 @@ void MEMORY::write_io8(uint32_t addr, uint32_t data)
        }
 }
 
-uint32_t MEMORY::read_io8(uint32_t addr)
+uint32_t MZ2500_MEMORY::read_io8(uint32_t addr)
 {
        switch(addr & 0xff) {
        case 0xb4:
@@ -251,7 +251,7 @@ uint32_t MEMORY::read_io8(uint32_t addr)
        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);
@@ -268,7 +268,7 @@ void MEMORY::write_signal(int id, uint32_t data, uint32_t mask)
        blank = next;
 }
 
-void MEMORY::set_map(uint8_t data)
+void MZ2500_MEMORY::set_map(uint8_t data)
 {
        int base = bank * 0x2000;
        
@@ -330,89 +330,8 @@ void MEMORY::set_map(uint8_t data)
 
 #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;
index d1e5fc9..42388a9 100644 (file)
@@ -7,8 +7,8 @@
        [ memory ]
 */
 
-#ifndef _MEMORY_H_
-#define _MEMORY_H_
+#ifndef _MZ2500_MEMORY_H_
+#define _MZ2500_MEMORY_H_
 
 #include "../vm.h"
 #include "../../emu.h"
@@ -17,7 +17,7 @@
 #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;
@@ -50,11 +50,11 @@ private:
        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();
@@ -68,9 +68,7 @@ public:
        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)
index 4b88c8e..a3dfccb 100644 (file)
@@ -48,7 +48,7 @@
        } \
 }
 
-void MEMORY::initialize()
+void MZ80B_MEMORY::initialize()
 {
        // memory
        memset(rdmy, 0xff, sizeof(rdmy));
@@ -94,7 +94,7 @@ void MEMORY::initialize()
        register_vline_event(this);
 }
 
-void MEMORY::reset()
+void MZ80B_MEMORY::reset()
 {
        // ipl reset
        SET_BANK(0x0000, 0x07ff, wdmy, ipl, false);
@@ -105,7 +105,7 @@ void MEMORY::reset()
        update_vram_map();
 }
 
-void MEMORY::special_reset()
+void MZ80B_MEMORY::special_reset()
 {
        // reset
        SET_BANK(0x0000, 0xffff, ram, ram, false);
@@ -114,7 +114,7 @@ void MEMORY::special_reset()
        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]) {
@@ -123,7 +123,7 @@ void MEMORY::write_data8(uint32_t addr, uint32_t data)
        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]) {
@@ -132,14 +132,14 @@ uint32_t MEMORY::read_data8(uint32_t addr)
        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
@@ -197,7 +197,7 @@ void MEMORY::write_io8(uint32_t addr, uint32_t data)
        }
 }
 
-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)) {
@@ -216,7 +216,7 @@ void MEMORY::write_signal(int id, uint32_t data, uint32_t 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);
@@ -229,7 +229,7 @@ void MEMORY::event_vline(int v, int clock)
 //     }
 }
 
-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;
@@ -238,14 +238,14 @@ void MEMORY::event_callback(int event_id, int err)
 }
 
 #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) {
@@ -282,7 +282,7 @@ void MEMORY::update_vram_map()
 #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)) {
@@ -297,7 +297,7 @@ void MEMORY::load_dat_image(const _TCHAR* file_path)
        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"));
@@ -327,7 +327,7 @@ bool MEMORY::load_mzt_image(const _TCHAR* file_path)
        return result;
 }
 
-void MEMORY::draw_screen()
+void MZ80B_MEMORY::draw_screen()
 {
        // render text
 #ifndef _MZ80B
@@ -624,111 +624,7 @@ void MEMORY::draw_screen()
 
 #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;
index 5b828d7..38c72f4 100644 (file)
@@ -27,7 +27,7 @@
 
 class Z80;
 
-class MEMORY : public DEVICE
+class MZ80B_MEMORY : public DEVICE
 {
 private:
        Z80 *d_cpu;
@@ -81,11 +81,11 @@ private:
 #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();
@@ -98,9 +98,7 @@ public:
        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)
index 43ecfae..a86f337 100644 (file)
@@ -40,46 +40,6 @@ void MOUSE::write_signal(int id, uint32_t data, uint32_t mask)
 
 #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)) {
index 43f9c30..960b2d0 100644 (file)
@@ -36,9 +36,7 @@ public:
        // 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)
index 9e02d9e..f60e77a 100644 (file)
@@ -142,53 +142,6 @@ void MZ1E30::write_signal(int id, uint32_t data, uint32_t mask)
 
 #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)) {
index 24eac64..1926fd8 100644 (file)
@@ -46,9 +46,7 @@ public:
        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)
index c408a7c..555c8a2 100644 (file)
@@ -113,50 +113,6 @@ void MZ1M01::write_signal(int id, uint32_t data, uint32_t mask)
 
 #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)) {
index 9d4096f..e180863 100644 (file)
@@ -47,9 +47,7 @@ public:
        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)
index 15d7a35..eb2e9cd 100644 (file)
@@ -77,56 +77,6 @@ uint32_t MZ1R12::read_io8(uint32_t addr)
 
 #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)) {
index 98bd232..8012ee0 100644 (file)
@@ -35,9 +35,7 @@ public:
        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
index 33e9821..b3c5433 100644 (file)
@@ -72,50 +72,6 @@ uint32_t MZ1R13::read_io8(uint32_t addr)
 
 #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)) {
index 7f01b63..5953f95 100644 (file)
@@ -36,9 +36,7 @@ public:
        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
index 974091c..1b52e26 100644 (file)
@@ -54,52 +54,6 @@ uint32_t MZ1R37::read_io8(uint32_t addr)
 
 #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)) {
index 31a0cc3..3255445 100644 (file)
@@ -32,9 +32,7 @@ public:
        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
index 7c0657f..4177279 100644 (file)
@@ -44,7 +44,7 @@
 #include "interrupt.h"
 #include "joystick.h"
 #include "keyboard.h"
-#include "memory.h"
+#include "./memory.h"
 #include "mouse.h"
 #include "mz1e26.h"
 #include "mz1e30.h"
@@ -107,7 +107,7 @@ VM::VM(EMU* parent_emu) : VM_TEMPLATE(parent_emu)
        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);
@@ -255,7 +255,6 @@ VM::VM(EMU* parent_emu) : VM_TEMPLATE(parent_emu)
                }
        }
        monitor_type = config.monitor_type;
-       decl_state();
 }
 
 VM::~VM()
@@ -587,70 +586,38 @@ void VM::update_config()
 
 #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;
 }
index 52a8c9d..af2b091 100644 (file)
@@ -97,7 +97,7 @@ class FLOPPY;
 class INTERRUPT;
 class JOYSTICK;
 class KEYBOARD;
-class MEMORY;
+class MZ2500_MEMORY;
 class MOUSE;
 class MZ1E26;
 class MZ1E30;
@@ -138,7 +138,7 @@ protected:
        INTERRUPT* interrupt;
        JOYSTICK* joystick;
        KEYBOARD* keyboard;
-       MEMORY* memory;
+       MZ2500_MEMORY* memory;
        MOUSE* mouse;
        MZ1E26* mz1e26;
        MZ1E30* mz1e30;
@@ -222,9 +222,7 @@ 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
index 7ab781f..f3f286d 100644 (file)
@@ -33,7 +33,7 @@
 #include "cmt.h"
 #include "floppy.h"
 #include "keyboard.h"
-#include "memory80b.h"
+#include "./memory80b.h"
 #include "mz1r12.h"
 #include "mz1r13.h"
 #include "printer.h"
@@ -82,7 +82,7 @@ VM::VM(EMU* parent_emu) : VM_TEMPLATE(parent_emu)
        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);
@@ -258,7 +258,6 @@ VM::VM(EMU* parent_emu) : VM_TEMPLATE(parent_emu)
        for(DEVICE* device = first_device; device; device = device->next_device) {
                device->initialize();
        }
-       decl_state();
 }
 
 VM::~VM()
@@ -559,65 +558,36 @@ void VM::update_config()
 
 #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;
 }
index c7382d4..d4eb50d 100644 (file)
@@ -103,7 +103,7 @@ class Z80PIO;
 class CMT;
 class FLOPPY;
 class KEYBOARD;
-class MEMORY;
+class MZ80B_MEMORY;
 class MZ1R12;
 class MZ1R13;
 class PRINTER;
@@ -141,7 +141,7 @@ protected:
        CMT* cmt;
        FLOPPY* floppy;
        KEYBOARD* keyboard;
-       MEMORY* memory;
+       MZ80B_MEMORY* memory;
        MZ1R12* mz1r12;
        MZ1R13* mz1r13;
        PRINTER* printer;
@@ -222,9 +222,7 @@ 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
index c03eff3..567e4ad 100644 (file)
@@ -69,47 +69,6 @@ uint32_t SERIAL::read_io8(uint32_t addr)
 
 #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)) {
index adcb212..bedc910 100644 (file)
@@ -33,9 +33,7 @@ public:
        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)
index c8c57a8..8afaea5 100644 (file)
@@ -1317,176 +1317,6 @@ void CRTC::draw_cg()
 
 #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)) {
@@ -1521,18 +1351,129 @@ bool CRTC::process_state(FILEIO* state_fio, bool loading)
        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);
index e912498..336ea62 100644 (file)
@@ -96,9 +96,7 @@ public:
        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)
index ba05564..10d17d7 100644 (file)
@@ -53,47 +53,6 @@ uint32_t JOYSTICK::read_io8(uint32_t addr)
 
 #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)) {
index f9b949e..43f21cf 100644 (file)
@@ -30,9 +30,7 @@ public:
        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
index 6a2fd09..5767fb2 100644 (file)
@@ -87,47 +87,6 @@ void KEYBOARD::create_keystat()
 
 #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)) {
index 84bdd42..b6c939a 100644 (file)
@@ -39,9 +39,7 @@ public:
        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)
index e4e87b4..d755559 100644 (file)
@@ -7,7 +7,7 @@
        [ memory ]
 */
 
-#include "memory.h"
+#include "./memory.h"
 
 #define SET_BANK(s, e, w, r) { \
        int sb = (s) >> 11, eb = (e) >> 11; \
@@ -25,7 +25,7 @@
        } \
 }
 
-void MEMORY::initialize()
+void MZ2800_MEMORY::initialize()
 {
        // init memory
        memset(ram, 0, sizeof(ram));
@@ -61,7 +61,7 @@ void MEMORY::initialize()
        delete fio;
 }
 
-void MEMORY::reset()
+void MZ2800_MEMORY::reset()
 {
        SET_BANK(0x000000, 0x0bffff, ram, ram);
        SET_BANK(0x0c0000, 0x0dffff, vram, vram);
@@ -79,7 +79,7 @@ void MEMORY::reset()
        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);
@@ -90,7 +90,7 @@ void MEMORY::write_data8(uint32_t addr, uint32_t 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);
@@ -101,17 +101,17 @@ uint32_t MEMORY::read_data8(uint32_t addr)
        }
 }
 
-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:
@@ -160,7 +160,7 @@ void MEMORY::write_io8(uint32_t addr, uint32_t data)
        }
 }
 
-uint32_t MEMORY::read_io8(uint32_t addr)
+uint32_t MZ2800_MEMORY::read_io8(uint32_t addr)
 {
        switch(addr & 0x7fff) {
        case 0x8c:
@@ -177,94 +177,7 @@ uint32_t MEMORY::read_io8(uint32_t addr)
 
 #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;
index 3537e29..26fc92f 100644 (file)
@@ -7,14 +7,14 @@
        [ 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;
@@ -36,11 +36,11 @@ private:
        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();
@@ -51,9 +51,7 @@ public:
        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)
index 0309f5e..2305de8 100644 (file)
@@ -40,48 +40,6 @@ void MOUSE::write_signal(int id, uint32_t data, uint32_t mask)
 
 #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)) {
index 6dd9eb0..6f5b9a6 100644 (file)
@@ -36,9 +36,7 @@ public:
        // 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)
index 2f8b54f..5915fde 100644 (file)
@@ -42,7 +42,7 @@
 #include "floppy.h"
 #include "joystick.h"
 #include "keyboard.h"
-#include "memory.h"
+#include "./memory.h"
 #include "mouse.h"
 #include "printer.h"
 #include "reset.h"
@@ -95,7 +95,7 @@ VM::VM(EMU* parent_emu) : VM_TEMPLATE(parent_emu)
        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);
@@ -236,7 +236,6 @@ VM::VM(EMU* parent_emu) : VM_TEMPLATE(parent_emu)
        for(DEVICE* device = first_device; device; device = device->next_device) {
                device->initialize();
        }
-       decl_state();
 }
 
 VM::~VM()
@@ -451,69 +450,37 @@ void VM::update_config()
 
 #define STATE_VERSION  5
 
-#include "../../statesub.h"
-#include "../../qt/gui/csp_logger.h"
-extern CSP_Logger DLL_PREFIX_I *csp_logger;
-
-void VM::decl_state(void)
-{
-       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;
 }
index a4027b6..59903cf 100644 (file)
@@ -82,7 +82,7 @@ class CRTC;
 class FLOPPY;
 class JOYSTICK;
 class KEYBOARD;
-class MEMORY;
+class MZ2800_MEMORY;
 class MOUSE;
 class PRINTER;
 class RESET;
@@ -119,7 +119,7 @@ protected:
        FLOPPY* floppy;
        JOYSTICK* joystick;
        KEYBOARD* keyboard;
-       MEMORY* memory;
+       MZ2800_MEMORY* memory;
        MOUSE* mouse;
        PRINTER* printer;
        RESET* rst;
@@ -174,9 +174,7 @@ 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
index 65ad7e0..a999525 100644 (file)
@@ -28,47 +28,6 @@ void RESET::write_signal(int id, uint32_t data, uint32_t mask)
 
 #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)) {
index 71ed18e..da781aa 100644 (file)
@@ -31,9 +31,7 @@ public:
        // 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
index 46e0828..388ba97 100644 (file)
@@ -136,17 +136,3 @@ bool SASI::process_state(FILEIO* state_fio, bool loading)
        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;
-}
index d20566f..6959ab2 100644 (file)
@@ -69,47 +69,6 @@ uint32_t SERIAL::read_io8(uint32_t addr)
 
 #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)) {
index 9ed8173..e72620f 100644 (file)
@@ -33,9 +33,7 @@ public:
        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)