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 uint partial_count = 0;
ret = 0;
for( uint i=0; i<(minSize & 3); ++i)
{
partial_write[partial_count++] = ((u32*)data)[i];
ret++;
}
pxAssume( partial_count <= 4 );
ret = 0;
if (partial_count == 4)
{
GetMTGS().PrepDataPacket(GIF_PATH_2, 1);
GIFPath_CopyTag(GIF_PATH_2, (u128*)partial_write, 1);
GetMTGS().SendDataPacket();
partial_count = 0;
ret = 4;
}
}
else

View File

@ -146,13 +146,21 @@ _vifT static __fi bool vifTransfer(u32 *data, int size, bool TTE) {
vifXch.madr +=(transferred << 4);
vifXch.qwc -= transferred;
if(vifXch.chcr.STR)hwDmacSrcTadrInc(vifXch);
}
if (!vifXch.qwc && !vifX.irqoffset)
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!");