Index: pcsx2/x86/microVU_Execute.inl =================================================================== --- pcsx2/x86/microVU_Execute.inl (revision 1173) +++ pcsx2/x86/microVU_Execute.inl (working copy) @@ -81,6 +81,7 @@ // Generates the code to exit from recompiled blocks microVUt(void) mVUdispatcherB() { + using namespace x86Emitter; microVU* mVU = mVUx; mVU->exitFunct = x86Ptr; @@ -106,6 +107,9 @@ POP32R(EBX); if (isMMX(1)) EMMS(); + CMP32ItoM((uptr)&mVU->cycles, 0); + xSETLE(al); + xMOVZX(eax, al); RET(); mVUcacheCheck(x86Ptr, mVU->cache, 512); Index: pcsx2/x86/iVU1micro.cpp =================================================================== --- pcsx2/x86/iVU1micro.cpp (revision 1173) +++ pcsx2/x86/iVU1micro.cpp (working copy) @@ -127,7 +127,7 @@ extern void closeVUrec(const int vuIndex); extern void resetVUrec(const int vuIndex); extern void clearVUrec(u32 addr, u32 size, const int vuIndex); -extern void runVUrec(u32 startPC, u32 cycles, const int vuIndex); +extern int runVUrec(u32 startPC, u32 cycles, const int vuIndex); namespace VU1micro { @@ -143,7 +143,9 @@ FreezeXMMRegs(1); //FreezeMMXRegs(1); - runVUrec(VU1.VI[REG_TPC].UL, 5000, 1); + if (runVUrec(VU1.VI[REG_TPC].UL, 5000, 1)) { + // do stuff + } FreezeXMMRegs(0); //FreezeMMXRegs(0); } Index: pcsx2/x86/microVU.cpp =================================================================== --- pcsx2/x86/microVU.cpp (revision 1173) +++ pcsx2/x86/microVU.cpp (working copy) @@ -232,9 +232,9 @@ else mVUclear<1>(addr, size); } -void runVUrec(u32 startPC, u32 cycles, const int vuIndex) { - if (!vuIndex) startVU0(startPC, cycles); - else startVU1(startPC, cycles); +int runVUrec(u32 startPC, u32 cycles, const int vuIndex) { + if (!vuIndex) return startVU0(startPC, cycles); + else return startVU1(startPC, cycles); } #endif // PCSX2_MICROVU