--- xmil/io/memio.c 2004/08/20 23:01:16 1.4 +++ xmil/io/memio.c 2005/02/04 06:42:11 1.5 @@ -1,7 +1,9 @@ #include "compiler.h" +#include "dosio.h" #include "z80core.h" #include "pccore.h" #include "iocore.h" +#include "defipl.res" UINT8 biosmem[0x8000]; @@ -13,9 +15,9 @@ void memio_update(void) { #if defined(SUPPORT_BANKMEM) - if (memio.bank & 0x10) { + if (iocore.s.bankmem & 0x10) { #endif - if (!memio.ram) { + if (!(iocore.s.ppib & 0x10)) { z80core.e.memread = biosmem; } else { @@ -25,8 +27,8 @@ void memio_update(void) { #if defined(SUPPORT_BANKMEM) } else { - z80core.e.memread = bankmem[memio.bank & 15]; - z80core.e.memwrite = bankmem[memio.bank & 15]; + z80core.e.memread = bankmem[iocore.s.bankmem & 15]; + z80core.e.memwrite = bankmem[iocore.s.bankmem & 15]; } #endif } @@ -34,7 +36,7 @@ void memio_update(void) { #if defined(SUPPORT_BANKMEM) void IOOUTCALL memio_bank_o(UINT port, REG8 dat) { - memio.bank = dat; + iocore.s.bankmem = dat; memio_update(); (void)port; } @@ -42,15 +44,15 @@ void IOOUTCALL memio_bank_o(UINT port, R REG8 IOINPCALL memio_bank_i(UINT port) { (void)port; - return(memio.bank); + return(iocore.s.bankmem); } #endif void IOOUTCALL memio_rom(UINT port, REG8 dat) { - memio.ram = 0x00; + iocore.s.ppib &= ~0x10; #if defined(SUPPORT_BANKMEM) - if (memio.bank & 0x10) { + if (iocore.s.bankmem & 0x10) { #endif z80core.e.memread = biosmem; #if defined(SUPPORT_BANKMEM) @@ -62,9 +64,9 @@ void IOOUTCALL memio_rom(UINT port, REG8 void IOOUTCALL memio_ram(UINT port, REG8 dat) { - memio.ram = 0x10; + iocore.s.ppib |= 0x10; #if defined(SUPPORT_BANKMEM) - if (memio.bank & 0x10) { + if (iocore.s.bankmem & 0x10) { #endif z80core.e.memread = mainmem; #if defined(SUPPORT_BANKMEM) @@ -77,11 +79,35 @@ void IOOUTCALL memio_ram(UINT port, REG8 // ---- +static const OEMCHAR iplromx1[] = OEMTEXT("IPLROM.X1"); +static const OEMCHAR iplromx1t[] = OEMTEXT("IPLROM.X1T"); + void memio_reset(void) { - memio.ram = 0x00; +const OEMCHAR *iplfile; + UINT iplsize; + FILEH fh; + + ZeroMemory(biosmem, 0x8000); + CopyMemory(biosmem, defaultiplrom, sizeof(defaultiplrom)); + if (pccore.ROM_TYPE >= 1) { + if (pccore.ROM_TYPE >= 2) { + iplfile = iplromx1t; + iplsize = 0x8000; + } + else { + iplfile = iplromx1; + iplsize = 0x8000; + } + fh = file_open_rb_c(iplfile); + if (fh != FILEH_INVALID) { + file_read(fh, biosmem, iplsize); + file_close(fh); + } + } + #if defined(SUPPORT_BANKMEM) - memio.bank = 0x78; + iocore.s.bankmem = 0x78; #endif memio_update(); }