OSDN Git Service

[VM][General] Merge upstream 2016-03-01. (Pahse 1).
[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 void CMOS::save_state(FILEIO* state_fio)
54 {
55         state_fio->FputUint32(STATE_VERSION);
56         state_fio->FputInt32(this_device_id);
57         
58         state_fio->Fwrite(cmos, sizeof(cmos), 1);
59         state_fio->FputBool(modified);
60 }
61
62 bool CMOS::load_state(FILEIO* state_fio)
63 {
64         if(state_fio->FgetUint32() != STATE_VERSION) {
65                 return false;
66         }
67         if(state_fio->FgetInt32() != this_device_id) {
68                 return false;
69         }
70         state_fio->Fread(cmos, sizeof(cmos), 1);
71         modified = state_fio->FgetBool();
72         return true;
73 }
74