From c8f731c9f9718901fe745d089346124b07783cfd Mon Sep 17 00:00:00 2001 From: Godzil Date: Fri, 20 Sep 2019 16:29:21 +0100 Subject: [PATCH] Rework for a cleaner code for ROM Bank 0, 1 and 2 address calculation --- oswan/source/memory.cpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/oswan/source/memory.cpp b/oswan/source/memory.cpp index b6b12af..23e2033 100644 --- a/oswan/source/memory.cpp +++ b/oswan/source/memory.cpp @@ -161,8 +161,9 @@ BYTE cpu_readmem20(DWORD addr) { uint32 offset=addr&0xffff; uint32 bank=addr>>16; - uint16 romBank; + //uint16 romBank; uint8_t hwReg; + uint32_t temp; BYTE ret; switch (bank) @@ -183,8 +184,18 @@ BYTE cpu_readmem20(DWORD addr) return ws_staticRam[offset&sramAddressMask]; case 2: + // Bank 2 + hwReg = ws_ioRam[0xC2]; + temp = hwReg << 16; + temp += offset; + temp &= (romSize - 1); + return ws_rom[temp]; case 3: - return ws_rom[offset+((ws_ioRam[IO_ROM_BANK_BASE_SELECTOR+bank]&((romSize>>16)-1))<<16)]; + hwReg = ws_ioRam[0xC3]; + temp = hwReg << 16; + temp += offset; + temp &= (romSize - 1); + return ws_rom[temp]; case 0xF: hwReg = ws_ioRam[0xA0]; @@ -211,8 +222,11 @@ BYTE cpu_readmem20(DWORD addr) // fall through default: - romBank = (256-(((ws_ioRam[IO_ROM_BANK_BASE_SELECTOR]&0xf)<<4)|(bank&0xf))); - return ws_rom[(unsigned)(offset+romSize-(romBank<<16))]; + hwReg = ws_ioRam[0xC0]; + temp = hwReg << 20; + temp += addr & 0xFFFFF; + temp &= (romSize - 1); + return ws_rom[temp]; } return(0xff);