Fixed a bug in partial DIRECT/HL transfers, Fixes Ape Escape hang going ingame.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@4057 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
refraction 2010-11-26 20:50:28 +00:00
parent b9a3649df0
commit 5f1ccc767e
2 changed files with 17 additions and 6 deletions

View File

@ -192,18 +192,21 @@ template<int idx> __fi int _vifCode_Direct(int pass, const u8* data, bool isDire
static __aligned16 u32 partial_write[4]; static __aligned16 u32 partial_write[4];
static uint partial_count = 0; static uint partial_count = 0;
ret = 0;
for( uint i=0; i<(minSize & 3); ++i) for( uint i=0; i<(minSize & 3); ++i)
{
partial_write[partial_count++] = ((u32*)data)[i]; partial_write[partial_count++] = ((u32*)data)[i];
ret++;
}
pxAssume( partial_count <= 4 ); pxAssume( partial_count <= 4 );
ret = 0;
if (partial_count == 4) if (partial_count == 4)
{ {
GetMTGS().PrepDataPacket(GIF_PATH_2, 1); GetMTGS().PrepDataPacket(GIF_PATH_2, 1);
GIFPath_CopyTag(GIF_PATH_2, (u128*)partial_write, 1); GIFPath_CopyTag(GIF_PATH_2, (u128*)partial_write, 1);
GetMTGS().SendDataPacket(); GetMTGS().SendDataPacket();
partial_count = 0; partial_count = 0;
ret = 4;
} }
} }
else else

View File

@ -146,12 +146,20 @@ _vifT static __fi bool vifTransfer(u32 *data, int size, bool TTE) {
vifXch.madr +=(transferred << 4); vifXch.madr +=(transferred << 4);
vifXch.qwc -= transferred; vifXch.qwc -= transferred;
if(vifXch.chcr.STR)hwDmacSrcTadrInc(vifXch); if(vifXch.chcr.STR)hwDmacSrcTadrInc(vifXch);
}
if (!vifXch.qwc && !vifX.irqoffset) if (!vifXch.qwc)
{
vifX.inprogress &= ~0x1;
vifX.vifstalled = false;
}
}
else
{ {
vifX.inprogress &= ~0x1;
vifX.vifstalled = false; if(!vifX.irqoffset)
{
vifX.vifstalled = false;
}
} }
if (vifX.irq && vifX.cmd == 0) { if (vifX.irq && vifX.cmd == 0) {