From 0468e7b9ed65068f42ad3538fe18170b98f0125f Mon Sep 17 00:00:00 2001 From: Souryo Date: Sun, 23 Apr 2017 19:26:56 -0400 Subject: [PATCH] MMC5: Updated based on loopy's test results --- Core/MMC5.h | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/Core/MMC5.h b/Core/MMC5.h index 504e3a61..29e1a68a 100644 --- a/Core/MMC5.h +++ b/Core/MMC5.h @@ -139,13 +139,25 @@ private: void SwitchChrBank(uint16_t reg, uint8_t value) { _chrBanks[reg - 0x5120] = value | (_chrUpperBits << 8); - _lastChrReg = reg; + + if(_largeSprites) { + _lastChrReg = reg; + } else { + //Using 8x8 sprites resets the last written to bank logic + //Unsure about this part (hasn't been tested specifically, but would make sense) + _lastChrReg = 0; + } UpdateChrBanks(); } void UpdateChrBanks() { - bool chrA = !_largeSprites || (_largeSprites && _spriteFetch) || (_lastVramOperationType != MemoryOperationType::PpuRenderingRead && (_lastChrReg <= 0x5127 || _extendedRamMode == 1)); + if(!_largeSprites) { + //Using 8x8 sprites resets the last written to bank logic + _lastChrReg = 0; + } + + bool chrA = !_largeSprites || (_largeSprites && _spriteFetch) || (_lastVramOperationType != MemoryOperationType::PpuRenderingRead && _lastChrReg <= 0x5127); if(_chrMode == 0) { SelectChrPage8x(0, _chrBanks[chrA ? 0x07 : 0x0B] << 3); } else if(_chrMode == 1) {