diff --git a/Source/Project64-core/N64System/Interpreter/InterpreterOps.cpp b/Source/Project64-core/N64System/Interpreter/InterpreterOps.cpp index a9bc50688..2fbe53e09 100644 --- a/Source/Project64-core/N64System/Interpreter/InterpreterOps.cpp +++ b/Source/Project64-core/N64System/Interpreter/InterpreterOps.cpp @@ -121,7 +121,10 @@ void R4300iOp::ExecuteOps(uint32_t Cycles) g_Settings->SaveBool(Debugger_SteppingOps, true); } - g_Debugger->CPUStepStarted(); // May set stepping ops/skip op + if (TrackCPUStepStarted()) + { + g_Debugger->CPUStepStarted(); // May set stepping ops/skip op + } if (isStepping()) { @@ -136,7 +139,10 @@ void R4300iOp::ExecuteOps(uint32_t Cycles) continue; } - g_Debugger->CPUStep(); + if (TrackCPUStep()) + { + g_Debugger->CPUStep(); + } } (this->*Jump_Opcode[m_Opcode.op])(); @@ -147,7 +153,7 @@ void R4300iOp::ExecuteOps(uint32_t Cycles) Cycles -= CountPerOp; } - if (CDebugSettings::HaveDebugger()) + if (TrackCPUStepEnded()) { g_Debugger->CPUStepEnded(); } diff --git a/Source/Project64-core/Settings.cpp b/Source/Project64-core/Settings.cpp index 1cc1c932f..7628f7a90 100644 --- a/Source/Project64-core/Settings.cpp +++ b/Source/Project64-core/Settings.cpp @@ -344,6 +344,8 @@ void CSettings::AddHowToHandleSetting(const char * BaseDirectory) AddHandler(Debugger_AppLogFlush, new CSettingTypeApplication("Logging", "Log Auto Flush", (uint32_t) false)); AddHandler(Debugger_RecordRecompilerAsm, new CSettingTypeApplication("Debugger", "Record Recompiler Asm", false)); AddHandler(Debugger_AutorunScripts, new CSettingTypeApplication("Debugger", "Autorun Scripts", "")); + AddHandler(Debugger_TrackCPUStepStarted, new CSettingTypeTempBool(false)); + AddHandler(Debugger_TrackCPUStepEnded, new CSettingTypeTempBool(false)); // Logging AddHandler(Debugger_TraceMD5, new CSettingTypeApplication("Logging", "MD5", (uint32_t)g_ModuleLogLevel[TraceMD5])); diff --git a/Source/Project64-core/Settings/DebugSettings.cpp b/Source/Project64-core/Settings/DebugSettings.cpp index a538ee63a..ac6d68823 100644 --- a/Source/Project64-core/Settings/DebugSettings.cpp +++ b/Source/Project64-core/Settings/DebugSettings.cpp @@ -26,6 +26,8 @@ bool CDebugSettings::m_EndOnPermLoop = false; bool CDebugSettings::m_BreakOnUnhandledMemory = false; bool CDebugSettings::m_BreakOnAddressError = false; bool CDebugSettings::m_StepOnBreakOpCode = false; +bool CDebugSettings::m_TrackCPUStepStarted = false; +bool CDebugSettings::m_TrackCPUStepEnded = false; CDebugSettings::CDebugSettings() { @@ -52,6 +54,8 @@ CDebugSettings::CDebugSettings() g_Settings->RegisterChangeCB(Debugger_BreakOnUnhandledMemory, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); g_Settings->RegisterChangeCB(Debugger_BreakOnAddressError, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); g_Settings->RegisterChangeCB(Debugger_StepOnBreakOpCode, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); + g_Settings->RegisterChangeCB(Debugger_TrackCPUStepStarted, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); + g_Settings->RegisterChangeCB(Debugger_TrackCPUStepEnded, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); RefreshSettings(); } @@ -80,6 +84,8 @@ CDebugSettings::~CDebugSettings() g_Settings->UnregisterChangeCB(Debugger_BreakOnUnhandledMemory, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); g_Settings->UnregisterChangeCB(Debugger_BreakOnAddressError, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); g_Settings->UnregisterChangeCB(Debugger_StepOnBreakOpCode, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); + g_Settings->UnregisterChangeCB(Debugger_TrackCPUStepStarted, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); + g_Settings->UnregisterChangeCB(Debugger_TrackCPUStepEnded, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); } } @@ -104,6 +110,8 @@ void CDebugSettings::RefreshSettings() m_BreakOnUnhandledMemory = m_HaveDebugger && g_Settings->LoadBool(Debugger_BreakOnUnhandledMemory); m_BreakOnAddressError = m_HaveDebugger && g_Settings->LoadBool(Debugger_BreakOnAddressError); m_StepOnBreakOpCode = m_HaveDebugger && g_Settings->LoadBool(Debugger_StepOnBreakOpCode); + m_TrackCPUStepStarted = m_Stepping || m_ExceptionBreakpoints || (m_HaveDebugger && g_Settings->LoadBool(Debugger_TrackCPUStepStarted)); + m_TrackCPUStepEnded = m_HaveDebugger && g_Settings->LoadBool(Debugger_TrackCPUStepEnded); m_Debugging = m_HaveDebugger && (m_HaveExecutionBP || m_WaitingForStep || m_HaveWriteBP || m_HaveReadBP); } \ No newline at end of file diff --git a/Source/Project64-core/Settings/DebugSettings.h b/Source/Project64-core/Settings/DebugSettings.h index 3bbd30727..dbf02492a 100644 --- a/Source/Project64-core/Settings/DebugSettings.h +++ b/Source/Project64-core/Settings/DebugSettings.h @@ -93,6 +93,21 @@ public: return m_StepOnBreakOpCode; } + static inline bool TrackCPUStepStarted(void) + { + return m_TrackCPUStepStarted; + } + + static inline bool TrackCPUStepEnded(void) + { + return m_TrackCPUStepEnded; + } + + static inline bool TrackCPUStep(void) + { + return m_bCPULoggingEnabled; + } + private: static void StaticRefreshSettings(CDebugSettings * _this) { @@ -122,6 +137,8 @@ private: static bool m_BreakOnUnhandledMemory; static bool m_BreakOnAddressError; static bool m_StepOnBreakOpCode; + static bool m_TrackCPUStepStarted; + static bool m_TrackCPUStepEnded; static int32_t m_RefCount; static bool m_Registered; diff --git a/Source/Project64-core/Settings/SettingsID.h b/Source/Project64-core/Settings/SettingsID.h index 9d7667216..05fa351be 100644 --- a/Source/Project64-core/Settings/SettingsID.h +++ b/Source/Project64-core/Settings/SettingsID.h @@ -270,6 +270,8 @@ enum SettingID Debugger_IntrBreakpoints, Debugger_RcpIntrBreakpoints, Debugger_AutorunScripts, + Debugger_TrackCPUStepStarted, + Debugger_TrackCPUStepEnded, // Trace Debugger_TraceMD5, diff --git a/Source/Project64/UserInterface/Debugger/Breakpoints.cpp b/Source/Project64/UserInterface/Debugger/Breakpoints.cpp index 87fe9ce43..a9b08ec16 100644 --- a/Source/Project64/UserInterface/Debugger/Breakpoints.cpp +++ b/Source/Project64/UserInterface/Debugger/Breakpoints.cpp @@ -318,6 +318,7 @@ void CBreakpoints::ToggleMemLock(uint32_t address) if (m_MemLocks.count(address) == 0) { m_MemLocks.insert(address); + g_Settings->SaveBool(Debugger_TrackCPUStepStarted, true); return; } m_MemLocks.erase(address); @@ -348,6 +349,10 @@ size_t CBreakpoints::NumMemLocks() void CBreakpoints::UpdateHaveRegBP(void) { m_bHaveRegBP = HaveAnyGPRWriteBP() || HaveAnyGPRReadBP() || HaveHIWriteBP() || HaveHIReadBP() || HaveLOWriteBP() || HaveLOReadBP(); + if (m_bHaveRegBP) + { + g_Settings->SaveBool(Debugger_TrackCPUStepStarted, true); + } } void CBreakpoints::ToggleGPRWriteBP(int nReg) diff --git a/Source/Project64/UserInterface/Debugger/Debugger.cpp b/Source/Project64/UserInterface/Debugger/Debugger.cpp index 0366efdae..4b600242b 100644 --- a/Source/Project64/UserInterface/Debugger/Debugger.cpp +++ b/Source/Project64/UserInterface/Debugger/Debugger.cpp @@ -427,6 +427,7 @@ void CDebuggerUI::OpenStackTraceWindow(void) if (m_StackTrace == nullptr) { m_StackTrace = new CDebugStackTrace(this); + g_Settings->SaveBool(Debugger_TrackCPUStepEnded, true); } m_StackTrace->ShowWindow(); } diff --git a/Source/Project64/UserInterface/Debugger/ScriptSystem.cpp b/Source/Project64/UserInterface/Debugger/ScriptSystem.cpp index e9fd2c33a..3cffbc64c 100644 --- a/Source/Project64/UserInterface/Debugger/ScriptSystem.cpp +++ b/Source/Project64/UserInterface/Debugger/ScriptSystem.cpp @@ -487,6 +487,7 @@ JSAppCallbackID CScriptSystem::RawAddAppCallback(JSAppHookID hookId, JSAppCallba return JS_INVALID_CALLBACK; } + g_Settings->SaveBool(Debugger_TrackCPUStepStarted, true); callback.m_Instance->IncRefCount(); callback.m_CallbackId = m_NextAppCallbackId++; m_AppCallbackHooks[hookId].push_back(callback);