OSDN Git Service

fc0d2d6e18efd59377d44c387fcdc237923d2ebb
[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 void RAMPACK::initialize()
13 {
14         memset(ram, 0, sizeof(ram));
15         modified = false;
16         
17         FILEIO* fio = new FILEIO();
18         if(fio->Fopen(create_local_path(_T("RAMPACK%d.BIN"), index), FILEIO_READ_BINARY)) {
19                 fio->Fread(ram, sizeof(ram), 1);
20                 fio->Fclose();
21         }
22         delete fio;
23 }
24
25 void RAMPACK::release()
26 {
27         if(modified) {
28                 FILEIO* fio = new FILEIO();
29                 if(fio->Fopen(create_local_path(_T("RAMPACK%d.BIN"), index), FILEIO_WRITE_BINARY)) {
30                         fio->Fwrite(ram, sizeof(ram), 1);
31                         fio->Fclose();
32                 }
33                 delete fio;
34         }
35 }
36
37 void RAMPACK::write_io8(uint32_t addr, uint32_t data)
38 {
39         if(addr < 0x4000) {
40                 if(ram[addr] != data) {
41                         ram[addr] = data;
42                         modified = true;
43                 }
44         }
45 }
46
47 uint32_t RAMPACK::read_io8(uint32_t addr)
48 {
49         if(addr < 0x4000) {
50                 return ram[addr];
51         } else if(0xff00 <= addr && addr < 0xff80) {
52                 return 0x01; // device id
53         }
54         return 0xff;
55 }
56
57 #define STATE_VERSION   1
58
59 #include "../../statesub.h"
60
61 void RAMPACK::decl_state()
62 {
63         enter_decl_state(STATE_VERSION);
64
65         DECL_STATE_ENTRY_1D_ARRAY(ram, sizeof(ram));
66         DECL_STATE_ENTRY_BOOL(modified);
67         
68         leave_decl_state();
69 }
70
71 void RAMPACK::save_state(FILEIO* state_fio)
72 {
73         if(state_entry != NULL) {
74                 state_entry->save_state(state_fio);
75         }
76
77 //      state_fio->FputUint32(STATE_VERSION);
78 //      state_fio->FputInt32(this_device_id);
79         
80 //      state_fio->Fwrite(ram, sizeof(ram), 1);
81 //      state_fio->FputBool(modified);
82 }
83
84 bool RAMPACK::load_state(FILEIO* state_fio)
85 {
86         bool mb = false;
87         if(state_entry != NULL) {
88                 mb = state_entry->load_state(state_fio);
89         }
90         if(!mb) {
91                 return false;
92         }
93
94 //      if(state_fio->FgetUint32() != STATE_VERSION) {
95 //              return false;
96 //      }
97 //      if(state_fio->FgetInt32() != this_device_id) {
98 //              return false;
99 //      }
100 //      state_fio->Fread(ram, sizeof(ram), 1);
101 //      modified = state_fio->FgetBool();
102         return true;
103 }
104
105 bool RAMPACK::process_state(FILEIO* state_fio, bool loading)
106 {
107         if(!state_fio->StateCheckUint32(STATE_VERSION)) {
108                 return false;
109         }
110         if(!state_fio->StateCheckInt32(this_device_id)) {
111                 return false;
112         }
113         state_fio->StateBuffer(ram, sizeof(ram), 1);
114         state_fio->StateBool(modified);
115         return true;
116 }