From c753f0d206d0da7a59d4bd771fffc52fbd0a6d94 Mon Sep 17 00:00:00 2001 From: refractionpcsx2 Date: Sat, 27 Jun 2015 22:47:21 +0100 Subject: [PATCH] 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. --- pcsx2/Vif0_Dma.cpp | 2 +- pcsx2/Vif1_Dma.cpp | 2 +- pcsx2/Vif1_MFIFO.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pcsx2/Vif0_Dma.cpp b/pcsx2/Vif0_Dma.cpp index 40bd058f44..f8794d1d31 100644 --- a/pcsx2/Vif0_Dma.cpp +++ b/pcsx2/Vif0_Dma.cpp @@ -167,7 +167,7 @@ __fi void vif0Interrupt() 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; diff --git a/pcsx2/Vif1_Dma.cpp b/pcsx2/Vif1_Dma.cpp index f2889665df..6133d2b92d 100644 --- a/pcsx2/Vif1_Dma.cpp +++ b/pcsx2/Vif1_Dma.cpp @@ -311,7 +311,7 @@ __fi void vif1Interrupt() } 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"); vif1Regs.stat.INT = true; diff --git a/pcsx2/Vif1_MFIFO.cpp b/pcsx2/Vif1_MFIFO.cpp index 6bda52d1a0..5f32aed7d7 100644 --- a/pcsx2/Vif1_MFIFO.cpp +++ b/pcsx2/Vif1_MFIFO.cpp @@ -318,7 +318,7 @@ void vifMFIFOInterrupt() // 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"); vif1Regs.stat.INT = true;