OSDN Git Service

[VM][WIP] Pre-process to apply new state framework.Still not buildable.
[csp-qt/common_source_project-fm7.git] / source / src / vm / fm16beta / cmos.cpp
1 /*
2         FUJITSU FM16beta Emulator 'eFM16beta'
3
4         Author : Takeda.Toshiya
5         Date   : 2017.12.30-
6
7         [ cmos ]
8 */
9
10 #include "cmos.h"
11
12 void CMOS::initialize()
13 {
14         // load cmos image
15         memset(cmos, 0, sizeof(cmos));
16         modified = false;
17         
18         FILEIO* fio = new FILEIO();
19         if(fio->Fopen(create_local_path(_T("CMOS.BIN")), FILEIO_READ_BINARY)) {
20                 fio->Fread(cmos, sizeof(cmos), 1);
21                 fio->Fclose();
22         }
23         delete fio;
24 }
25
26 void CMOS::release()
27 {
28         if(modified) {
29                 FILEIO* fio = new FILEIO();
30                 if(fio->Fopen(create_local_path(_T("CMOS.BIN")), FILEIO_WRITE_BINARY)) {
31                         fio->Fwrite(cmos, sizeof(cmos), 1);
32                         fio->Fclose();
33                 }
34                 delete fio;
35         }
36 }
37
38 void CMOS::write_io8(uint32_t addr, uint32_t data)
39 {
40         if(cmos[addr & 0x7ff] != data) {
41                 cmos[addr & 0x7ff] = data;
42                 modified = true;
43         }
44 }
45
46 uint32_t CMOS::read_io8(uint32_t addr)
47 {
48         return cmos[addr & 0x7ff];
49 }
50
51 #define STATE_VERSION   1
52
53 #include "../../statesub.h"
54
55 void CMOS::decl_state()
56 {
57         enter_decl_state(STATE_VERSION);
58
59         DECL_STATE_ENTRY_1D_ARRAY(cmos, sizeof(cmos));
60         DECL_STATE_ENTRY_BOOL(modified);
61
62         leave_decl_state();
63 }
64 void CMOS::save_state(FILEIO* state_fio)
65 {
66         if(state_entry != NULL) {
67                 state_entry->save_state(state_fio);
68         }
69
70 //      state_fio->FputUint32(STATE_VERSION);
71 //      state_fio->FputInt32(this_device_id);
72         
73 //      state_fio->Fwrite(cmos, sizeof(cmos), 1);
74 //      state_fio->FputBool(modified);
75 }
76
77 bool CMOS::load_state(FILEIO* state_fio)
78 {
79         bool mb = false;
80         if(state_entry != NULL) {
81                 mb = state_entry->load_state(state_fio);
82         }
83         if(!mb) {
84                 return false;
85         }
86
87 //      if(state_fio->FgetUint32() != STATE_VERSION) {
88 //              return false;
89 //      }
90 //      if(state_fio->FgetInt32() != this_device_id) {
91 //              return false;
92 //      }
93 //      state_fio->Fread(cmos, sizeof(cmos), 1);
94 //      modified = state_fio->FgetBool();
95         return true;
96 }
97
98 bool CMOS::process_state(FILEIO* state_fio, bool loading)
99 {
100         if(!state_fio->StateCheckUint32(STATE_VERSION)) {
101                 return false;
102         }
103         if(!state_fio->StateCheckInt32(this_device_id)) {
104                 return false;
105         }
106         state_fio->StateBuffer(cmos, sizeof(cmos), 1);
107         state_fio->StateBool(modified);
108         return true;
109 }