diff --git a/Source/Project64-core/Debugger.h b/Source/Project64-core/Debugger.h index 0a5e685a1..8064205ee 100644 --- a/Source/Project64-core/Debugger.h +++ b/Source/Project64-core/Debugger.h @@ -21,6 +21,7 @@ __interface CDebugger virtual void OpenSymbolsWindow(void) = 0; virtual void OpenDMALogWindow(void) = 0; virtual void OpenCPULogWindow(void) = 0; + virtual void OpenExcBreakpointsWindow(void) = 0; virtual void OpenStackTraceWindow(void) = 0; virtual void OpenStackViewWindow(void) = 0; virtual void TLBChanged(void) = 0; @@ -38,4 +39,5 @@ __interface CDebugger virtual void CPUStepStarted(void) = 0; virtual void CPUStep(void) = 0; + virtual void CPUStepEnded(void) = 0; }; diff --git a/Source/Project64-core/N64System/Interpreter/InterpreterCPU.cpp b/Source/Project64-core/N64System/Interpreter/InterpreterCPU.cpp index 6a545af41..ea778bb0b 100644 --- a/Source/Project64-core/N64System/Interpreter/InterpreterCPU.cpp +++ b/Source/Project64-core/N64System/Interpreter/InterpreterCPU.cpp @@ -305,26 +305,22 @@ void CInterpreterCPU::ExecuteCPU() g_Settings->SaveBool(Debugger_SteppingOps, true); } + g_Debugger->CPUStepStarted(); // may set stepping ops/skip op + if (isStepping()) { g_Debugger->WaitForStep(); } - bool bSkip = SkipOp(); - - if (!bSkip) - { - g_Debugger->CPUStepStarted(); - bSkip = SkipOp(); - } - - if (bSkip) + if (SkipOp()) { // Skip command if instructed by the debugger g_Settings->SaveBool(Debugger_SkipOp, false); PROGRAM_COUNTER += 4; continue; } + + g_Debugger->CPUStep(); } /* if (PROGRAM_COUNTER > 0x80000300 && PROGRAM_COUNTER < 0x80380000) @@ -338,7 +334,7 @@ void CInterpreterCPU::ExecuteCPU() _GPR[0].DW = 0; /* MIPS $zero hard-wired to 0 */ NextTimer -= CountPerOp; - if (CDebugSettings::HaveDebugger()) { g_Debugger->CPUStep(); } + if (CDebugSettings::HaveDebugger()) { g_Debugger->CPUStepEnded(); } PROGRAM_COUNTER += 4; switch (R4300iOp::m_NextInstruction) diff --git a/Source/Project64-core/Settings.cpp b/Source/Project64-core/Settings.cpp index cf60a46b0..ddd4ab3eb 100644 --- a/Source/Project64-core/Settings.cpp +++ b/Source/Project64-core/Settings.cpp @@ -341,6 +341,7 @@ void CSettings::AddHowToHandleSetting(const char * BaseDirectory) AddHandler(Debugger_AutoRefreshMemoryView, new CSettingTypeApplication("Debugger", "Auto Refresh Memory View", true)); AddHandler(Debugger_CPULoggingEnabled, new CSettingTypeApplication("Debugger", "Enable CPU Logging", false)); AddHandler(Debugger_CPULogBufferSize, new CSettingTypeApplication("Debugger", "CPU Log Buffer Size", (uint32_t)1024)); + AddHandler(Debugger_ExceptionBreakpoints, new CSettingTypeApplication("Debugger", "Exception Breakpoints", (uint32_t)0)); AddHandler(Debugger_DebugLanguage, new CSettingTypeApplication("Debugger", "Debug Language", false)); AddHandler(Debugger_ShowDivByZero, new CSettingTypeApplication("Debugger", "Show Div by zero", false)); AddHandler(Debugger_AppLogFlush, new CSettingTypeApplication("Logging", "Log Auto Flush", (uint32_t)false)); diff --git a/Source/Project64-core/Settings/DebugSettings.cpp b/Source/Project64-core/Settings/DebugSettings.cpp index 74bd48812..824577dcc 100644 --- a/Source/Project64-core/Settings/DebugSettings.cpp +++ b/Source/Project64-core/Settings/DebugSettings.cpp @@ -29,6 +29,7 @@ bool CDebugSettings::m_HaveWriteBP = false; bool CDebugSettings::m_HaveReadBP = false; bool CDebugSettings::m_bShowPifRamErrors = false; bool CDebugSettings::m_bCPULoggingEnabled = false; +uint32_t CDebugSettings::m_ExceptionBreakpoints = 0; CDebugSettings::CDebugSettings() { @@ -49,6 +50,7 @@ CDebugSettings::CDebugSettings() g_Settings->RegisterChangeCB(Debugger_WaitingForStep, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); g_Settings->RegisterChangeCB(Debugger_ShowPifErrors, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); g_Settings->RegisterChangeCB(Debugger_CPULoggingEnabled, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); + g_Settings->RegisterChangeCB(Debugger_ExceptionBreakpoints, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); RefreshSettings(); } @@ -71,6 +73,7 @@ CDebugSettings::~CDebugSettings() g_Settings->UnregisterChangeCB(Debugger_WaitingForStep, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); g_Settings->UnregisterChangeCB(Debugger_ShowPifErrors, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); g_Settings->UnregisterChangeCB(Debugger_CPULoggingEnabled, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); + g_Settings->UnregisterChangeCB(Debugger_ExceptionBreakpoints, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); } } @@ -89,6 +92,7 @@ void CDebugSettings::RefreshSettings() m_HaveReadBP = m_HaveDebugger && g_Settings->LoadBool(Debugger_ReadBPExists); m_bShowPifRamErrors = m_HaveDebugger && g_Settings->LoadBool(Debugger_ShowPifErrors); m_bCPULoggingEnabled = m_HaveDebugger && g_Settings->LoadBool(Debugger_CPULoggingEnabled); + m_ExceptionBreakpoints = m_HaveDebugger ? g_Settings->LoadDword(Debugger_ExceptionBreakpoints) : 0; 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 d5f8dc63a..dc925db35 100644 --- a/Source/Project64-core/Settings/DebugSettings.h +++ b/Source/Project64-core/Settings/DebugSettings.h @@ -32,6 +32,7 @@ public: static inline bool HaveReadBP(void) { return m_HaveReadBP; } static inline bool bShowPifRamErrors(void) { return m_bShowPifRamErrors; } static inline bool bCPULoggingEnabled(void) { return m_bCPULoggingEnabled; } + static inline uint32_t ExceptionBreakpoints(void) { return m_ExceptionBreakpoints; } private: static void StaticRefreshSettings(CDebugSettings * _this) @@ -55,6 +56,7 @@ private: static bool m_HaveReadBP; static bool m_bShowPifRamErrors; static bool m_bCPULoggingEnabled; + static uint32_t m_ExceptionBreakpoints; 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 354f1409b..c5a7e1c8d 100644 --- a/Source/Project64-core/Settings/SettingsID.h +++ b/Source/Project64-core/Settings/SettingsID.h @@ -255,6 +255,7 @@ enum SettingID Debugger_AutoRefreshMemoryView, Debugger_CPULoggingEnabled, Debugger_CPULogBufferSize, + Debugger_ExceptionBreakpoints, //Trace Debugger_TraceMD5, diff --git a/Source/Project64/Project64.vcxproj b/Source/Project64/Project64.vcxproj index baf3dedac..6467a7786 100644 --- a/Source/Project64/Project64.vcxproj +++ b/Source/Project64/Project64.vcxproj @@ -88,6 +88,7 @@ + @@ -151,6 +152,7 @@ + diff --git a/Source/Project64/Project64.vcxproj.filters b/Source/Project64/Project64.vcxproj.filters index af0bab4a3..5ba6971d7 100644 --- a/Source/Project64/Project64.vcxproj.filters +++ b/Source/Project64/Project64.vcxproj.filters @@ -228,6 +228,9 @@ Source Files\User Interface Source\Debugger Source + + Source Files\User Interface Source\Debugger Source + @@ -437,6 +440,9 @@ Header Files\User Interface Headers\Debugger Headers + + Header Files\User Interface Headers\Debugger Headers + diff --git a/Source/Project64/Settings/UISettings.cpp b/Source/Project64/Settings/UISettings.cpp index 5a798fba2..68c6e7eb4 100644 --- a/Source/Project64/Settings/UISettings.cpp +++ b/Source/Project64/Settings/UISettings.cpp @@ -77,6 +77,7 @@ void RegisterUISettings (void) g_Settings->AddHandler((SettingID)(FirstUISettings + DebuggerUI_StackTracePos), new CSettingTypeApplication("Debugger UI", "Stack Trace Pos", Default_None)); g_Settings->AddHandler((SettingID)(FirstUISettings + DebuggerUI_SymbolsPos), new CSettingTypeApplication("Debugger UI", "Symbols Pos", Default_None)); g_Settings->AddHandler((SettingID)(FirstUISettings + DebuggerUI_TLBPos), new CSettingTypeApplication("Debugger UI", "TLB Pos", Default_None)); + g_Settings->AddHandler((SettingID)(FirstUISettings + DebuggerUI_ExceptionBPPos), new CSettingTypeApplication("Debugger UI", "Exception BP Pos", Default_None)); } void UISettingsSaveBool(UISettingID Type, bool Value) diff --git a/Source/Project64/Settings/UISettings.h b/Source/Project64/Settings/UISettings.h index 2af177738..304757206 100644 --- a/Source/Project64/Settings/UISettings.h +++ b/Source/Project64/Settings/UISettings.h @@ -74,6 +74,7 @@ enum UISettingID DebuggerUI_StackTracePos, DebuggerUI_SymbolsPos, DebuggerUI_TLBPos, + DebuggerUI_ExceptionBPPos }; void RegisterUISettings (void); diff --git a/Source/Project64/UserInterface/Debugger/Debugger-ExceptionBreakpoints.cpp b/Source/Project64/UserInterface/Debugger/Debugger-ExceptionBreakpoints.cpp new file mode 100644 index 000000000..4ec0c39e6 --- /dev/null +++ b/Source/Project64/UserInterface/Debugger/Debugger-ExceptionBreakpoints.cpp @@ -0,0 +1,100 @@ +#include "stdafx.h" +#include "DebuggerUI.h" + +CDebugExcBreakpoints::ExcCheckboxMeta CDebugExcBreakpoints::ExcCheckboxMap[] = { + { IDC_CHK_INT, 0 }, + { IDC_CHK_MOD, 1 }, + { IDC_CHK_RMISS, 2 }, + { IDC_CHK_WMISS, 3 }, + { IDC_CHK_RADE, 4 }, + { IDC_CHK_WADE, 5 }, + { IDC_CHK_IBE, 6 }, + { IDC_CHK_DBE, 7 }, + { IDC_CHK_SYSCALL, 8 }, + { IDC_CHK_BREAK, 9 }, + { IDC_CHK_II, 10 }, + { IDC_CHK_CPU, 11 }, + { IDC_CHK_OV, 12 }, + { IDC_CHK_TRAP, 13 }, + { IDC_CHK_VCEI, 14 }, + { IDC_CHK_FPE, 15 }, + { IDC_CHK_WATCH, 23 }, + { IDC_CHK_VCED, 31 }, + { 0, 0 } +}; + +CDebugExcBreakpoints::CDebugExcBreakpoints(CDebuggerUI* debugger) : + CDebugDialog(debugger) +{ +} + +CDebugExcBreakpoints::~CDebugExcBreakpoints() +{ +} + +LRESULT CDebugExcBreakpoints::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) +{ + DlgSavePos_Init(DebuggerUI_ExceptionBPPos); + + uint32_t excBreakpoints = g_Settings->LoadDword(Debugger_ExceptionBreakpoints); + + for (int i = 0; ExcCheckboxMap[i].ctrlId != 0; i++) + { + uint32_t excBit = (1 << ExcCheckboxMap[i].exc); + + if (excBreakpoints & excBit) + { + SendDlgItemMessage(ExcCheckboxMap[i].ctrlId, BM_SETCHECK, BST_CHECKED, 0); + } + } + + LoadWindowPos(); + WindowCreated(); + return TRUE; +} + +LRESULT CDebugExcBreakpoints::OnDestroy(void) +{ + return 0; +} + + +LRESULT CDebugExcBreakpoints::OnClicked(WORD /*wNotifyCode*/, WORD wID, HWND, BOOL& /*bHandled*/) +{ + switch (wID) + { + case IDOK: + case IDCANCEL: + EndDialog(0); + return FALSE; + } + + for (int i = 0; ExcCheckboxMap[i].ctrlId != 0; i++) + { + if (ExcCheckboxMap[i].ctrlId == wID) + { + uint32_t excBit = (1 << ExcCheckboxMap[i].exc); + bool bChecked = (SendMessage(GetDlgItem(wID), BM_GETSTATE, 0, 0) & BST_CHECKED) != 0; + uint32_t excBreakpoints = g_Settings->LoadDword(Debugger_ExceptionBreakpoints); + + if (bChecked) + { + excBreakpoints |= excBit; + } + else + { + excBreakpoints &= ~excBit; + } + + g_Settings->SaveDword(Debugger_ExceptionBreakpoints, excBreakpoints); + break; + } + } + + return FALSE; +} + +void CDebugExcBreakpoints::OnExitSizeMove(void) +{ + SaveWindowPos(); +} diff --git a/Source/Project64/UserInterface/Debugger/Debugger-ExceptionBreakpoints.h b/Source/Project64/UserInterface/Debugger/Debugger-ExceptionBreakpoints.h new file mode 100644 index 000000000..e8fc387cd --- /dev/null +++ b/Source/Project64/UserInterface/Debugger/Debugger-ExceptionBreakpoints.h @@ -0,0 +1,37 @@ +#pragma once + +#include +#include "DebuggerUI.h" + + +class CDebugExcBreakpoints : + public CDebugDialog +{ + typedef struct + { + WORD ctrlId; + int exc; + } ExcCheckboxMeta; + +public: + enum { IDD = IDD_Debugger_ExceptionBP }; + + CDebugExcBreakpoints(CDebuggerUI * debugger); + virtual ~CDebugExcBreakpoints(void); + +private: + static ExcCheckboxMeta ExcCheckboxMap[]; + + LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/); + LRESULT OnClicked(WORD wNotifyCode, WORD wID, HWND /*hWndCtl*/, BOOL& bHandled); + + void OnExitSizeMove(void); + LRESULT OnDestroy(void); + + BEGIN_MSG_MAP_EX(CDebugExcBreakpoints) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + COMMAND_CODE_HANDLER(BN_CLICKED, OnClicked) + MSG_WM_EXITSIZEMOVE(OnExitSizeMove) + MSG_WM_DESTROY(OnDestroy) + END_MSG_MAP() +}; diff --git a/Source/Project64/UserInterface/Debugger/Debugger.cpp b/Source/Project64/UserInterface/Debugger/Debugger.cpp index a1c0eec9e..9eb398de5 100644 --- a/Source/Project64/UserInterface/Debugger/Debugger.cpp +++ b/Source/Project64/UserInterface/Debugger/Debugger.cpp @@ -33,6 +33,7 @@ CDebuggerUI::CDebuggerUI() : m_StackView(NULL), m_DMALogView(NULL), m_CPULogView(NULL), + m_ExcBreakpoints(NULL), m_DMALog(NULL), m_CPULog(NULL), m_StepEvent(false) @@ -65,6 +66,7 @@ CDebuggerUI::~CDebuggerUI(void) delete m_StackTrace; delete m_DMALogView; delete m_CPULogView; + delete m_ExcBreakpoints; delete m_DMALog; delete m_CPULog; @@ -179,6 +181,12 @@ void CDebuggerUI::Debug_Reset(void) delete m_StackView; m_StackView = NULL; } + if (m_ExcBreakpoints) + { + m_ExcBreakpoints->HideWindow(); + delete m_ExcBreakpoints; + m_ExcBreakpoints = NULL; + } } void CDebuggerUI::OpenMemoryDump() @@ -344,6 +352,15 @@ void CDebuggerUI::OpenCPULogWindow(void) m_CPULogView->ShowWindow(); } +void CDebuggerUI::OpenExcBreakpointsWindow(void) +{ + if (m_ExcBreakpoints == NULL) + { + m_ExcBreakpoints = new CDebugExcBreakpoints(this); + } + m_ExcBreakpoints->ShowWindow(); +} + void CDebuggerUI::OpenStackTraceWindow(void) { if (m_StackTrace == NULL) @@ -604,14 +621,13 @@ void CDebuggerUI::TLBChanged() Debug_RefreshTLBWindow(); } -// Exception handling - break on exception vector and show cpu log on certain errors + +// Exception handling - break on exception vector if exception bp is set void CDebuggerUI::HandleCPUException(void) { - uint32_t pc = g_Reg->m_PROGRAM_COUNTER; - int exc = g_Reg->CAUSE_REGISTER & 0x7C; + int exc = (g_Reg->CAUSE_REGISTER >> 2) & 0x1F; - // ignore interrupt, syscall, coprocessor unusable, watch - if (exc != EXC_INT && exc != EXC_SYSCALL && exc != EXC_CPU && exc != EXC_WATCH) + if ((CDebugSettings::ExceptionBreakpoints() & (1 << exc))) { if (CDebugSettings::bCPULoggingEnabled()) { @@ -688,12 +704,19 @@ void CDebuggerUI::CPUStepStarted() } } - if (pc == 0x80000000 || pc == 0x80000080 || - pc == 0xA0000100 || pc == 0x80000180) + if (CDebugSettings::ExceptionBreakpoints() != 0) { - HandleCPUException(); + if (pc == 0x80000000 || pc == 0x80000080 || + pc == 0xA0000100 || pc == 0x80000180) + { + HandleCPUException(); + } } +} +// Called before opcode is executed (not called if SkipOp is set) +void CDebuggerUI::CPUStep() +{ if (bCPULoggingEnabled()) { m_CPULog->PushState(); @@ -705,7 +728,8 @@ void CDebuggerUI::CPUStepStarted() } } -void CDebuggerUI::CPUStep() +// Called after opcode has been executed +void CDebuggerUI::CPUStepEnded() { OPCODE Opcode = R4300iOp::m_Opcode; uint32_t op = Opcode.op; diff --git a/Source/Project64/UserInterface/Debugger/DebuggerUI.h b/Source/Project64/UserInterface/Debugger/DebuggerUI.h index f9f194113..893dc7b4a 100644 --- a/Source/Project64/UserInterface/Debugger/DebuggerUI.h +++ b/Source/Project64/UserInterface/Debugger/DebuggerUI.h @@ -15,4 +15,5 @@ #include "Debugger-DMALogView.h" #include "Debugger-CPULogView.h" #include "Debugger-StackView.h" -#include "Debugger-StackTrace.h" \ No newline at end of file +#include "Debugger-StackTrace.h" +#include "Debugger-ExceptionBreakpoints.h" \ No newline at end of file diff --git a/Source/Project64/UserInterface/Debugger/debugger.h b/Source/Project64/UserInterface/Debugger/debugger.h index 2c5908bd1..bcd27e7c3 100644 --- a/Source/Project64/UserInterface/Debugger/debugger.h +++ b/Source/Project64/UserInterface/Debugger/debugger.h @@ -24,6 +24,7 @@ class CDebugDMALogView; class CDebugCPULogView; class CDebugStackView; class CDebugStackTrace; +class CDebugExcBreakpoints; class CCPULog; class CDMALog; @@ -61,6 +62,7 @@ public: void OpenDMALogWindow(void); void OpenCPULogWindow(void); void Debug_RefreshCPULogWindow(void); + void OpenExcBreakpointsWindow(void); bool ExecutionBP(uint32_t address); bool ReadBP8(uint32_t address); @@ -90,23 +92,25 @@ protected: void TLBChanged(void); void CPUStepStarted(void); void CPUStep(void); + void CPUStepEnded(void); void FrameDrawn(void); private: CDebuggerUI(const CDebuggerUI&); // Disable copy constructor CDebuggerUI& operator=(const CDebuggerUI&); // Disable assignment - CDumpMemory * m_MemoryDump; - CDebugMemoryView * m_MemoryView; - CDebugMemorySearch * m_MemorySearch; - CDebugTlb * m_DebugTLB; - CDebugCommandsView * m_CommandsView; - CDebugScripts * m_Scripts; - CDebugSymbols * m_Symbols; - CDebugDMALogView * m_DMALogView; - CDebugCPULogView * m_CPULogView; - CDebugStackTrace * m_StackTrace; - CDebugStackView * m_StackView; + CDumpMemory * m_MemoryDump; + CDebugMemoryView * m_MemoryView; + CDebugMemorySearch * m_MemorySearch; + CDebugTlb * m_DebugTLB; + CDebugCommandsView * m_CommandsView; + CDebugScripts * m_Scripts; + CDebugSymbols * m_Symbols; + CDebugDMALogView * m_DMALogView; + CDebugCPULogView * m_CPULogView; + CDebugStackTrace * m_StackTrace; + CDebugStackView * m_StackView; + CDebugExcBreakpoints * m_ExcBreakpoints; CBreakpoints * m_Breakpoints; CScriptSystem * m_ScriptSystem; diff --git a/Source/Project64/UserInterface/MainMenu.cpp b/Source/Project64/UserInterface/MainMenu.cpp index 847d836db..52414d830 100644 --- a/Source/Project64/UserInterface/MainMenu.cpp +++ b/Source/Project64/UserInterface/MainMenu.cpp @@ -514,6 +514,7 @@ bool CMainMenu::ProcessMessage(HWND hWnd, DWORD /*FromAccelerator*/, DWORD MenuI case ID_DEBUGGER_SYMBOLS: g_Debugger->OpenSymbolsWindow(); break; case ID_DEBUGGER_DMALOG: g_Debugger->OpenDMALogWindow(); break; case ID_DEBUGGER_CPULOG: g_Debugger->OpenCPULogWindow(); break; + case ID_DEBUGGER_EXCBREAKPOINTS: g_Debugger->OpenExcBreakpointsWindow(); break; case ID_DEBUGGER_STACKTRACE: g_Debugger->OpenStackTraceWindow(); break; case ID_DEBUGGER_STACKVIEW: g_Debugger->OpenStackViewWindow(); break; case ID_CURRENT_SAVE_DEFAULT: @@ -1132,6 +1133,12 @@ void CMainMenu::FillOutMenu(HMENU hMenu) //Item.SetItemEnabled(CPURunning); DebugMenu.push_back(Item); + /* Debug - Exception breakpoints + *******************/ + Item.Reset(ID_DEBUGGER_EXCBREAKPOINTS, EMPTY_STRING, EMPTY_STDSTR, NULL, L"CPU Exception breakpoints..."); + //Item.SetItemEnabled(CPURunning); + DebugMenu.push_back(Item); + /* Debugger - Symbols ****************/ Item.Reset(ID_DEBUGGER_SYMBOLS, EMPTY_STRING, EMPTY_STDSTR, NULL, L"Symbols..."); diff --git a/Source/Project64/UserInterface/MainMenu.h b/Source/Project64/UserInterface/MainMenu.h index 2aef9bdb7..8490b4492 100644 --- a/Source/Project64/UserInterface/MainMenu.h +++ b/Source/Project64/UserInterface/MainMenu.h @@ -40,7 +40,7 @@ enum MainMenuID ID_DEBUGGER_TLBENTRIES, ID_DEBUGGER_BREAKPOINTS, ID_DEBUGGER_MEMORY, ID_DEBUGGER_R4300REGISTERS, ID_DEBUGGER_INTERRUPT_SP, ID_DEBUGGER_INTERRUPT_SI, ID_DEBUGGER_INTERRUPT_AI, ID_DEBUGGER_INTERRUPT_VI, ID_DEBUGGER_INTERRUPT_PI, ID_DEBUGGER_INTERRUPT_DP, ID_DEBUGGER_SCRIPTS, ID_DEBUGGER_SYMBOLS, ID_DEBUGGER_DMALOG, - ID_DEBUGGER_CPULOG, ID_DEBUGGER_STACKTRACE, ID_DEBUGGER_STACKVIEW, ID_DEBUG_ENANCEMENT, + ID_DEBUGGER_EXCBREAKPOINTS, ID_DEBUGGER_CPULOG, ID_DEBUGGER_STACKTRACE, ID_DEBUGGER_STACKVIEW, ID_DEBUG_ENANCEMENT, // App logging ID_DEBUGGER_APPLOG_FLUSH, ID_DEBUGGER_TRACE_MD5, ID_DEBUGGER_TRACE_SETTINGS, ID_DEBUGGER_TRACE_UNKNOWN, ID_DEBUGGER_TRACE_APPINIT, diff --git a/Source/Project64/UserInterface/UIResources.rc b/Source/Project64/UserInterface/UIResources.rc index b8e2ad67c..e5f967651 100644 --- a/Source/Project64/UserInterface/UIResources.rc +++ b/Source/Project64/UserInterface/UIResources.rc @@ -1319,6 +1319,30 @@ BEGIN PUSHBUTTON "Export",IDC_BTN_EXPORT,360,7,56,13 END +IDD_Debugger_ExceptionBP DIALOGEX 0, 0, 213, 107 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "CPU Exception Breakpoints" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "Interrupt",IDC_CHK_INT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,8,78,11 + CONTROL "TLB Mod",IDC_CHK_MOD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,18,78,11 + CONTROL "Read TLB Miss",IDC_CHK_RMISS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,28,80,11 + CONTROL "Write TLB Miss",IDC_CHK_WMISS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,38,80,11 + CONTROL "Read Address Error",IDC_CHK_RADE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,48,76,11 + CONTROL "Write Address Error",IDC_CHK_WADE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,58,78,11 + CONTROL "Instruction Bus Error",IDC_CHK_IBE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,68,79,11 + CONTROL "Data Bus Error",IDC_CHK_DBE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,78,59,11 + CONTROL "SYSCALL",IDC_CHK_SYSCALL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,88,59,11 + CONTROL "BREAK",IDC_CHK_BREAK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,96,8,59,11 + CONTROL "Illegal Instruction",IDC_CHK_II,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,96,18,71,11 + CONTROL "Coprocessor Unusable",IDC_CHK_CPU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,96,28,86,11 + CONTROL "Overflow",IDC_CHK_OV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,96,38,59,11 + CONTROL "Trap exception",IDC_CHK_TRAP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,96,48,59,11 + CONTROL "Virt. Coherency on Inst. fetch",IDC_CHK_VCEI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,96,58,107,11 + CONTROL "Floating Point Exception",IDC_CHK_FPE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,96,68,91,11 + CONTROL "Watchpoint reference",IDC_CHK_WATCH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,96,78,87,11 + CONTROL "Virt. Coherency on data read",IDC_CHK_VCED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,96,88,106,11 +END ///////////////////////////////////////////////////////////////////////////// // @@ -1765,6 +1789,14 @@ BEGIN TOPMARGIN, 7 BOTTOMMARGIN, 260 END + + IDD_Debugger_ExceptionBP, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 206 + TOPMARGIN, 7 + BOTTOMMARGIN, 100 + END END #endif // APSTUDIO_INVOKED @@ -1991,6 +2023,15 @@ BEGIN 0 END +IDD_Debugger_RegCOP0 AFX_DIALOG_LAYOUT +BEGIN + 0 +END + +IDD_Debugger_ExceptionBP AFX_DIALOG_LAYOUT +BEGIN + 0 +END ///////////////////////////////////////////////////////////////////////////// // diff --git a/Source/Project64/UserInterface/resource.h b/Source/Project64/UserInterface/resource.h index 47222aa27..96194cb85 100644 --- a/Source/Project64/UserInterface/resource.h +++ b/Source/Project64/UserInterface/resource.h @@ -81,7 +81,8 @@ #define IDD_Enhancement_Config 202 #define IDD_Enhancement_Edit 203 #define IDD_Debugger_CPULog 204 -#define VERSION_BUILD 781 +#define IDD_Debugger_ExceptionBP 207 +#define VERSION_BUILD 816 #define IDC_MENU_ITEM_TEXT 1000 #define IDC_CLOSE_BUTTON 1001 #define IDC_LIST2 1003 @@ -623,6 +624,25 @@ #define IDC_BUFFSIZE_EDIT 1457 #define IDC_REGSTATES_GRP 1458 #define IDC_BTN_EXPORT 1461 +#define IDC_CHK_INT 1462 +#define IDC_CHK_MOD 1463 +#define IDC_CHK_RMISS 1464 +#define IDC_CHK_WMISS 1465 +#define IDC_CHK_RADE 1466 +#define IDC_CHK_WADE 1467 +#define IDC_CHECK7 1468 +#define IDC_CHK_IBE 1468 +#define IDC_CHK_DBE 1469 +#define IDC_CHK_SYSCALL 1470 +#define IDC_CHK_BREAK 1471 +#define IDC_CHK_II 1472 +#define IDC_CHK_CPU 1473 +#define IDC_CHK_OV 1474 +#define IDC_CHK_TRAP 1475 +#define IDC_CHK_VCEI 1476 +#define IDC_CHK_FPE 1477 +#define IDC_CHK_WATCH 1478 +#define IDC_CHK_VCED 1479 #define ID_POPUP_SHOWINMEMORYVIEWER 40005 #define ID_POPUPMENU_PLAYGAMEWITHDISK 40008 #define ID_POPUPMENU_ADDSYMBOL 40013 @@ -660,9 +680,9 @@ // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 206 +#define _APS_NEXT_RESOURCE_VALUE 209 #define _APS_NEXT_COMMAND_VALUE 40043 -#define _APS_NEXT_CONTROL_VALUE 1462 +#define _APS_NEXT_CONTROL_VALUE 1480 #define _APS_NEXT_SYMED_VALUE 102 #endif #endif