mirror of https://github.com/PCSX2/pcsx2.git
Vif: Fix up Instant DMA behaviour
This commit is contained in:
parent
3352d71515
commit
f26031cada
|
@ -316,6 +316,7 @@ __fi void vif1Interrupt()
|
|||
CPU_INT(DMAC_VIF1, 128);
|
||||
if (gifRegs.stat.APATH == 3)
|
||||
vif1Regs.stat.VGW = 1; //We're waiting for path 3. Gunslinger II
|
||||
CPU_SET_DMASTALL(DMAC_VIF1, true);
|
||||
return;
|
||||
}
|
||||
vif1Regs.stat.VGW = 0; //Path 3 isn't busy so we don't need to wait for it.
|
||||
|
|
|
@ -83,7 +83,10 @@ static __fi void vuExecMicro(int idx, u32 addr, bool requires_wait)
|
|||
|
||||
vifFlush(idx);
|
||||
if (GetVifX.waitforvu)
|
||||
{
|
||||
CPU_SET_DMASTALL(idx ? DMAC_VIF1 : DMAC_VIF0, true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (vifRegs.itops > (idx ? 0x3ffu : 0xffu))
|
||||
{
|
||||
|
@ -220,7 +223,10 @@ vifOp(vifCode_Flush)
|
|||
}
|
||||
|
||||
if (vif1.waitforvu || vif1Regs.stat.VGW)
|
||||
{
|
||||
CPU_SET_DMASTALL(DMAC_VIF1, true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
vif1.cmd = 0;
|
||||
vif1.pass = 0;
|
||||
|
@ -250,7 +256,10 @@ vifOp(vifCode_FlushA)
|
|||
}
|
||||
|
||||
if (vif1.waitforvu || vif1Regs.stat.VGW)
|
||||
{
|
||||
CPU_SET_DMASTALL(DMAC_VIF1, true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
vif1.cmd = 0;
|
||||
vif1.pass = 0;
|
||||
|
@ -268,7 +277,10 @@ vifOp(vifCode_FlushE)
|
|||
vifFlush(idx);
|
||||
|
||||
if (vifX.waitforvu)
|
||||
{
|
||||
CPU_SET_DMASTALL(idx ? DMAC_VIF1 : DMAC_VIF0, true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
vifX.cmd = 0;
|
||||
vifX.pass = 0;
|
||||
|
@ -373,7 +385,10 @@ vifOp(vifCode_MPG)
|
|||
vifFlush(idx);
|
||||
|
||||
if (vifX.waitforvu)
|
||||
{
|
||||
CPU_SET_DMASTALL(idx ? DMAC_VIF1 : DMAC_VIF0, true);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
vifX.pass = 1;
|
||||
|
@ -418,7 +433,10 @@ vifOp(vifCode_MSCAL)
|
|||
vifFlush(idx);
|
||||
|
||||
if (vifX.waitforvu)
|
||||
{
|
||||
CPU_SET_DMASTALL(idx ? DMAC_VIF1 : DMAC_VIF0, true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
vuExecMicro(idx, (u16)(vifXRegs.code), false);
|
||||
vifX.cmd = 0;
|
||||
|
@ -454,7 +472,10 @@ vifOp(vifCode_MSCALF)
|
|||
}
|
||||
|
||||
if (vifX.waitforvu || vif1Regs.stat.VGW)
|
||||
{
|
||||
CPU_SET_DMASTALL(idx ? DMAC_VIF1 : DMAC_VIF0, true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
vuExecMicro(idx, (u16)(vifXRegs.code), true);
|
||||
vifX.cmd = 0;
|
||||
|
@ -473,7 +494,10 @@ vifOp(vifCode_MSCNT)
|
|||
vifFlush(idx);
|
||||
|
||||
if (vifX.waitforvu)
|
||||
{
|
||||
CPU_SET_DMASTALL(idx ? DMAC_VIF1 : DMAC_VIF0, true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
vuExecMicro(idx, -1, false);
|
||||
vifX.cmd = 0;
|
||||
|
|
Loading…
Reference in New Issue