OSDN Git Service

[VM][WIP] Pre-process to apply new state framework.Still not buildable.
[csp-qt/common_source_project-fm7.git] / source / src / vm / mz2500 / mz1r37.cpp
1 /*
2         SHARP MZ-2500 Emulator 'EmuZ-2500'
3
4         Author : Takeda.Toshiya
5         Date   : 2006.12.01 -
6
7         [ MZ-1R37 (640KB EMM) ]
8 */
9
10 #include "mz1r37.h"
11
12 #define EMM_SIZE        (640 * 1024)
13
14 void MZ1R37::initialize()
15 {
16         buffer = (uint8_t*)calloc(EMM_SIZE, sizeof(uint8_t));
17         address = 0;
18 }
19
20 void MZ1R37::release()
21 {
22         if(buffer != NULL) {
23                 free(buffer);
24         }
25 }
26
27 void MZ1R37::write_io8(uint32_t addr, uint32_t data)
28 {
29         switch(addr & 0xff) {
30         case 0xac:
31                 address = ((addr & 0xff00) << 8) | (data << 8) | (address & 0x0000ff);
32                 break;
33         case 0xad:
34                 address = (address & 0xffff00) | (addr >> 8);
35                 if(address < EMM_SIZE) {
36                         buffer[address] = data;
37                 }
38                 break;
39         }
40 }
41
42 uint32_t MZ1R37::read_io8(uint32_t addr)
43 {
44         switch(addr & 0xff) {
45         case 0xad:
46                 address = (address & 0xffff00) | (addr >> 8);
47                 if(address < EMM_SIZE) {
48                         return buffer[address];
49                 }
50                 break;
51         }
52         return 0xff;
53 }
54
55 #define STATE_VERSION   1
56
57 #include "../../statesub.h"
58
59 void MZ1R37::decl_state()
60 {
61         enter_decl_state(STATE_VERSION);
62
63         DECL_STATE_ENTRY_INT32(tmp_buffer_size);
64         DECL_STATE_ENTRY_VARARRAY_VAR(buffer, tmp_buffer_size);
65         DECL_STATE_ENTRY_UINT32(address);
66         
67         leave_decl_state();
68 }
69
70 void MZ1R37::save_state(FILEIO* state_fio)
71 {
72         tmp_buffer_size = EMM_SIZE;
73         if(state_entry != NULL) {
74                 state_entry->save_state(state_fio);
75         }
76 //      state_fio->FputUint32(STATE_VERSION);
77 //      state_fio->FputInt32(this_device_id);
78         
79 //      state_fio->Fwrite(buffer, EMM_SIZE, 1);
80 //      state_fio->FputUint32(address);
81 }
82
83 bool MZ1R37::load_state(FILEIO* state_fio)
84 {
85         bool mb = false;
86         if(state_entry != NULL) {
87                 mb = state_entry->load_state(state_fio);
88         }
89         if(!mb) {
90                 return false;
91         }
92 //      if(state_fio->FgetUint32() != STATE_VERSION) {
93 //              return false;
94 //      }
95 //      if(state_fio->FgetInt32() != this_device_id) {
96 //              return false;
97 //      }
98 //      state_fio->Fread(buffer, EMM_SIZE, 1);
99 //      address = state_fio->FgetUint32();
100         return true;
101 }
102
103 bool MZ1R37::process_state(FILEIO* state_fio, bool loading)
104 {
105         if(!state_fio->StateCheckUint32(STATE_VERSION)) {
106                 return false;
107         }
108         if(!state_fio->StateCheckInt32(this_device_id)) {
109                 return false;
110         }
111         state_fio->StateBuffer(buffer, EMM_SIZE, 1);
112         state_fio->StateUint32(address);
113         return true;
114 }