-/*\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;
+}