OSDN Git Service

[VM][STATE] Apply new framework to some VMs.
[csp-qt/common_source_project-fm7.git] / source / src / vm / mz5500 / sysport.cpp
index fb15a17..96a9b49 100644 (file)
@@ -1,61 +1,82 @@
-/*\r
-       SHARP MZ-5500 Emulator 'EmuZ-5500'\r
-\r
-       Author : Takeda.Toshiya\r
-       Date   : 2008.04.10 -\r
-\r
-       [ system port ]\r
-*/\r
-\r
-#include "sysport.h"\r
-\r
-void SYSPORT::initialize()\r
-{\r
-       rst = 0;\r
-       register_frame_event(this);\r
-}\r
-\r
-void SYSPORT::write_io8(uint32 addr, uint32 data)\r
-{\r
-       switch(addr & 0x3f0) {\r
-       case 0x70:\r
-               // port-c\r
-               if(data & 8) {\r
-                       d_fdc->reset();\r
-               }\r
-#if defined(_MZ6500) || defined(_MZ6550)\r
-               highden = data & 4;\r
-#endif\r
-               break;\r
-       case 0x260:\r
-               // z80ctc reti\r
-               if(data == 0x4d) {\r
-                       d_ctc->intr_reti();\r
-               }\r
-               break;\r
-       }\r
-}\r
-\r
-uint32 SYSPORT::read_io8(uint32 addr)\r
-{\r
-       switch(addr & 0x3ff) {\r
-       case 0x60:\r
-               // port-a\r
-#if defined(_MZ6500) || defined(_MZ6550)\r
-               return 0xfc | (rst ? 0 : 2) | (highden ? 1 : 0);\r
-#else\r
-               return 0xfd | (rst ? 0 : 2);\r
-#endif\r
-       case 0x240:\r
-               // z80ctc vector\r
-               return d_ctc->intr_ack();\r
-       case 0x250:\r
-               // z80sio vector\r
-               return d_sio->intr_ack();\r
-       case 0x270:\r
-               // port-b\r
-               return 0xff;\r
-       }\r
-       return 0xff;\r
-}\r
-\r
+/*
+       SHARP MZ-5500 Emulator 'EmuZ-5500'
+
+       Author : Takeda.Toshiya
+       Date   : 2008.04.10 -
+
+       [ system port ]
+*/
+
+#include "sysport.h"
+
+void SYSPORT::initialize()
+{
+       rst = 0;
+       register_frame_event(this);
+}
+
+void SYSPORT::write_io8(uint32_t addr, uint32_t data)
+{
+       switch(addr & 0x3f0) {
+       case 0x70:
+               // port-c
+               if(data & 8) {
+                       d_fdc->reset();
+               }
+#if defined(_MZ6500) || defined(_MZ6550)
+               highden = data & 4;
+#endif
+               break;
+       case 0x260:
+               // z80ctc reti
+               if(data == 0x4d) {
+                       d_ctc->notify_intr_reti();
+               }
+               break;
+       }
+}
+
+uint32_t SYSPORT::read_io8(uint32_t addr)
+{
+       switch(addr & 0x3ff) {
+       case 0x60:
+               // port-a
+#if defined(_MZ6500) || defined(_MZ6550)
+               return 0xfc | (rst ? 0 : 2) | (highden ? 1 : 0);
+#else
+               return 0xfd | (rst ? 0 : 2);
+#endif
+       case 0x240:
+               // z80ctc vector
+               return d_ctc->get_intr_ack();
+       case 0x250:
+               // z80sio vector
+               return d_sio->get_intr_ack();
+       case 0x270:
+               // port-b
+               return 0xff;
+       }
+       return 0xff;
+}
+
+void SYSPORT::event_frame()
+{
+       if(rst) {
+               rst--;
+       }
+}
+
+#define STATE_VERSION  1
+
+bool SYSPORT::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->StateInt32(rst);
+       state_fio->StateInt32(highden);
+       return true;
+}