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 / fp1100 / rampack.cpp
1 /*
2         CASIO FP-1100 Emulator 'eFP-1100'
3
4         Author : Takeda.Toshiya
5         Date   : 2010.06.18-
6
7         [ ram pack ]
8 */
9
10 #include "rampack.h"
11
12 namespace FP1100 {
13         
14 void RAMPACK::initialize()
15 {
16         memset(ram, 0, sizeof(ram));
17         modified = false;
18         
19         FILEIO* fio = new FILEIO();
20         if(fio->Fopen(create_local_path(_T("RAMPACK%d.BIN"), index), FILEIO_READ_BINARY)) {
21                 fio->Fread(ram, sizeof(ram), 1);
22                 fio->Fclose();
23         }
24         delete fio;
25 }
26
27 void RAMPACK::release()
28 {
29         if(modified) {
30                 FILEIO* fio = new FILEIO();
31                 if(fio->Fopen(create_local_path(_T("RAMPACK%d.BIN"), index), FILEIO_WRITE_BINARY)) {
32                         fio->Fwrite(ram, sizeof(ram), 1);
33                         fio->Fclose();
34                 }
35                 delete fio;
36         }
37 }
38
39 void RAMPACK::write_io8(uint32_t addr, uint32_t data)
40 {
41         if(addr < 0x4000) {
42                 if(ram[addr] != data) {
43                         ram[addr] = data;
44                         modified = true;
45                 }
46         }
47 }
48
49 uint32_t RAMPACK::read_io8(uint32_t addr)
50 {
51         if(addr < 0x4000) {
52                 return ram[addr];
53         } else if(0xff00 <= addr && addr < 0xff80) {
54                 return 0x01; // device id
55         }
56         return 0xff;
57 }
58
59 #define STATE_VERSION   1
60
61 bool RAMPACK::process_state(FILEIO* state_fio, bool loading)
62 {
63         if(!state_fio->StateCheckUint32(STATE_VERSION)) {
64                 return false;
65         }
66         if(!state_fio->StateCheckInt32(this_device_id)) {
67                 return false;
68         }
69         state_fio->StateArray(ram, sizeof(ram), 1);
70         state_fio->StateValue(modified);
71         return true;
72 }
73
74 }