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)
19 void EMM::initialize()
22 data_buffer = (uint8_t *)malloc(DATA_SIZE);
23 memset(data_buffer, 0xff, DATA_SIZE);
26 FILEIO* fio = new FILEIO();
27 if(fio->Fopen(create_local_path(_T("EMM.ROM")), FILEIO_READ_BINARY)) {
28 fio->Fread(data_buffer, DATA_SIZE, 1);
45 void EMM::write_io8(uint32_t addr, uint32_t data)
49 data_addr = (data_addr & 0xffff00) | data;
52 data_addr = (data_addr & 0xff00ff) | (data << 8);
55 data_addr = (data_addr & 0x00ffff) | (data << 16);
58 data_buffer[(data_addr++) & ADDR_MASK] = data;
63 uint32_t EMM::read_io8(uint32_t addr)
67 return data_addr & 0xff;
69 return (data_addr >> 8) & 0xff;
71 return (data_addr >> 16) & 0xff;
73 return data_buffer[(data_addr++) & ADDR_MASK];
78 #define STATE_VERSION 1
80 bool EMM::process_state(FILEIO* state_fio, bool loading)
82 if(!state_fio->StateCheckUint32(STATE_VERSION)) {
85 if(!state_fio->StateCheckInt32(this_device_id)) {
88 state_fio->StateBuffer(data_buffer, DATA_SIZE, 1);
89 state_fio->StateUint32(data_addr);