diff --git a/pcsx2/Counters.cpp b/pcsx2/Counters.cpp index 2b3ad8b1e4..070c4e2c40 100644 --- a/pcsx2/Counters.cpp +++ b/pcsx2/Counters.cpp @@ -95,6 +95,7 @@ static __fi void _rcntSet( int cntidx ) // Stopped or special hsync gate? if (!counter.mode.IsCounting || (counter.mode.ClockSource == 0x3) ) return; + if (!counter.mode.TargetInterrupt && !counter.mode.OverflowInterrupt) return; // check for special cases where the overflow or target has just passed // (we probably missed it because we're doing/checking other things) if( counter.count > 0x10000 || counter.count > counter.target ) @@ -113,6 +114,7 @@ static __fi void _rcntSet( int cntidx ) if (c < nextCounter) { nextCounter = c; + cpuSetNextEvent( nextsCounter, nextCounter ); // Need to update on counter resets/target changes } diff --git a/pcsx2/IopCounters.cpp b/pcsx2/IopCounters.cpp index 9216e8517e..580df9e706 100644 --- a/pcsx2/IopCounters.cpp +++ b/pcsx2/IopCounters.cpp @@ -100,6 +100,8 @@ static void _rcntSet(int cntidx) if (counter.mode & IOPCNT_STOPPED || counter.rate == PSXHBLANK) return; + if (!(counter.mode & (IOPCNT_INT_TARGET | IOPCNT_INT_OVERFLOW))) + return; // check for special cases where the overflow or target has just passed // (we probably missed it because we're doing/checking other things) if (counter.count > overflowCap || counter.count > counter.target)