Fixed a bug pseudonym spotted. stalls should be handled properly once again on games that have IRQ's on VIF Mark commands.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@5372 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
refraction 2012-08-14 20:52:24 +00:00
parent c83b72339b
commit 0e3a7f74be
1 changed files with 13 additions and 12 deletions

View File

@ -83,27 +83,28 @@ _vifT static __fi bool vifTransfer(u32 *data, int size, bool TTE) {
vifX.irqoffset = transferred % 4; // cannot lose the offset
if (!TTE) {// *WARNING* - Tags CAN have interrupts! so lets just ignore the dma modifying stuffs (GT4)
if (vifX.irq && vifX.cmd == 0) {
//DevCon.WriteLn("Vif IRQ!");
if(((vifXRegs.code >> 24) & 0x7f) != 0x7) {
vifXRegs.stat.VIS = true; // Note: commenting this out fixes WALL-E?
}
//Always needs to be set to return to the correct offset if there is data left.
vifX.vifstalled = true;
}
if (!TTE) // *WARNING* - Tags CAN have interrupts! so lets just ignore the dma modifying stuffs (GT4)
{
transferred = transferred >> 2;
vifXch.madr +=(transferred << 4);
vifXch.qwc -= transferred;
if (vifXch.chcr.STR) hwDmacSrcTadrInc(vifXch);
if(!vifXch.qwc) {
vifX.inprogress &= ~0x1;
vifX.vifstalled = false;
}
}
else {
if (!vifX.irqoffset) vifX.vifstalled = false;
}
if (vifX.irq && vifX.cmd == 0) {
//DevCon.WriteLn("Vif IRQ!");
if(((vifXRegs.code >> 24) & 0x7f) != 0x7) {
vifXRegs.stat.VIS = true; // Note: commenting this out fixes WALL-E?
vifX.vifstalled = true;
}
}
return !vifX.vifstalled;
}