diff --git a/pcsx2/x86/microVU.cpp b/pcsx2/x86/microVU.cpp index 6b4e028c3e..c68c5488b4 100644 --- a/pcsx2/x86/microVU.cpp +++ b/pcsx2/x86/microVU.cpp @@ -88,7 +88,7 @@ microVUt(void) mVUreset(mV) { u8* z = (mVU->cache + 0x1000); // Dispatcher Code is in first page of cache mVU->prog.x86start = z; mVU->prog.x86ptr = z; - mVU->prog.x86end = (u8*)((uptr)z + (uptr)(mVU->cacheSize - (mVU->cacheSize*.05))); + mVU->prog.x86end = (u8*)((uptr)z + (uptr)(mVU->cacheSize - (_1mb * 3))); // 3mb "Safe Zone" for (int i = 0; i <= mVU->prog.max; i++) { if (!mVU->index) mVUclearProg<0>(i); diff --git a/pcsx2/x86/microVU.h b/pcsx2/x86/microVU.h index f0ee81f400..ea774028a2 100644 --- a/pcsx2/x86/microVU.h +++ b/pcsx2/x86/microVU.h @@ -96,11 +96,12 @@ public: } return NULL; } - void printInfo() { + void printInfo(int pc) { + if (listI < 7) return; microBlockLink* linkI = &blockList; for (int i = 0; i <= listI; i++) { - DevCon::Status("[Block #%d][q=%02d][p=%02d][xgkick=%d][vi15=%08x][viBackup=%02d][flags=%02x][exactMatch=%x]", - params i, linkI->block->pState.q, linkI->block->pState.p, linkI->block->pState.xgkick, linkI->block->pState.vi15, + DevCon::Status("[%04x][Block #%d][q=%02d][p=%02d][xgkick=%d][vi15=%08x][viBackup=%02d][flags=%02x][exactMatch=%x]", + params pc, i, linkI->block->pState.q, linkI->block->pState.p, linkI->block->pState.xgkick, linkI->block->pState.vi15, linkI->block->pState.viBackUp, linkI->block->pState.flags, linkI->block->pState.needExactMatch); linkI = linkI->next; } @@ -142,7 +143,7 @@ struct microProgManager { microRegInfo lpState; // Pipeline state from where program left off (useful for continuing execution) }; -#define mVUcacheSize (mMaxProg * (0x100000 * 0.5)) // 0.5mb per program +#define mVUcacheSize ((mMaxProg < 20) ? (_1mb * 10) : (mMaxProg * (_1mb * 0.5))) // 0.5mb per program struct microVU { PCSX2_ALIGNED16(u32 macFlag[4]); // 4 instances of mac flag (used in execution) diff --git a/pcsx2/x86/microVU_Analyze.inl b/pcsx2/x86/microVU_Analyze.inl index b415d738c0..4d909ff034 100644 --- a/pcsx2/x86/microVU_Analyze.inl +++ b/pcsx2/x86/microVU_Analyze.inl @@ -315,7 +315,7 @@ microVUt(void) mVUanalyzeMflag(mV, int Is, int It) { analyzeVIreg1(Is, mVUlow.VI_read[0]); analyzeVIreg2(It, mVUlow.VI_write, 1); if (!It) { mVUlow.isNOP = 1; } - else { // Need set _doMac for 4 previous Ops (need to do all 4 because stalls could change the result needed) + else { mVUinfo.swapOps = 1; flagSet(mVU, 1); if (mVUcount < 4) { mVUpBlock->pState.needExactMatch |= 2; } diff --git a/pcsx2/x86/microVU_Execute.inl b/pcsx2/x86/microVU_Execute.inl index ca29e10469..3f698ff0b6 100644 --- a/pcsx2/x86/microVU_Execute.inl +++ b/pcsx2/x86/microVU_Execute.inl @@ -123,7 +123,7 @@ microVUx(void) mVUcleanUp() { //if (!(ax % 100000)) { // for (u32 i = 0; i < (mVU->progSize / 2); i++) { // if (mVUcurProg.block[i]) { - // mVUcurProg.block[i]->printInfo(); + // mVUcurProg.block[i]->printInfo(i*8); // } // } //} diff --git a/pcsx2/x86/microVU_Misc.h b/pcsx2/x86/microVU_Misc.h index e5fa9fadb3..15416c3b26 100644 --- a/pcsx2/x86/microVU_Misc.h +++ b/pcsx2/x86/microVU_Misc.h @@ -221,6 +221,7 @@ typedef u32 (__fastcall *mVUCall)(void*, void*); #define Rmem (uptr)&mVU->regs->VI[REG_R].UL #define aWrap(x, m) ((x > m) ? 0 : x) #define shuffleSS(x) ((x==1)?(0x27):((x==2)?(0xc6):((x==4)?(0xe1):(0xe4)))) +#define _1mb (0x100000) // Flag Info #define __Status (mVUregs.needExactMatch & 1)