VIF-MFIFO: Fix for stalls on wait instructions, fixes Stuart Little 3

- VIF Waits for Path3 to flush, but it was firing before it had finished.
-Condition is much cleaner and less hacky now.
This commit is contained in:
refractionpcsx2 2015-06-27 22:47:21 +01:00
parent 15944feea1
commit c753f0d206
3 changed files with 3 additions and 3 deletions

View File

@ -167,7 +167,7 @@ __fi void vif0Interrupt()
if (!(vif0ch.chcr.STR)) Console.WriteLn("vif0 running when CHCR == %x", vif0ch.chcr._u32); if (!(vif0ch.chcr.STR)) Console.WriteLn("vif0 running when CHCR == %x", vif0ch.chcr._u32);
if (vif0.irq && vif0.tag.size == 0 && vif0.cmd == 0) if (vif0.irq && vif0.vifstalled.enabled && vif0.vifstalled.value == VIF_IRQ_STALL)
{ {
vif0Regs.stat.INT = true; vif0Regs.stat.INT = true;

View File

@ -311,7 +311,7 @@ __fi void vif1Interrupt()
} }
if (!vif1ch.chcr.STR) Console.WriteLn("Vif1 running when CHCR == %x", vif1ch.chcr._u32); if (!vif1ch.chcr.STR) Console.WriteLn("Vif1 running when CHCR == %x", vif1ch.chcr._u32);
if (vif1.irq && vif1.tag.size == 0 &&vif1.cmd == 0) if (vif1.irq && vif1.vifstalled.enabled && vif1.vifstalled.value == VIF_IRQ_STALL)
{ {
VIF_LOG("VIF IRQ Firing"); VIF_LOG("VIF IRQ Firing");
vif1Regs.stat.INT = true; vif1Regs.stat.INT = true;

View File

@ -318,7 +318,7 @@ void vifMFIFOInterrupt()
// Simulated GS transfer time done, clear the flags // Simulated GS transfer time done, clear the flags
if (vif1.irq && vif1.tag.size == 0) { if (vif1.irq && vif1.vifstalled.enabled && vif1.vifstalled.value == VIF_IRQ_STALL) {
SPR_LOG("VIF MFIFO Code Interrupt detected"); SPR_LOG("VIF MFIFO Code Interrupt detected");
vif1Regs.stat.INT = true; vif1Regs.stat.INT = true;