OSDN Git Service

[VM][STATE] Apply New framework to some VMs.
[csp-qt/common_source_project-fm7.git] / source / src / vm / phc25 / system.cpp
1 /*
2         SANYO PHC-25 Emulator 'ePHC-25'
3         SEIKO MAP-1010 Emulator 'eMAP-1010'
4
5         Author : Takeda.Toshiya
6         Date   : 2010.08.03-
7
8         [ system port ]
9 */
10
11 #include "./system.h"
12 #include "../datarec.h"
13 #include "../mc6847.h"
14
15 void PHC25_SYSTEM::initialize()
16 {
17         sysport = 0;
18 }
19
20 void PHC25_SYSTEM::reset()
21 {
22         d_vdp->write_signal(SIG_MC6847_INTEXT, 1, 1);
23 }
24
25 void PHC25_SYSTEM::write_io8(uint32_t addr, uint32_t data)
26 {
27         d_drec->write_signal(SIG_DATAREC_MIC, data, 0x01);
28         d_drec->write_signal(SIG_DATAREC_REMOTE, ~data, 0x02);
29         // bit2 : kana lock led ???
30         // bit3 : printer strobe
31         d_vdp->write_signal(SIG_MC6847_GM, (data & 0x20) ? 7 : 6, 7);
32         d_vdp->write_signal(SIG_MC6847_CSS, data, 0x40);
33         d_vdp->write_signal(SIG_MC6847_AG, data, 0x80);
34 }
35
36 uint32_t PHC25_SYSTEM::read_io8(uint32_t addr)
37 {
38         return sysport;
39 }
40
41 void PHC25_SYSTEM::write_signal(int id, uint32_t data, uint32_t mask)
42 {
43         sysport = (sysport & ~mask) | (data & mask);
44 }
45
46 #define STATE_VERSION   1
47
48 #include "../../statesub.h"
49
50 void PHC25_SYSTEM::decl_state()
51 {
52         enter_decl_state(STATE_VERSION);
53
54         DECL_STATE_ENTRY_UINT8(sysport);
55         
56         leave_decl_state();
57 }
58
59 void PHC25_SYSTEM::save_state(FILEIO* state_fio)
60 {
61         if(state_entry != NULL) {
62                 state_entry->save_state(state_fio);
63         }
64 //      state_fio->FputUint32(STATE_VERSION);
65 //      state_fio->FputInt32(this_device_id);
66         
67 //      state_fio->FputUint8(sysport);
68 }
69
70 bool PHC25_SYSTEM::load_state(FILEIO* state_fio)
71 {
72         bool mb = false;
73         if(state_entry != NULL) {
74                 mb = state_entry->load_state(state_fio);
75         }
76         if(!mb) {
77                 return false;
78         }
79 //      if(state_fio->FgetUint32() != STATE_VERSION) {
80 //              return false;
81 //      }
82 //      if(state_fio->FgetInt32() != this_device_id) {
83 //              return false;
84 //      }
85 //      sysport = state_fio->FgetUint8();
86         return true;
87 }
88
89 bool PHC25_SYSTEM::process_state(FILEIO* state_fio, bool loading)
90 {
91         if(!state_fio->StateCheckUint32(STATE_VERSION)) {
92                 return false;
93         }
94         if(!state_fio->StateCheckInt32(this_device_id)) {
95                 return false;
96         }
97         state_fio->StateUint8(sysport);
98         return true;
99 }