// Resets Rec Data void mVUreset(microVU& mVU, bool resetReserve) { // Restore reserve to uncommitted state if (resetReserve) mVU.cache_reserve->Reset(); HostSys::MemProtect(mVU.dispCache, mVUdispCacheSize, PageAccess_ReadWrite()); memset(mVU.dispCache, 0xcc, mVUdispCacheSize); x86SetPtr(mVU.dispCache); mVUdispatcherAB(mVU); mVUdispatcherCD(mVU); mVUemitSearch(); // Clear All Program Data //memset(&mVU.prog, 0, sizeof(mVU.prog)); memset(&mVU.prog.lpState, 0, sizeof(mVU.prog.lpState)); mVU.profiler.Reset(mVU.index); // Program Variables mVU.prog.cleared = 1; mVU.prog.isSame = -1; mVU.prog.cur = NULL; mVU.prog.total = 0; mVU.prog.curFrame = 0; // Setup Dynarec Cache Limits for Each Program u8* z = mVU.cache; mVU.prog.x86start = z; mVU.prog.x86ptr = z; mVU.prog.x86end = z + ((mVU.cacheSize - mVUcacheSafeZone) * _1mb); //memset(mVU.prog.x86start, 0xcc, mVU.cacheSize*_1mb); for(u32 i = 0; i < (mVU.progSize / 2); i++) { if(!mVU.prog.prog[i]) { mVU.prog.prog[i] = new std::deque<microProgram*>(); continue; } std::deque<microProgram*>::iterator it(mVU.prog.prog[i]->begin()); for ( ; it != mVU.prog.prog[i]->end(); ++it) { mVUdeleteProg(mVU, it[0]); } mVU.prog.prog[i]->clear(); mVU.prog.quick[i].block = NULL; mVU.prog.quick[i].prog = NULL; } HostSys::MemProtect(mVU.dispCache, mVUdispCacheSize, PageAccess_ExecOnly()); if (mVU.index) Perf::any.map((uptr)&mVU.dispCache, mVUdispCacheSize, "mVU1 Dispatcher"); else Perf::any.map((uptr)&mVU.dispCache, mVUdispCacheSize, "mVU0 Dispatcher"); }
SpatialArrayReserve::SpatialArrayReserve( const wxString& name ) : _parent( name ) { m_prot_mode = PageAccess_ReadWrite(); }