OSDN Git Service

[General] Tracking to upstream, rev 2015-01-14.
[csp-qt/common_source_project-fm7.git] / source / src / vm / pyuta / memory.cpp
index d023e0d..752f5e6 100644 (file)
        } \\r
 }\r
 \r
+#define ENABLE_CART() { \\r
+       if(ctype == 3) { \\r
+               SET_BANK(0x0000, 0x3fff, wdmy, ipl); \\r
+               SET_BANK(0x4000, 0xbfff, wdmy, cart); \\r
+       } else { \\r
+               SET_BANK(0x0000, 0x7fff, wdmy, ipl); \\r
+               SET_BANK(0x8000, 0xbfff, wdmy, cart); \\r
+       } \\r
+       cart_enabled = true; \\r
+}\r
+\r
+#define DISABLE_CART() { \\r
+       SET_BANK(0x0000, 0x7fff, wdmy, ipl); \\r
+       SET_BANK(0x8000, 0xbfff, wdmy, basic); \\r
+       cart_enabled = false; \\r
+}\r
+\r
 void MEMORY::initialize()\r
 {\r
        memset(ipl, 0xff, sizeof(ipl));\r
@@ -51,8 +68,7 @@ void MEMORY::initialize()
        delete fio;\r
        \r
        // set memory map\r
-       SET_BANK(0x0000, 0x7fff, wdmy, ipl);\r
-       SET_BANK(0x8000, 0xbfff, wdmy, basic);\r
+       DISABLE_CART();\r
        SET_BANK(0xc000, 0xffff, wdmy, rdmy);\r
        \r
        // get keyboard and joystick buffers\r
@@ -67,21 +83,6 @@ void MEMORY::reset()
        cmt_signal = cmt_remote = false;\r
 }\r
 \r
-#define ENABLE_CART() { \\r
-       if(ctype == 3) { \\r
-               SET_BANK(0x0000, 0x3fff, wdmy, ipl); \\r
-               SET_BANK(0x4000, 0xbfff, wdmy, cart); \\r
-       } else { \\r
-               SET_BANK(0x0000, 0x7fff, wdmy, ipl); \\r
-               SET_BANK(0x8000, 0xbfff, wdmy, cart); \\r
-       } \\r
-}\r
-\r
-#define DISABLE_CART() { \\r
-       SET_BANK(0x0000, 0x7fff, wdmy, ipl); \\r
-       SET_BANK(0x8000, 0xbfff, wdmy, basic); \\r
-}\r
-\r
 void MEMORY::write_data8(uint32 addr, uint32 data)\r
 {\r
        addr &= 0xffff;\r
@@ -312,3 +313,39 @@ void MEMORY::close_cart()
        DISABLE_CART();\r
 }\r
 \r
+#define STATE_VERSION  1\r
+\r
+void MEMORY::save_state(FILEIO* state_fio)\r
+{\r
+       state_fio->FputUint32(STATE_VERSION);\r
+       state_fio->FputInt32(this_device_id);\r
+       \r
+       state_fio->FputBool(cmt_signal);\r
+       state_fio->FputBool(cmt_remote);\r
+       state_fio->FputBool(has_extrom);\r
+       state_fio->FputBool(cart_enabled);\r
+       state_fio->FputInt32(ctype);\r
+}\r
+\r
+bool MEMORY::load_state(FILEIO* state_fio)\r
+{\r
+       if(state_fio->FgetUint32() != STATE_VERSION) {\r
+               return false;\r
+       }\r
+       if(state_fio->FgetInt32() != this_device_id) {\r
+               return false;\r
+       }\r
+       cmt_signal = state_fio->FgetBool();\r
+       cmt_remote = state_fio->FgetBool();\r
+       has_extrom = state_fio->FgetBool();\r
+       cart_enabled = state_fio->FgetBool();\r
+       ctype = state_fio->FgetInt32();\r
+       \r
+       if(cart_enabled) {\r
+               ENABLE_CART();\r
+       } else {\r
+               DISABLE_CART();\r
+       }\r
+       return true;\r
+}\r
+\r