From 86a75775f3ca9c26ab450f1e6ab0051d2203b5ad Mon Sep 17 00:00:00 2001 From: ramapcsx2 Date: Thu, 10 Dec 2009 00:56:10 +0000 Subject: [PATCH] Stop VIF0, VIF1 and EE SIF1 from interrupting based on how much data was transfered. In theory this would be the correct thing to do, but with our current DMAC and event test system it just causes problems. Note: This commit *could* break/improve/fix games, please test :p git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2333 96395faa-99c1-11dd-bbfe-3dabce05a288 --- pcsx2/Sif.cpp | 4 +++- pcsx2/Vif0Dma.cpp | 6 +++--- pcsx2/Vif1Dma.cpp | 4 ++-- pcsx2/VifDma.h | 1 + 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/pcsx2/Sif.cpp b/pcsx2/Sif.cpp index 8ca41d3b36..c7f270c8ef 100644 --- a/pcsx2/Sif.cpp +++ b/pcsx2/Sif.cpp @@ -268,7 +268,9 @@ __forceinline void SIF1Dma() SIF_LOG("EE SIF1 End %x", sif1.end); eesifbusy[1] = false; done = true; - CPU_INT(6, cycles*BIAS); + // Voodoocycles : 4 cycles always, stops games from throwing double interrupts. + CPU_INT(6, 4); + //CPU_INT(6, cycles*BIAS); //sif1.chain = 0; sif1.end = 0; } diff --git a/pcsx2/Vif0Dma.cpp b/pcsx2/Vif0Dma.cpp index daa780b459..b41f738f32 100644 --- a/pcsx2/Vif0Dma.cpp +++ b/pcsx2/Vif0Dma.cpp @@ -563,7 +563,7 @@ void vif0Interrupt() else _VIF0chain(); - CPU_INT(0, g_vifCycles); + CPU_INT(0, /*g_vifCycles*/ VifCycleVoodoo); return; } } @@ -584,7 +584,7 @@ void vif0Interrupt() else _chainVIF0(); - CPU_INT(0, g_vifCycles); + CPU_INT(0, /*g_vifCycles*/ VifCycleVoodoo); return; } @@ -654,7 +654,7 @@ void dmaVIF0() } vif0.done = true; - CPU_INT(0, g_vifCycles); + CPU_INT(0, /*g_vifCycles*/ VifCycleVoodoo); return; } diff --git a/pcsx2/Vif1Dma.cpp b/pcsx2/Vif1Dma.cpp index d16b2c86fd..c8e5434161 100644 --- a/pcsx2/Vif1Dma.cpp +++ b/pcsx2/Vif1Dma.cpp @@ -907,7 +907,7 @@ __forceinline void vif1Interrupt() if (vif1.inprogress & 0x1) { _VIF1chain(); - CPU_INT(1, g_vifCycles); + CPU_INT(1, /*g_vifCycles*/ VifCycleVoodoo); return; } @@ -922,7 +922,7 @@ __forceinline void vif1Interrupt() if ((vif1.inprogress & 0x1) == 0) vif1SetupTransfer(); - CPU_INT(1, g_vifCycles); + CPU_INT(1, /*g_vifCycles*/ VifCycleVoodoo); return; } diff --git a/pcsx2/VifDma.h b/pcsx2/VifDma.h index 477d368a73..0882ac91e6 100644 --- a/pcsx2/VifDma.h +++ b/pcsx2/VifDma.h @@ -45,6 +45,7 @@ struct vifStruct { extern vifStruct vif0, vif1; extern u8 schedulepath3msk; +static const int VifCycleVoodoo = 4; void __fastcall UNPACK_S_32( u32 *dest, u32 *data, int size );