2 SHARP MZ-2500 Emulator 'EmuZ-2500'
4 Author : Takeda.Toshiya
7 [ MZ-1R37 (640KB EMM) ]
12 #define EMM_SIZE (640 * 1024)
14 void MZ1R37::initialize()
16 buffer = (uint8_t*)calloc(EMM_SIZE, sizeof(uint8_t));
20 void MZ1R37::release()
27 void MZ1R37::write_io8(uint32_t addr, uint32_t data)
31 address = ((addr & 0xff00) << 8) | (data << 8) | (address & 0x0000ff);
34 address = (address & 0xffff00) | (addr >> 8);
35 if(address < EMM_SIZE) {
36 buffer[address] = data;
42 uint32_t MZ1R37::read_io8(uint32_t addr)
46 address = (address & 0xffff00) | (addr >> 8);
47 if(address < EMM_SIZE) {
48 return buffer[address];
55 #define STATE_VERSION 1
57 #include "../../statesub.h"
59 void MZ1R37::decl_state()
61 enter_decl_state(STATE_VERSION);
63 DECL_STATE_ENTRY_INT32(tmp_buffer_size);
64 DECL_STATE_ENTRY_VARARRAY_VAR(buffer, tmp_buffer_size);
65 DECL_STATE_ENTRY_UINT32(address);
70 void MZ1R37::save_state(FILEIO* state_fio)
72 tmp_buffer_size = EMM_SIZE;
73 if(state_entry != NULL) {
74 state_entry->save_state(state_fio);
76 // state_fio->FputUint32(STATE_VERSION);
77 // state_fio->FputInt32(this_device_id);
79 // state_fio->Fwrite(buffer, EMM_SIZE, 1);
80 // state_fio->FputUint32(address);
83 bool MZ1R37::load_state(FILEIO* state_fio)
86 if(state_entry != NULL) {
87 mb = state_entry->load_state(state_fio);
92 // if(state_fio->FgetUint32() != STATE_VERSION) {
95 // if(state_fio->FgetInt32() != this_device_id) {
98 // state_fio->Fread(buffer, EMM_SIZE, 1);
99 // address = state_fio->FgetUint32();
103 bool MZ1R37::process_state(FILEIO* state_fio, bool loading)
105 if(!state_fio->StateCheckUint32(STATE_VERSION)) {
108 if(!state_fio->StateCheckInt32(this_device_id)) {
111 state_fio->StateBuffer(buffer, EMM_SIZE, 1);
112 state_fio->StateUint32(address);