2 SHARP MZ-700 Emulator 'EmuZ-700'
3 SHARP MZ-800 Emulator 'EmuZ-800'
4 SHARP MZ-1500 Emulator 'EmuZ-1500'
6 Author : Takeda.Toshiya
14 #define DATA_SIZE 0x1000000
15 #define ADDR_MASK (DATA_SIZE - 1)
17 void EMM::initialize()
20 data_buffer = (uint8_t *)malloc(DATA_SIZE);
21 memset(data_buffer, 0xff, DATA_SIZE);
24 FILEIO* fio = new FILEIO();
25 if(fio->Fopen(create_local_path(_T("EMM.ROM")), FILEIO_READ_BINARY)) {
26 fio->Fread(data_buffer, DATA_SIZE, 1);
43 void EMM::write_io8(uint32_t addr, uint32_t data)
47 data_addr = (data_addr & 0xffff00) | data;
50 data_addr = (data_addr & 0xff00ff) | (data << 8);
53 data_addr = (data_addr & 0x00ffff) | (data << 16);
56 data_buffer[(data_addr++) & ADDR_MASK] = data;
61 uint32_t EMM::read_io8(uint32_t addr)
65 return data_addr & 0xff;
67 return (data_addr >> 8) & 0xff;
69 return (data_addr >> 16) & 0xff;
71 return data_buffer[(data_addr++) & ADDR_MASK];
76 #define STATE_VERSION 1
78 #include "../../statesub.h"
80 void EMM::decl_state()
82 enter_decl_state(STATE_VERSION);
84 DECL_STATE_ENTRY_1D_ARRAY(data_buffer, DATA_SIZE);
85 DECL_STATE_ENTRY_UINT32(data_addr);
90 void EMM::save_state(FILEIO* state_fio)
92 if(state_entry != NULL) {
93 state_entry->save_state(state_fio);
95 // state_fio->FputUint32(STATE_VERSION);
96 // state_fio->FputInt32(this_device_id);
98 // state_fio->Fwrite(data_buffer, DATA_SIZE, 1);
99 // state_fio->FputUint32(data_addr);
102 bool EMM::load_state(FILEIO* state_fio)
105 if(state_entry != NULL) {
106 mb = state_entry->load_state(state_fio);
111 // if(state_fio->FgetUint32() != STATE_VERSION) {
114 // if(state_fio->FgetInt32() != this_device_id) {
117 // state_fio->Fread(data_buffer, DATA_SIZE, 1);
118 // data_addr = state_fio->FgetUint32();
122 bool EMM::process_state(FILEIO* state_fio, bool loading)
124 if(!state_fio->StateCheckUint32(STATE_VERSION)) {
127 if(!state_fio->StateCheckInt32(this_device_id)) {
130 state_fio->StateBuffer(data_buffer, DATA_SIZE, 1);
131 state_fio->StateUint32(data_addr);