diff --git a/pcsx2/Vif_Codes.cpp b/pcsx2/Vif_Codes.cpp index cf2ec2353c..c139a2d1fe 100644 --- a/pcsx2/Vif_Codes.cpp +++ b/pcsx2/Vif_Codes.cpp @@ -192,18 +192,21 @@ template __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 diff --git a/pcsx2/Vif_Transfer.cpp b/pcsx2/Vif_Transfer.cpp index 0d35c946b8..ec3a8bcf73 100644 --- a/pcsx2/Vif_Transfer.cpp +++ b/pcsx2/Vif_Transfer.cpp @@ -146,12 +146,20 @@ _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 { - vifX.inprogress &= ~0x1; - vifX.vifstalled = false; + + if(!vifX.irqoffset) + { + vifX.vifstalled = false; + } } if (vifX.irq && vifX.cmd == 0) {