From b2b9a5bd8d7d64056af859ac0b7b51d9e0e5e3ad Mon Sep 17 00:00:00 2001 From: Souryo Date: Sat, 25 Jul 2015 17:05:56 -0400 Subject: [PATCH] Adjusted writes to 2004 based on Wiki info --- Core/PPU.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Core/PPU.cpp b/Core/PPU.cpp index db2b96a5..6140b23e 100644 --- a/Core/PPU.cpp +++ b/Core/PPU.cpp @@ -109,8 +109,14 @@ void PPU::WriteRAM(uint16_t addr, uint8_t value) _state.SpriteRamAddr = value; break; case PPURegisters::SpriteData: - _spriteRAM[_state.SpriteRamAddr] = value; - _state.SpriteRamAddr = (_state.SpriteRamAddr + 1) & 0xFF; + if(_scanline >= 240 || !IsRenderingEnabled()) { + _spriteRAM[_state.SpriteRamAddr] = value; + _state.SpriteRamAddr = (_state.SpriteRamAddr + 1) & 0xFF; + } else { + //"Writes to OAMDATA during rendering (on the pre-render line and the visible lines 0-239, provided either sprite or background rendering is enabled) do not modify values in OAM, + //but do perform a glitchy increment of OAMADDR, bumping only the high 6 bits" + _state.SpriteRamAddr += 4; + } break; case PPURegisters::ScrollOffsets: if(_state.WriteToggle) {