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 / 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 namespace FM16BETA {
13         
14 void CMOS::initialize()
15 {
16         // load cmos image
17         memset(cmos, 0, 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 & 0x7ff] != data) {
43                 cmos[addr & 0x7ff] = data;
44                 modified = true;
45         }
46 }
47
48 uint32_t CMOS::read_io8(uint32_t addr)
49 {
50         return cmos[addr & 0x7ff];
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 }