2 SHARP MZ-2200 Emulator 'EmuZ-2200'
4 Author : Takeda.Toshiya
7 [ MZ-1M01 (16bit Board) ]
11 #include "../z80pio.h"
15 #define SET_BANK(s, e, w, r) { \
16 int sb = (s) >> 13, eb = (e) >> 13; \
17 for(int i = sb; i <= eb; i++) { \
18 if(((uintptr_t)w) == ((uintptr_t)wdmy)) { \
21 wbank[i] = (w) + 0x2000 * (i - sb); \
23 if(((uintptr_t)r) == ((uintptr_t)rdmy)) { \
26 rbank[i] = (r) + 0x2000 * (i - sb); \
31 void MZ1M01::initialize()
33 memset(ram, 0, sizeof(ram));
34 memset(ipl, 0xff, sizeof(ipl));
35 memset(kanji, 0xff, sizeof(kanji));
36 memset(rdmy, 0xff, sizeof(rdmy));
38 FILEIO* fio = new FILEIO();
39 if(fio->Fopen(create_local_path(_T("MZ-1M01.ROM")), FILEIO_READ_BINARY)) {
40 fio->Fread(ipl, sizeof(ipl), 1);
43 d_cpu->write_signal(SIG_CPU_BUSREQ, 1, 1);
45 if(fio->Fopen(create_local_path(_T("MZ-1R08.ROM")), FILEIO_READ_BINARY)) {
46 fio->Fread(kanji, sizeof(kanji), 1);
51 SET_BANK(0x00000, 0x1ffff, ram, ram);
52 SET_BANK(0x20000, 0x3ffff, wdmy, rdmy);
53 SET_BANK(0x40000, 0x5ffff, wdmy, kanji);
54 SET_BANK(0x60000, 0xfdfff, wdmy, rdmy);
55 SET_BANK(0xfe000, 0xfffff, wdmy, ipl);
60 port[0] = port[1] = 0xff;
63 void MZ1M01::write_data8(uint32_t addr, uint32_t data)
66 wbank[addr >> 13][addr & 0x1fff] = data;
69 uint32_t MZ1M01::read_data8(uint32_t addr)
72 return rbank[addr >> 13][addr & 0x1fff];
75 void MZ1M01::write_io8(uint32_t addr, uint32_t data)
80 d_pic->write_io8(addr, data);
83 d_pio->write_signal(SIG_Z80PIO_PORT_A, data, 0xff);
84 d_pio->write_signal(SIG_Z80PIO_STROBE_B, 1, 1);
87 d_pio->write_signal(SIG_Z80PIO_PORT_B, data, 0x7f);
88 port[1] = (port[1] & 0x80) | (data & 0x7f);
93 uint32_t MZ1M01::read_io8(uint32_t addr)
98 return d_pic->read_io8(addr);
100 d_pio->write_signal(SIG_Z80PIO_STROBE_A, 1, 1);
102 return port[addr & 1];
107 void MZ1M01::write_signal(int id, uint32_t data, uint32_t mask)
109 if(id == SIG_MZ1M01_PORT_A) {
110 port[0] = (port[0] & ~mask) | (data & mask);
111 } else if(id == SIG_MZ1M01_PORT_B) {
112 port[1] = (port[1] & ~mask) | (data & mask);
116 #define STATE_VERSION 1
118 bool MZ1M01::process_state(FILEIO* state_fio, bool loading)
120 if(!state_fio->StateCheckUint32(STATE_VERSION)) {
123 if(!state_fio->StateCheckInt32(this_device_id)) {
126 state_fio->StateArray(ram, sizeof(ram), 1);
127 state_fio->StateArray(port, sizeof(port), 1);