OSDN Git Service

[VM][General] Merge upstream 2016-03-01. (Pahse 1).
[csp-qt/common_source_project-fm7.git] / source / src / vm / mz700 / ramfile.cpp
1 /*
2         SHARP MZ-700 Emulator 'EmuZ-700'
3         SHARP MZ-800 Emulator 'EmuZ-800'
4         SHARP MZ-1500 Emulator 'EmuZ-1500'
5
6         Author : Takeda.Toshiya
7         Date   : 2010.09.02 -
8
9         [ ram file ]
10 */
11
12 #include "ramfile.h"
13
14 #define DATA_SIZE       0x10000
15 #define ADDR_MASK       (DATA_SIZE - 1)
16
17 void RAMFILE::initialize()
18 {
19         // init memory
20         data_buffer = (uint8_t *)malloc(DATA_SIZE);
21         memset(data_buffer, 0, DATA_SIZE);
22 }
23
24 void RAMFILE::release()
25 {
26         // release memory
27         free(data_buffer);
28 }
29
30 void RAMFILE::reset()
31 {
32         data_addr = 0;
33 }
34
35 void RAMFILE::write_io8(uint32_t addr, uint32_t data)
36 {
37         switch(addr & 0xff) {
38         case 0xea:
39                 data_buffer[(data_addr++) & ADDR_MASK] = data;
40                 break;
41         case 0xeb:
42                 data_addr = (addr & 0xff00) | data;
43                 break;
44         }
45 }
46
47 uint32_t RAMFILE::read_io8(uint32_t addr)
48 {
49         switch(addr & 0xff) {
50         case 0xea:
51                 return data_buffer[(data_addr++) & ADDR_MASK];
52         }
53         return 0xff;
54 }
55
56 #define STATE_VERSION   1
57
58 void RAMFILE::save_state(FILEIO* state_fio)
59 {
60         state_fio->FputUint32(STATE_VERSION);
61         state_fio->FputInt32(this_device_id);
62         
63         state_fio->Fwrite(data_buffer, DATA_SIZE, 1);
64         state_fio->FputUint32(data_addr);
65 }
66
67 bool RAMFILE::load_state(FILEIO* state_fio)
68 {
69         if(state_fio->FgetUint32() != STATE_VERSION) {
70                 return false;
71         }
72         if(state_fio->FgetInt32() != this_device_id) {
73                 return false;
74         }
75         state_fio->Fread(data_buffer, DATA_SIZE, 1);
76         data_addr = state_fio->FgetUint32();
77         return true;
78 }
79