--- np2/i386c/Attic/mem9821.c 2004/02/29 03:10:03 1.1 +++ np2/i386c/Attic/mem9821.c 2004/04/05 09:45:06 1.4 @@ -1,4 +1,7 @@ #include "compiler.h" + +#if defined(SUPPORT_PC9821) + #include "cpucore.h" #include "mem9821.h" #include "pccore.h" @@ -15,7 +18,7 @@ void MEMCALL mem9821_w(UINT32 addr, REG8 bit = (addr & 0x40000)?2:1; vramupdate[LOW15(addr >> 3)] |= bit; gdcs.grphdisp |= bit; - TRACEOUT(("mem9821_w %x %x", addr, value)); +// TRACEOUT(("mem9821_w %x %x", addr, value)); } REG8 MEMCALL mem9821_r(UINT32 addr) { @@ -33,7 +36,7 @@ void MEMCALL mem9821_ww(UINT32 addr, REG vramupdate[LOW15(addr >> 3)] |= bit; vramupdate[LOW15((addr + 1) >> 3)] |= bit; gdcs.grphdisp |= bit; - TRACEOUT(("mem9821_ww %x %x", addr, value)); +// TRACEOUT(("mem9821_ww %x %x", addr, value)); } REG16 MEMCALL mem9821_rw(UINT32 addr) { @@ -50,7 +53,7 @@ void MEMCALL mem9821_b0w(UINT32 address, UINT32 addr; address -= 0xa8000; - addr = (vramop.bank2[((address >> 14) & 2)] & 15) << 15; + addr = (vramop.mio1[((address >> 14) & 2)] & 15) << 15; addr += LOW15(address); vramex[addr] = value; vramupdate[LOW15(addr >> 3)] |= (addr & 0x40000)?2:1; @@ -62,7 +65,7 @@ REG8 MEMCALL mem9821_b0r(UINT32 address) UINT32 addr; address -= 0xa8000; - addr = (vramop.bank2[((address >> 14) & 2)] & 15) << 15; + addr = (vramop.mio1[((address >> 14) & 2)] & 15) << 15; addr += LOW15(address); return(vramex[addr]); } @@ -83,22 +86,38 @@ REG16 MEMCALL mem9821_b0rw(UINT32 addres } -void MEMCALL mem9821_b2w(UINT32 address, REG8 value) { +void MEMCALL mem9821_b2w(UINT32 addr, REG8 value) { + + UINT pos; - address -= 0xe0004; - if (address < 4) { - vramop.bank2[address] = value; - TRACEOUT(("bank2[%d] = %.2x", address, value)); + addr -= 0xe0000; + pos = addr - 0x0004; + if (pos < 4) { + vramop.mio1[pos] = value; + return; + } + pos = addr - 0x0100; + if (pos < 0x40) { + vramop.mio2[pos] = value; + TRACEOUT(("mem9821_b2w(%.5x, %.2x)", addr, value)); + return; } } -REG8 MEMCALL mem9821_b2r(UINT32 address) { +REG8 MEMCALL mem9821_b2r(UINT32 addr) { + + UINT pos; - address -= 0xe0004; - if (address < 4) { - return(vramop.bank2[address]); + addr -= 0xe0000; + pos = addr - 0x0004; + if (pos < 4) { + return(vramop.mio1[pos]); + } + pos = addr - 0x0100; + if (pos < 0x40) { + return(vramop.mio2[pos]); } - return(0xff); + return(0x00); } void MEMCALL mem9821_b2ww(UINT32 address, REG16 value) { @@ -115,4 +134,5 @@ REG16 MEMCALL mem9821_b2rw(UINT32 addres ret |= mem9821_b2r(address + 1) << 8; return(ret); } +#endif