OSDN Git Service

[VM][General][WIP] Start to merge upstream 2018-10-14.Open branch upstream_20181014 .
[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 namespace FMR30 {
13
14 void CMOS::initialize()
15 {
16         // load cmos image
17         memset(cmos, 0xff, sizeof(cmos));
18         modified = false;
19         
20         FILEIO* fio = new FILEIO();
21         if(fio->Fopen(create_local_path(_T("CMOS.BIN")), FILEIO_READ_BINARY)) {
22                 fio->Fread(cmos, sizeof(cmos), 1);
23                 fio->Fclose();
24         }
25         delete fio;
26 }
27
28 void CMOS::release()
29 {
30         if(modified) {
31                 FILEIO* fio = new FILEIO();
32                 if(fio->Fopen(create_local_path(_T("CMOS.BIN")), FILEIO_WRITE_BINARY)) {
33                         fio->Fwrite(cmos, sizeof(cmos), 1);
34                         fio->Fclose();
35                 }
36                 delete fio;
37         }
38 }
39
40 void CMOS::write_io8(uint32_t addr, uint32_t data)
41 {
42         if(cmos[addr & 0x1fff] != data) {
43                 cmos[addr & 0x1fff] = data;
44                 modified = true;
45         }
46 }
47
48 uint32_t CMOS::read_io8(uint32_t addr)
49 {
50         return cmos[addr & 0x1fff];
51 }
52
53 #define STATE_VERSION   1
54
55 bool CMOS::process_state(FILEIO* state_fio, bool loading)
56 {
57         if(!state_fio->StateCheckUint32(STATE_VERSION)) {
58                 return false;
59         }
60         if(!state_fio->StateCheckInt32(this_device_id)) {
61                 return false;
62         }
63         state_fio->StateArray(cmos, sizeof(cmos), 1);
64         state_fio->StateValue(modified);
65         return true;
66 }
67
68 }