diff --git a/verilog/sd2snes/address.v b/verilog/sd2snes/address.v index 8862e64..759a4c3 100644 --- a/verilog/sd2snes/address.v +++ b/verilog/sd2snes/address.v @@ -33,6 +33,7 @@ module address( output msu_enable, output srtc_enable, output use_bsx, + output bsx_tristate, input [14:0] bsx_regs, output dspx_enable, output dspx_dp_enable, @@ -115,6 +116,14 @@ wire BSX_IS_CARTROM = ((bsx_regs[7] & (SNES_ADDR[23:22] == 2'b00)) |(bsx_regs[8] & (SNES_ADDR[23:22] == 2'b10))) & SNES_ADDR[15]; +wire BSX_HOLE_LOHI = (bsx_regs[9] & ~SNES_ADDR[23]) | (bsx_regs[10] & SNES_ADDR[23]); + +wire BSX_IS_HOLE = BSX_HOLE_LOHI + & (bsx_regs[2] ? (SNES_ADDR[21:20] == {bsx_regs[11], 1'b0}) + : (SNES_ADDR[22:21] == {bsx_regs[11], 1'b0})); + +assign bsx_tristate = (MAPPER == 3'b011) & ~BSX_IS_CARTROM & ~BSX_IS_PSRAM & BSX_IS_HOLE; + assign IS_WRITABLE = IS_SAVERAM |((MAPPER == 3'b011) ? BSX_IS_PSRAM diff --git a/verilog/sd2snes/main.v b/verilog/sd2snes/main.v index 737e12e..053cb0c 100644 --- a/verilog/sd2snes/main.v +++ b/verilog/sd2snes/main.v @@ -440,6 +440,7 @@ address snes_addr( .bs_page_offset(bs_page_offset), .bs_page(bs_page), .bs_page_enable(bs_page_enable), + .bsx_tristate(bsx_tristate), //SRTC .srtc_enable(srtc_enable), //uPD77C25 @@ -739,6 +740,7 @@ assign SNES_DATABUS_OE = (dspx_enable | dspx_dp_enable) ? 1'b0 : ((IS_ROM & SNES_CS) |(!IS_ROM & !IS_SAVERAM & !IS_WRITABLE & !IS_FLASHWR) |(SNES_READr[0] & SNES_WRITEr[0]) + | bsx_tristate ); assign SNES_DATABUS_DIR = (!SNES_READr[0] | (!SNES_PARD & (r213f_enable | snescmd_rd_enable)))