diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.regs.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.regs.cs index 53bc2abd6a..cf7b5efac5 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.regs.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.regs.cs @@ -340,9 +340,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES if (!reg_2000.vblank_nmi_gen & ((value & 0x80) != 0) && (Reg2002_vblank_active) && !Reg2002_vblank_clear_pending) { //if we just unleashed the vblank interrupt then activate it now - NMI_PendingInstructions = 2; + if (ppudead<=1) + NMI_PendingInstructions = 2; } - reg_2000.Value = value; + if (ppudead<=1) + reg_2000.Value = value; } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.run.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.run.cs index ca7cf4985a..2fd132bf32 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.run.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.run.cs @@ -581,11 +581,15 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES //register before around a full frame, but no games //should write to those regs during that time, it needs //to wait for vblank - ppur.status.sl = 241; - runppu(postNMIlines * kLineTime); - ppur.status.sl = 0; - Reg2002_vblank_active = true; + if (ppudead<2) + { + ppur.status.sl = 241; + runppu(postNMIlines * kLineTime); + ppur.status.sl = 0; + clear_2002(); + } runppu(241 * kLineTime); + Reg2002_vblank_active = true; runppu(preNMIlines * kLineTime); --ppudead; }