diff --git a/Assets/dll/bsnes.wbx.zst b/Assets/dll/bsnes.wbx.zst index ae82b62f6de..cbe8a402746 100644 Binary files a/Assets/dll/bsnes.wbx.zst and b/Assets/dll/bsnes.wbx.zst differ diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/BSNES/BsnesCore.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/BSNES/BsnesCore.cs index 8f41b4ac70b..07dfe73716d 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/BSNES/BsnesCore.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/BSNES/BsnesCore.cs @@ -204,9 +204,11 @@ private string snes_path_request(int slot, string hint, bool required) string ret = ""; FirmwareID fwid = new(firmwareSystem, firmwareId); const string MISSING_FIRMWARE_MSG = "Game may function incorrectly without the requested firmware."; + // core falls back on built-in cx4 data rom if not provided, so no need to warn here + string msg = hint == "cx4" ? null : MISSING_FIRMWARE_MSG; byte[] data = required ? CoreComm.CoreFileProvider.GetFirmwareOrThrow(fwid, MISSING_FIRMWARE_MSG) - : CoreComm.CoreFileProvider.GetFirmware(fwid, MISSING_FIRMWARE_MSG); + : CoreComm.CoreFileProvider.GetFirmware(fwid, msg); if (data != null) { ret = hint; diff --git a/waterbox/bsnescore/bsnes/processor/hg51b/hg51b.cpp b/waterbox/bsnescore/bsnes/processor/hg51b/hg51b.cpp index f4bcbaf7f63..c0ab9d10e7c 100644 --- a/waterbox/bsnescore/bsnes/processor/hg51b/hg51b.cpp +++ b/waterbox/bsnescore/bsnes/processor/hg51b/hg51b.cpp @@ -19,7 +19,7 @@ auto HG51B::halt() -> void { auto HG51B::wait(uint24 address) -> uint { if(isROM(address)) return 1 + io.wait.rom; if(isRAM(address)) return 1 + io.wait.ram; - return 1; + return 0; } auto HG51B::main() -> void { diff --git a/waterbox/bsnescore/bsnes/sfc/ppu-fast/background.cpp b/waterbox/bsnescore/bsnes/sfc/ppu-fast/background.cpp index 45166288160..d19a71c6a34 100644 --- a/waterbox/bsnescore/bsnes/sfc/ppu-fast/background.cpp +++ b/waterbox/bsnescore/bsnes/sfc/ppu-fast/background.cpp @@ -49,8 +49,8 @@ auto PPU::Line::renderBackground(PPU::IO::Background& self, uint8 source) -> voi if(offsetPerTileMode) { uint validBit = 0x2000 << source; uint offsetX = x + (hscroll & 7); - if(offsetX >= 8) { //first column is exempt - uint hlookup = getTile(io.bg3, (offsetX - 8) + (io.bg3.hoffset & ~7), io.bg3.voffset + 0); + if(offsetX >= (1 << tileWidth)) { //first column is exempt + uint hlookup = getTile(io.bg3, offsetX - (1 << tileWidth) + ((io.bg3.hoffset & ~7) << hires), io.bg3.voffset + 0); if(io.bgMode == 4) { if(hlookup & validBit) { if(!(hlookup & 0x8000)) { @@ -60,7 +60,7 @@ auto PPU::Line::renderBackground(PPU::IO::Background& self, uint8 source) -> voi } } } else { - uint vlookup = getTile(io.bg3, (offsetX - 8) + (io.bg3.hoffset & ~7), io.bg3.voffset + 8); + uint vlookup = getTile(io.bg3, offsetX - (1 << tileWidth) + ((io.bg3.hoffset & ~7) << hires), io.bg3.voffset + 8); if(hlookup & validBit) { hoffset = offsetX + (hlookup & ~7); } diff --git a/waterbox/bsnescore/bsnes/sfc/ppu/background.cpp b/waterbox/bsnescore/bsnes/sfc/ppu/background.cpp index 7f04726c344..7188ebc0490 100644 --- a/waterbox/bsnescore/bsnes/sfc/ppu/background.cpp +++ b/waterbox/bsnescore/bsnes/sfc/ppu/background.cpp @@ -125,14 +125,14 @@ auto PPU::Background::fetchNameTable() -> void { auto PPU::Background::fetchOffset(uint y) -> void { if(ppu.vcounter() == 0) return; - uint characterIndex = ppu.hcounter() >> 5 << hires(); + uint characterIndex = ppu.hcounter() >> 5; uint x = characterIndex << 3; uint hoffset = x + (io.hoffset & ~7); uint voffset = y + (io.voffset); uint vtiles = 3 + io.tileSize; - uint htiles = !hires() ? vtiles : 4; + uint htiles = !hires() ? vtiles : 3; uint htile = hoffset >> htiles; uint vtile = voffset >> vtiles;