diff --git a/Core/Debugger.cpp b/Core/Debugger.cpp index 5449d756..5eccc57f 100644 --- a/Core/Debugger.cpp +++ b/Core/Debugger.cpp @@ -100,6 +100,7 @@ void Debugger::Release() void Debugger::Reset() { + _memoryAccessCounter->ResetCounts(); _cpuDebugger->Reset(); _spcDebugger->Reset(); if(_sa1Debugger) { @@ -287,6 +288,10 @@ void Debugger::ProcessEvent(EventType type) case EventType::Reset: Reset(); break; + + case EventType::StateLoaded: + _memoryAccessCounter->ResetCounts(); + break; } } diff --git a/Core/EventType.h b/Core/EventType.h index 102ac763..4f150e15 100644 --- a/Core/EventType.h +++ b/Core/EventType.h @@ -9,5 +9,7 @@ enum class EventType Reset, ScriptEnded, InputPolled, + StateLoaded, + StateSaved, EventTypeSize }; \ No newline at end of file diff --git a/Core/LuaApi.cpp b/Core/LuaApi.cpp index ca81bde6..a470c8df 100644 --- a/Core/LuaApi.cpp +++ b/Core/LuaApi.cpp @@ -147,10 +147,10 @@ int LuaApi::GetLibrary(lua_State *lua) lua_pushintvalue(endFrame, EventType::EndFrame); lua_pushintvalue(inputPolled, EventType::InputPolled); lua_pushintvalue(scriptEnded, EventType::ScriptEnded); - //TODO - /*lua_pushintvalue(codeBreak, EventType::CodeBreak); lua_pushintvalue(stateLoaded, EventType::StateLoaded); lua_pushintvalue(stateSaved, EventType::StateSaved); + //TODO + /*lua_pushintvalue(codeBreak, EventType::CodeBreak); */ lua_settable(lua, -3); diff --git a/Core/MemoryAccessCounter.cpp b/Core/MemoryAccessCounter.cpp index 3d4c4535..9f77d6ca 100644 --- a/Core/MemoryAccessCounter.cpp +++ b/Core/MemoryAccessCounter.cpp @@ -102,6 +102,8 @@ void MemoryAccessCounter::ResetCounts() memset(_readStamps[i].data(), 0, _readStamps[i].size() * sizeof(uint64_t)); memset(_writeStamps[i].data(), 0, _writeStamps[i].size() * sizeof(uint64_t)); memset(_execStamps[i].data(), 0, _execStamps[i].size() * sizeof(uint64_t)); + + memset(_uninitReads[i].data(), 0, _uninitReads[i].size() * sizeof(uint8_t)); } } diff --git a/Core/MemoryAccessCounter.h b/Core/MemoryAccessCounter.h index ae3a5ea2..380d598f 100644 --- a/Core/MemoryAccessCounter.h +++ b/Core/MemoryAccessCounter.h @@ -20,7 +20,7 @@ private: vector _writeStamps[(int)SnesMemoryType::Register]; vector _execStamps[(int)SnesMemoryType::Register]; - vector _uninitReads[(int)SnesMemoryType::Register]; + vector _uninitReads[(int)SnesMemoryType::Register]; Debugger* _debugger; MemoryManager* _memoryManager; diff --git a/Core/SaveStateManager.cpp b/Core/SaveStateManager.cpp index 00546248..5b6beaa9 100644 --- a/Core/SaveStateManager.cpp +++ b/Core/SaveStateManager.cpp @@ -9,6 +9,8 @@ #include "VideoDecoder.h" #include "BaseCartridge.h" #include "MovieManager.h" +#include "EventType.h" +#include "Debugger.h" SaveStateManager::SaveStateManager(shared_ptr console) { @@ -87,15 +89,15 @@ bool SaveStateManager::SaveState(string filepath) ofstream file(filepath, ios::out | ios::binary); if(file) { - auto lock = _console->AcquireLock(); + _console->Lock(); SaveState(file); + _console->Unlock(); file.close(); - //TODO LUA - /*shared_ptr debugger = _console->GetDebugger(false); + shared_ptr debugger = _console->GetDebugger(false); if(debugger) { debugger->ProcessEvent(EventType::StateSaved); - }*/ + } return true; } return false; @@ -165,17 +167,17 @@ bool SaveStateManager::LoadState(string filepath, bool hashCheckRequired) bool result = false; if(file.good()) { - auto lock = _console->AcquireLock(); - if(LoadState(file, hashCheckRequired)) { - result = true; - } + _console->Lock(); + result = LoadState(file, hashCheckRequired); + _console->Unlock(); file.close(); - //TODO LUA - /*shared_ptr debugger = _console->GetDebugger(false); - if(debugger) { - debugger->ProcessEvent(EventType::StateLoaded); - }*/ + if(result) { + shared_ptr debugger = _console->GetDebugger(false); + if(debugger) { + debugger->ProcessEvent(EventType::StateLoaded); + } + } } else { MessageManager::DisplayMessage("SaveStates", "SaveStateEmpty"); } diff --git a/UI/Debugger/Scripts/frmScript.cs b/UI/Debugger/Scripts/frmScript.cs index a04a4e54..1c9db5d4 100644 --- a/UI/Debugger/Scripts/frmScript.cs +++ b/UI/Debugger/Scripts/frmScript.cs @@ -552,8 +552,8 @@ namespace Mesen.GUI.Debugger new List {"enum","emu.eventType.startFrame","Triggered at the start of a frame (cycle 0, scanline -1)","","",""}, new List {"enum","emu.eventType.endFrame","Triggered at the end of a frame (cycle 0, scanline 241)","","",""}, //new List {"enum","emu.eventType.codeBreak","Triggered when code execution breaks (e.g due to a breakpoint, etc.)","","",""}, - //new List {"enum","emu.eventType.stateLoaded","Triggered when a user manually loads a savestate","","",""}, - //new List {"enum","emu.eventType.stateSaved","Triggered when a user manually saves a savestate","","",""}, + new List {"enum","emu.eventType.stateLoaded","Triggered when a user manually loads a savestate","","",""}, + new List {"enum","emu.eventType.stateSaved","Triggered when a user manually saves a savestate","","",""}, new List {"enum","emu.eventType.inputPolled","Triggered when the emulation core polls the state of the input devices for the next frame","","",""}, new List {"enum","emu.eventType.scriptEnded","Triggered when the current Lua script ends (script window closed, execution stopped, etc.)","","",""}, new List {"enum","emu.executeCountType","emu.executeCountType.[value]","","","Values:\ncpuCycles = 0,\nppuCycles = 1,\ncpuInstructions = 2\n\nUsed by execute calls." },