diff --git a/pcsx2/Gif.cpp b/pcsx2/Gif.cpp index 15765e0fcb..55a4e0070c 100644 --- a/pcsx2/Gif.cpp +++ b/pcsx2/Gif.cpp @@ -249,14 +249,9 @@ void GIFdma() } GIFchain(); //Transfers the data set by the switch - - if (((gif->qwc == 0) && (gif->chcr & 0xc) == 0)) - gspath3done = 1; - else if(gif->qwc > 0 || gscycles) - { - GIFdmaEnd(); - return; - } + + GIFdmaEnd(); + return; } if ((gif->chcr & 0xc) == 0x4 && gspath3done == 0) { diff --git a/pcsx2/VifDma.cpp b/pcsx2/VifDma.cpp index fcbe73b6bf..0d176d2562 100644 --- a/pcsx2/VifDma.cpp +++ b/pcsx2/VifDma.cpp @@ -2691,6 +2691,12 @@ void vif1Write32(u32 mem, u32 value) psHu64(VIF1_FIFO) = 0; psHu64(0x10005008) = 0; // VIF1_FIFO + 8 vif1.done = true; + if(vif1Regs->mskpath3) + { + vif1Regs->mskpath3 = 0; + psHu32(GIF_STAT) &= ~0x2; + if(gif->chcr & 0x100) CPU_INT(2, 4); + } vif1Regs->err = 0; vif1.inprogress = 0; vif1Regs->stat &= ~(0x1F800000 | VIF1_STAT_INT | VIF1_STAT_VSS | VIF1_STAT_VIS | VIF1_STAT_VFS | VIF1_STAT_VPS); // FQC=0