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 / 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 namespace MZ700 {
18         
19 void RAMFILE::initialize()
20 {
21         // init memory
22         data_buffer = (uint8_t *)malloc(DATA_SIZE);
23         memset(data_buffer, 0, DATA_SIZE);
24 }
25
26 void RAMFILE::release()
27 {
28         // release memory
29         free(data_buffer);
30 }
31
32 void RAMFILE::reset()
33 {
34         data_addr = 0;
35 }
36
37 void RAMFILE::write_io8(uint32_t addr, uint32_t data)
38 {
39         switch(addr & 0xff) {
40         case 0xea:
41                 data_buffer[(data_addr++) & ADDR_MASK] = data;
42                 break;
43         case 0xeb:
44                 data_addr = (addr & 0xff00) | data;
45                 break;
46         }
47 }
48
49 uint32_t RAMFILE::read_io8(uint32_t addr)
50 {
51         switch(addr & 0xff) {
52         case 0xea:
53                 return data_buffer[(data_addr++) & ADDR_MASK];
54         }
55         return 0xff;
56 }
57
58 #define STATE_VERSION   1
59
60 bool RAMFILE::process_state(FILEIO* state_fio, bool loading)
61 {
62         if(!state_fio->StateCheckUint32(STATE_VERSION)) {
63                 return false;
64         }
65         if(!state_fio->StateCheckInt32(this_device_id)) {
66                 return false;
67         }
68         state_fio->StateArray(data_buffer, DATA_SIZE, 1);
69         state_fio->StateValue(data_addr);
70         return true;
71 }
72
73 }