OSDN Git Service

[VM][FMR50][FMR30] Apply new state framework to FMR30/50 etc.
[csp-qt/common_source_project-fm7.git] / source / src / vm / fmr30 / cmos.cpp
1 /*
2         FUJITSU FMR-30 Emulator 'eFMR-30'
3
4         Author : Takeda.Toshiya
5         Date   : 2008.12.30 -
6
7         [ cmos ]
8 */
9
10 #include "cmos.h"
11
12 void CMOS::initialize()
13 {
14         // load cmos image
15         memset(cmos, 0xff, 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 & 0x1fff] != data) {
41                 cmos[addr & 0x1fff] = data;
42                 modified = true;
43         }
44 }
45
46 uint32_t CMOS::read_io8(uint32_t addr)
47 {
48         return cmos[addr & 0x1fff];
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
65 void CMOS::save_state(FILEIO* state_fio)
66 {
67         if(state_entry != NULL) {
68                 state_entry->save_state(state_fio);
69         }
70
71 //      state_fio->FputUint32(STATE_VERSION);
72 //      state_fio->FputInt32(this_device_id);
73         
74 //      state_fio->Fwrite(cmos, sizeof(cmos), 1);
75 //      state_fio->FputBool(modified);
76 }
77
78 bool CMOS::load_state(FILEIO* state_fio)
79 {
80         bool mb = false;
81         if(state_entry != NULL) {
82                 mb = state_entry->load_state(state_fio);
83         }
84         if(!mb) {
85                 return false;
86         }
87
88 //      if(state_fio->FgetUint32() != STATE_VERSION) {
89 //              return false;
90 //      }
91 //      if(state_fio->FgetInt32() != this_device_id) {
92 //              return false;
93 //      }
94 //      state_fio->Fread(cmos, sizeof(cmos), 1);
95 //      modified = state_fio->FgetBool();
96         return true;
97 }
98