OSDN Git Service

[VM][STATE] Use namespace {VMNAME} to separate per VMs.
[csp-qt/common_source_project-fm7.git] / source / src / vm / mz5500 / sysport.cpp
1 /*
2         SHARP MZ-5500 Emulator 'EmuZ-5500'
3
4         Author : Takeda.Toshiya
5         Date   : 2008.04.10 -
6
7         [ system port ]
8 */
9
10 #include "sysport.h"
11
12 namespace MZ5500 {
13
14 void SYSPORT::initialize()
15 {
16         rst = 0;
17         register_frame_event(this);
18 }
19
20 void SYSPORT::write_io8(uint32_t addr, uint32_t data)
21 {
22         switch(addr & 0x3f0) {
23         case 0x70:
24                 // port-c
25                 if(data & 8) {
26                         d_fdc->reset();
27                 }
28 #if defined(_MZ6500) || defined(_MZ6550)
29                 highden = data & 4;
30 #endif
31                 break;
32         case 0x260:
33                 // z80ctc reti
34                 if(data == 0x4d) {
35                         d_ctc->notify_intr_reti();
36                 }
37                 break;
38         }
39 }
40
41 uint32_t SYSPORT::read_io8(uint32_t addr)
42 {
43         switch(addr & 0x3ff) {
44         case 0x60:
45                 // port-a
46 #if defined(_MZ6500) || defined(_MZ6550)
47                 return 0xfc | (rst ? 0 : 2) | (highden ? 1 : 0);
48 #else
49                 return 0xfd | (rst ? 0 : 2);
50 #endif
51         case 0x240:
52                 // z80ctc vector
53                 return d_ctc->get_intr_ack();
54         case 0x250:
55                 // z80sio vector
56                 return d_sio->get_intr_ack();
57         case 0x270:
58                 // port-b
59                 return 0xff;
60         }
61         return 0xff;
62 }
63
64 void SYSPORT::event_frame()
65 {
66         if(rst) {
67                 rst--;
68         }
69 }
70
71 #define STATE_VERSION   1
72
73 bool SYSPORT::process_state(FILEIO* state_fio, bool loading)
74 {
75         if(!state_fio->StateCheckUint32(STATE_VERSION)) {
76                 return false;
77         }
78         if(!state_fio->StateCheckInt32(this_device_id)) {
79                 return false;
80         }
81         state_fio->StateInt32(rst);
82         state_fio->StateInt32(highden);
83         return true;
84 }
85
86 }