diff --git a/cpuexec.cpp b/cpuexec.cpp index ee40a554..768a2a4d 100644 --- a/cpuexec.cpp +++ b/cpuexec.cpp @@ -413,7 +413,7 @@ void S9xDoHEventProcessing (void) } /* Did we skip over a late NMI Trigger Pos? If so, reschedule it immediately. */ - if (CPU.NMIPending && (CPU.Cycles >= Timings.NMITriggerPos)) + if (CPU.NMIPending && (CPU.Cycles >= Timings.NMITriggerPos) && (Timings.NMITriggerPos > Timings.H_Max / 2)) Timings.NMITriggerPos = 0; S9xAPUEndScanline(); @@ -421,16 +421,6 @@ void S9xDoHEventProcessing (void) CPU.PrevCycles -= Timings.H_Max; S9xAPUSetReferenceTime(CPU.Cycles); - if ((Timings.NMITriggerPos != 0xffff) && (Timings.NMITriggerPos >= Timings.H_Max)) - { - Timings.NMITriggerPos -= Timings.H_Max; -#ifdef DEBUGGER - if (Settings.TraceHCEvent) - S9xTraceFormattedMessage ("NMI Trigger pos changed to %d\n", Timings.NMITriggerPos); -#endif - } - - CPU.V_Counter++; if (CPU.V_Counter >= Timings.V_Max) // V ranges from 0 to Timings.V_Max - 1 { diff --git a/ppu.cpp b/ppu.cpp index a2a0c0b3..863630f2 100644 --- a/ppu.cpp +++ b/ppu.cpp @@ -1520,6 +1520,8 @@ void S9xSetCPU (uint8 Byte, uint16 Address) // then, when to call S9xOpcode_NMI()? CPU.NMIPending = TRUE; Timings.NMITriggerPos = CPU.Cycles + 6 + 6; + if (Timings.NMITriggerPOS >= Timings.H_Max) + Timings.NMITriggerPOS -= Timings.H_Max; #ifdef DEBUGGER if (Settings.TraceHCEvent)