From 73c3236904fc65daf79cfd1db16eb4e628a46195 Mon Sep 17 00:00:00 2001 From: ikari Date: Tue, 8 Sep 2009 00:50:09 +0200 Subject: [PATCH] Map 25 support --- src/memory.c | 9 +++++++-- verilog/sd2snes/address.v | 10 ++++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/memory.c b/src/memory.c index e33d261..e43d950 100644 --- a/src/memory.c +++ b/src/memory.c @@ -86,12 +86,17 @@ uint32_t load_rom(char* filename) { uint32_t rammask; uint32_t rommask; + + if(filesize > (romprops.romsize_bytes + romprops.offset)) { + romprops.romsize_bytes <<= 1; + } + if(romprops.header.ramsize == 0) { rammask = 0; } else { - rammask = ((uint32_t)1024 << (romprops.header.ramsize)) - 1; + rammask = romprops.ramsize_bytes - 1; } - rommask = ((uint32_t)1024 << (romprops.header.romsize)) - 1; + rommask = romprops.romsize_bytes - 1; uart_putc(' '); uart_puthex(romprops.header.ramsize); diff --git a/verilog/sd2snes/address.v b/verilog/sd2snes/address.v index bf07f0b..1c25991 100644 --- a/verilog/sd2snes/address.v +++ b/verilog/sd2snes/address.v @@ -60,7 +60,7 @@ end /* HiROM: SRAM @ Bank 0x20-0x3f, 0xa0-0xbf Offset 6000-7fff */ -assign IS_SAVERAM = ((MAPPER == 3'b000) ? (!SNES_ADDR[22] +assign IS_SAVERAM = ((MAPPER == 3'b000 || MAPPER == 3'b010) ? (!SNES_ADDR[22] & SNES_ADDR[21] & &SNES_ADDR[14:13] & !SNES_ADDR[15] @@ -78,6 +78,9 @@ assign IS_ROM = ( (MAPPER == 3'b000) ? ( (!SNES_ADDR[22] |(SNES_ADDR[22])) : (MAPPER == 3'b001) ? ( (SNES_ADDR[15] & !SNES_ADDR[22]) |(SNES_ADDR[22]) ) + : (MAPPER == 3'b010) ? ( (!SNES_ADDR[22] + & SNES_ADDR[15]) + |(SNES_ADDR[22])) : 1'b0); assign SRAM_ADDR_FULL = (MODE) ? AVR_ADDR @@ -87,7 +90,10 @@ assign SRAM_ADDR_FULL = (MODE) ? AVR_ADDR :(MAPPER == 3'b001) ? (IS_SAVERAM ? SNES_ADDR[14:0] & SAVERAM_MASK : {1'b0, SNES_ADDR[22:16], SNES_ADDR[14:0]} & ROM_MASK) - : 21'b0); + :(MAPPER == 3'b010) ? + (IS_SAVERAM ? (SNES_ADDR[14:0] - 15'h6000) & SAVERAM_MASK + : ({!SNES_ADDR[23], SNES_ADDR[21:0]} & ROM_MASK)) + : 23'b0); assign SRAM_BANK = SRAM_ADDR_FULL[22:21]; assign SRAM_ADDR = SRAM_ADDR_FULL[20:1];