mirror of https://github.com/PCSX2/pcsx2.git
Fixup Spiderman and Killzone from r4278
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@4281 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
47511691ed
commit
ba765e1d22
|
@ -128,10 +128,15 @@ void __fastcall WriteFIFO_GIF(const mem128_t *value)
|
|||
GetMTGS().PrepDataPacket(GIF_PATH_3, 1);
|
||||
GIFPath_CopyTag( GIF_PATH_3, value, 1 );
|
||||
GetMTGS().SendDataPacket();
|
||||
if(GSTransferStatus.PTH3 == STOPPED_MODE && gifRegs.stat.APATH == GIF_APATH3 )
|
||||
|
||||
if(GSTransferStatus.PTH3 >= PENDINGSTOP_MODE )
|
||||
{
|
||||
if(gifRegs.stat.DIR == 0)gifRegs.stat.OPH = false;
|
||||
gifRegs.stat.APATH = GIF_APATH_IDLE;
|
||||
if(gifRegs.stat.P1Q) gsPath1Interrupt();
|
||||
GSTransferStatus.PTH3 = STOPPED_MODE;
|
||||
if(gifRegs.stat.APATH == GIF_APATH3)
|
||||
{
|
||||
if(gifRegs.stat.DIR == 0)gifRegs.stat.OPH = false;
|
||||
gifRegs.stat.APATH = GIF_APATH_IDLE;
|
||||
if(gifRegs.stat.P1Q) gsPath1Interrupt();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -144,9 +144,11 @@ template<int idx> __fi int _vifCode_Direct(int pass, const u8* data, bool isDire
|
|||
pass2 {
|
||||
vif1Only();
|
||||
|
||||
//Only check if Path 1 or 3 are busy, else we dont care :D
|
||||
if (GSTransferStatus.PTH3 < STOPPED_MODE || gifRegs.stat.P1Q == true)
|
||||
{
|
||||
if(gifRegs.stat.APATH == GIF_APATH2 || ((GSTransferStatus.PTH3 <= IMAGE_MODE && gifRegs.stat.IMT && (vif1.cmd & 0x7f) == 0x50)) && gifRegs.stat.P1Q == false)
|
||||
//If currently transferring PATH2, or GIF is in image mode (or waiting) and we are using DIRECT command and path1 isnt waiting
|
||||
if(gifRegs.stat.APATH == GIF_APATH2 || ((GSTransferStatus.PTH3 <= IMAGE_MODE && (vif1.cmd & 0x7f) == 0x50) && gifRegs.stat.P1Q == false))
|
||||
{
|
||||
//Do nothing, allow it
|
||||
vif1Regs.stat.VGW = false;
|
||||
|
@ -154,6 +156,7 @@ template<int idx> __fi int _vifCode_Direct(int pass, const u8* data, bool isDire
|
|||
}
|
||||
else
|
||||
{
|
||||
//Using Direct/HL while Path3 is busy or Path 1 is busy
|
||||
//DevCon.Warning("Stall DIRECT/HL %x P3 %x APATH %x P1Q %x", vif1.cmd, GSTransferStatus.PTH3, gifRegs.stat.APATH, gifRegs.stat.P1Q);
|
||||
vif1Regs.stat.VGW = true; // PATH3 is in image mode (DIRECTHL), or busy (BOTH no IMT)
|
||||
vif1.GifWaitState = 0;
|
||||
|
|
|
@ -660,11 +660,10 @@ __fi int GIFPath::CopyTag(const u128* pMem128, u32 size)
|
|||
else GSTransferStatus.PTH3 = TRANSFER_MODE;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
gifRegs.stat.OPH = true;
|
||||
gifRegs.stat.APATH = pathidx + 1;
|
||||
}
|
||||
|
||||
gifRegs.stat.OPH = true;
|
||||
gifRegs.stat.APATH = pathidx + 1;
|
||||
|
||||
|
||||
if(nloop == 0 && tag.EOP)
|
||||
|
@ -919,7 +918,8 @@ __fi int GIFPath::CopyTag(const u128* pMem128, u32 size)
|
|||
GSTransferStatus.PTH2 = WAITING_MODE;
|
||||
break;
|
||||
case GIF_PATH_3:
|
||||
if(GSTransferStatus.PTH3 < STOPPED_MODE) GSTransferStatus.PTH3 = WAITING_MODE;
|
||||
//Required, if GIF_FIFO writes NOP to GIF Tag it can leave it set waiting which causes VIF FlushA to fail
|
||||
if(GSTransferStatus.PTH3 < PENDINGSTOP_MODE) GSTransferStatus.PTH3 = WAITING_MODE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue