Limit EESIF1 scheduled interrupts to a maximum of 384 cycles, stops a lot of timeouts and subsequent reschedules.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2476 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
ramapcsx2 2010-01-22 16:02:09 +00:00
parent aac2a2e0d1
commit cf809cd1df
3 changed files with 9 additions and 6 deletions

View File

@ -173,7 +173,8 @@ __forceinline void PSX_INT( IopEventId n, s32 ecycle )
DevCon.Warning( "***** IOP > Twice-thrown int on IRQ %d", n ); DevCon.Warning( "***** IOP > Twice-thrown int on IRQ %d", n );
// 19 is CDVD read int, it's supposed to be high. // 19 is CDVD read int, it's supposed to be high.
//if (ecycle > 8192 && n != 19) DevCon.Warning( "IOP cycles high: %d, n %d", ecycle, n ); //if (ecycle > 8192 && n != 19)
// DevCon.Warning( "IOP cycles high: %d, n %d", ecycle, n );
psxRegs.interrupt |= 1 << n; psxRegs.interrupt |= 1 << n;

View File

@ -539,7 +539,9 @@ __forceinline void CPU_INT( u32 n, s32 ecycle)
DevCon.Warning( "***** EE > Twice-thrown int on IRQ %d", n ); DevCon.Warning( "***** EE > Twice-thrown int on IRQ %d", n );
} }
//if (ecycle > 8192) DevCon.Warning( "EE cycles high: %d, n %d", ecycle, n ); //if (ecycle > 8192 && n != DMAC_TO_IPU && n != DMAC_FROM_IPU) {
// DevCon.Warning( "EE cycles high: %d, n %d", ecycle, n );
//}
cpuRegs.interrupt|= 1 << n; cpuRegs.interrupt|= 1 << n;
cpuRegs.sCycle[n] = cpuRegs.cycle; cpuRegs.sCycle[n] = cpuRegs.cycle;

View File

@ -130,10 +130,10 @@ __forceinline void SIF1EEDma(int &cycles, int &psxCycles, bool &done)
eesifbusy[1] = false; eesifbusy[1] = false;
done = true; done = true;
// Voodoocycles : 4 cycles always, stops games from throwing double interrupts. // Voodoocycles : Okami wants around 100 cycles when booting up
// Edit: Ok, one game (Okami) wants bad timing aparently, so revert this until I know which values it likes. // Other games reach like 50k cycles here, but the EE will long have given up by then and just retry.
//CPU_INT(6, 4); // (Cause of double interrupts on the EE)
CPU_INT(6, cycles*BIAS); CPU_INT(6, min( (int)(cycles*BIAS), 384 ) );
sif1.end = 0; sif1.end = 0;
} }
else else