From 2137b365bbb0d7274b6189dbbbddc21818e95683 Mon Sep 17 00:00:00 2001 From: shygoo Date: Tue, 20 Aug 2019 17:20:49 -0500 Subject: [PATCH] [Debugger] Add breakpoints for specific interrupts and FP exceptions --- Source/Project64-core/Settings.cpp | 3 + .../Project64-core/Settings/DebugSettings.cpp | 12 ++ .../Project64-core/Settings/DebugSettings.h | 6 + Source/Project64-core/Settings/SettingsID.h | 3 + .../Debugger-ExceptionBreakpoints.cpp | 139 ++++++++++++++---- .../Debugger/Debugger-ExceptionBreakpoints.h | 7 + .../UserInterface/Debugger/Debugger.cpp | 56 ++++++- Source/Project64/UserInterface/UIResources.rc | 67 ++++++--- Source/Project64/UserInterface/resource.h | 22 ++- 9 files changed, 256 insertions(+), 59 deletions(-) diff --git a/Source/Project64-core/Settings.cpp b/Source/Project64-core/Settings.cpp index 74226bd3f..ace544033 100644 --- a/Source/Project64-core/Settings.cpp +++ b/Source/Project64-core/Settings.cpp @@ -350,6 +350,9 @@ void CSettings::AddHowToHandleSetting(const char * BaseDirectory) 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_FpExceptionBreakpoints, new CSettingTypeApplication("Debugger", "FP Exception Breakpoints", (uint32_t)0)); + AddHandler(Debugger_IntrBreakpoints, new CSettingTypeApplication("Debugger", "Interrupt Breakpoints", (uint32_t)0)); + AddHandler(Debugger_RcpIntrBreakpoints, new CSettingTypeApplication("Debugger", "RCP Interrupt 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 824577dcc..78a274436 100644 --- a/Source/Project64-core/Settings/DebugSettings.cpp +++ b/Source/Project64-core/Settings/DebugSettings.cpp @@ -30,6 +30,9 @@ bool CDebugSettings::m_HaveReadBP = false; bool CDebugSettings::m_bShowPifRamErrors = false; bool CDebugSettings::m_bCPULoggingEnabled = false; uint32_t CDebugSettings::m_ExceptionBreakpoints = 0; +uint32_t CDebugSettings::m_FpExceptionBreakpoints = 0; +uint32_t CDebugSettings::m_IntrBreakpoints = 0; +uint32_t CDebugSettings::m_RcpIntrBreakpoints = 0; CDebugSettings::CDebugSettings() { @@ -51,6 +54,9 @@ CDebugSettings::CDebugSettings() 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); + g_Settings->RegisterChangeCB(Debugger_FpExceptionBreakpoints, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); + g_Settings->RegisterChangeCB(Debugger_IntrBreakpoints, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); + g_Settings->RegisterChangeCB(Debugger_RcpIntrBreakpoints, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); RefreshSettings(); } @@ -74,6 +80,9 @@ CDebugSettings::~CDebugSettings() 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); + g_Settings->UnregisterChangeCB(Debugger_FpExceptionBreakpoints, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); + g_Settings->UnregisterChangeCB(Debugger_IntrBreakpoints, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); + g_Settings->UnregisterChangeCB(Debugger_RcpIntrBreakpoints, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); } } @@ -93,6 +102,9 @@ void CDebugSettings::RefreshSettings() 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_FpExceptionBreakpoints = m_HaveDebugger ? g_Settings->LoadDword(Debugger_FpExceptionBreakpoints) : 0; + m_IntrBreakpoints = m_HaveDebugger ? g_Settings->LoadDword(Debugger_IntrBreakpoints) : 0; + m_RcpIntrBreakpoints = m_HaveDebugger ? g_Settings->LoadDword(Debugger_RcpIntrBreakpoints) : 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 dc925db35..36f98ab5d 100644 --- a/Source/Project64-core/Settings/DebugSettings.h +++ b/Source/Project64-core/Settings/DebugSettings.h @@ -33,6 +33,9 @@ public: 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; } + static inline uint32_t FpExceptionBreakpoints(void) { return m_FpExceptionBreakpoints; } + static inline uint32_t IntrBreakpoints(void) { return m_IntrBreakpoints; } + static inline uint32_t RcpIntrBreakpoints(void) { return m_RcpIntrBreakpoints; } private: static void StaticRefreshSettings(CDebugSettings * _this) @@ -57,6 +60,9 @@ private: static bool m_bShowPifRamErrors; static bool m_bCPULoggingEnabled; static uint32_t m_ExceptionBreakpoints; + static uint32_t m_FpExceptionBreakpoints; + static uint32_t m_IntrBreakpoints; + static uint32_t m_RcpIntrBreakpoints; 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 d772d980b..b2fc3dd65 100644 --- a/Source/Project64-core/Settings/SettingsID.h +++ b/Source/Project64-core/Settings/SettingsID.h @@ -260,6 +260,9 @@ enum SettingID Debugger_CPULoggingEnabled, Debugger_CPULogBufferSize, Debugger_ExceptionBreakpoints, + Debugger_FpExceptionBreakpoints, + Debugger_IntrBreakpoints, + Debugger_RcpIntrBreakpoints, //Trace Debugger_TraceMD5, diff --git a/Source/Project64/UserInterface/Debugger/Debugger-ExceptionBreakpoints.cpp b/Source/Project64/UserInterface/Debugger/Debugger-ExceptionBreakpoints.cpp index e396294ac..f72ac24b4 100644 --- a/Source/Project64/UserInterface/Debugger/Debugger-ExceptionBreakpoints.cpp +++ b/Source/Project64/UserInterface/Debugger/Debugger-ExceptionBreakpoints.cpp @@ -23,6 +23,38 @@ CDebugExcBreakpoints::ExcCheckboxMeta CDebugExcBreakpoints::ExcCheckboxMap[] = { { 0, 0 } }; +CDebugExcBreakpoints::ExcCheckboxMeta CDebugExcBreakpoints::FpExcCheckboxMap[] = { + { IDC_CHK_FP_CI, (1 << 0) }, + { IDC_CHK_FP_CU, (1 << 1) }, + { IDC_CHK_FP_CO, (1 << 2) }, + { IDC_CHK_FP_CZ, (1 << 3) }, + { IDC_CHK_FP_CV, (1 << 4) }, + { IDC_CHK_FP_CE, (1 << 5) }, + { 0, 0 } +}; + +CDebugExcBreakpoints::ExcCheckboxMeta CDebugExcBreakpoints::IntrCheckboxMap[] = { + { IDC_CHK_INTR_IP0, (1 << 0) }, + { IDC_CHK_INTR_IP1, (1 << 1) }, + { IDC_CHK_INTR_IP2, (1 << 2) }, + { IDC_CHK_INTR_IP3, (1 << 3) }, + { IDC_CHK_INTR_IP4, (1 << 4) }, + { IDC_CHK_INTR_IP5, (1 << 5) }, + { IDC_CHK_INTR_IP6, (1 << 6) }, + { IDC_CHK_INTR_IP7, (1 << 7) }, + { 0, 0 } +}; + +CDebugExcBreakpoints::ExcCheckboxMeta CDebugExcBreakpoints::RcpIntrCheckboxMap[] = { + { IDC_CHK_INTR_SP, (1 << 0) }, + { IDC_CHK_INTR_SI, (1 << 1) }, + { IDC_CHK_INTR_AI, (1 << 2) }, + { IDC_CHK_INTR_VI, (1 << 3) }, + { IDC_CHK_INTR_PI, (1 << 4) }, + { IDC_CHK_INTR_DP, (1 << 5) }, + { 0, 0 } +}; + CDebugExcBreakpoints::CDebugExcBreakpoints(CDebuggerUI* debugger) : CDebugDialog(debugger) { @@ -36,17 +68,18 @@ LRESULT CDebugExcBreakpoints::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPA { DlgSavePos_Init(DebuggerUI_ExceptionBPPos); - uint32_t excBreakpoints = g_Settings->LoadDword(Debugger_ExceptionBreakpoints); + InitCheckboxes(ExcCheckboxMap, Debugger_ExceptionBreakpoints, true); + InitCheckboxes(FpExcCheckboxMap, Debugger_FpExceptionBreakpoints); + InitCheckboxes(IntrCheckboxMap, Debugger_IntrBreakpoints); + InitCheckboxes(RcpIntrCheckboxMap, Debugger_RcpIntrBreakpoints); - for (int i = 0; ExcCheckboxMap[i].ctrlId != 0; i++) - { - uint32_t excBit = (1 << ExcCheckboxMap[i].exc); + bool intrEnabled = g_Settings->LoadDword(Debugger_ExceptionBreakpoints) & 0x01; + bool rcpIntrEnabled = g_Settings->LoadDword(Debugger_IntrBreakpoints) & 0x04; + bool fpExcEnabled = g_Settings->LoadDword(Debugger_ExceptionBreakpoints) & (1 << 15); - if (excBreakpoints & excBit) - { - SendDlgItemMessage(ExcCheckboxMap[i].ctrlId, BM_SETCHECK, BST_CHECKED, 0); - } - } + EnableCheckboxes(IntrCheckboxMap, intrEnabled); + EnableCheckboxes(RcpIntrCheckboxMap, intrEnabled && rcpIntrEnabled); + EnableCheckboxes(FpExcCheckboxMap, fpExcEnabled); LoadWindowPos(); WindowCreated(); @@ -58,7 +91,6 @@ LRESULT CDebugExcBreakpoints::OnDestroy(void) return 0; } - LRESULT CDebugExcBreakpoints::OnClicked(WORD /*wNotifyCode*/, WORD wID, HWND, BOOL& /*bHandled*/) { switch (wID) @@ -69,27 +101,29 @@ LRESULT CDebugExcBreakpoints::OnClicked(WORD /*wNotifyCode*/, WORD wID, HWND, BO return FALSE; } - for (int i = 0; ExcCheckboxMap[i].ctrlId != 0; i++) + bool bChecked = (SendMessage(GetDlgItem(wID), BM_GETSTATE, 0, 0) & BST_CHECKED) != 0; + + if (wID == IDC_CHK_INT) { - 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; - } + EnableCheckboxes(IntrCheckboxMap, bChecked); + bool toggleRcpIntr = bChecked && (g_Settings->LoadDword(Debugger_IntrBreakpoints) & 0x04); + EnableCheckboxes(RcpIntrCheckboxMap, toggleRcpIntr); } + + if (wID == IDC_CHK_FPE) + { + EnableCheckboxes(FpExcCheckboxMap, bChecked); + } + + if (wID == IDC_CHK_INTR_IP2) + { + EnableCheckboxes(RcpIntrCheckboxMap, bChecked); + } + + UpdateBpSetting(ExcCheckboxMap, Debugger_ExceptionBreakpoints, wID, bChecked, true); + UpdateBpSetting(FpExcCheckboxMap, Debugger_FpExceptionBreakpoints, wID, bChecked); + UpdateBpSetting(IntrCheckboxMap, Debugger_IntrBreakpoints, wID, bChecked); + UpdateBpSetting(RcpIntrCheckboxMap, Debugger_RcpIntrBreakpoints, wID, bChecked); return FALSE; } @@ -98,3 +132,50 @@ void CDebugExcBreakpoints::OnExitSizeMove(void) { SaveWindowPos(0); } + +void CDebugExcBreakpoints::InitCheckboxes(ExcCheckboxMeta* checkboxMap, SettingID settingID, bool bShift) +{ + uint32_t excBits = g_Settings->LoadDword(settingID); + + for (int i = 0; checkboxMap[i].ctrlId != 0; i++) + { + uint32_t excBit = bShift ? (1 << checkboxMap[i].exc) : checkboxMap[i].exc; + + if (excBits & excBit) + { + SendDlgItemMessage(checkboxMap[i].ctrlId, BM_SETCHECK, BST_CHECKED, 0); + } + } +} + +void CDebugExcBreakpoints::UpdateBpSetting(ExcCheckboxMeta* checkboxMap, SettingID settingID, WORD wID, bool bChecked, bool bShift) +{ + for (int i = 0; checkboxMap[i].ctrlId != 0; i++) + { + if (checkboxMap[i].ctrlId == wID) + { + uint32_t excBit = bShift ? (1 << checkboxMap[i].exc) : checkboxMap[i].exc; + uint32_t bits = g_Settings->LoadDword(settingID); + + if (bChecked) + { + bits |= excBit; + } + else + { + bits &= ~excBit; + } + + g_Settings->SaveDword(settingID, bits); + return; + } + } +} + +void CDebugExcBreakpoints::EnableCheckboxes(ExcCheckboxMeta* checkboxMap, bool bEnable) +{ + for (int i = 0; checkboxMap[i].ctrlId != 0; i++) + { + ::EnableWindow(GetDlgItem(checkboxMap[i].ctrlId), bEnable); + } +} \ No newline at end of file diff --git a/Source/Project64/UserInterface/Debugger/Debugger-ExceptionBreakpoints.h b/Source/Project64/UserInterface/Debugger/Debugger-ExceptionBreakpoints.h index e8fc387cd..66b820b5a 100644 --- a/Source/Project64/UserInterface/Debugger/Debugger-ExceptionBreakpoints.h +++ b/Source/Project64/UserInterface/Debugger/Debugger-ExceptionBreakpoints.h @@ -21,6 +21,13 @@ public: private: static ExcCheckboxMeta ExcCheckboxMap[]; + static ExcCheckboxMeta FpExcCheckboxMap[]; + static ExcCheckboxMeta IntrCheckboxMap[]; + static ExcCheckboxMeta RcpIntrCheckboxMap[]; + + void InitCheckboxes(ExcCheckboxMeta* checkboxMap, SettingID settingID, bool bShift = false); + void UpdateBpSetting(ExcCheckboxMeta* checkboxMap, SettingID settingID, WORD wID, bool bChecked, bool bShift = false); + void EnableCheckboxes(ExcCheckboxMeta* checkboxMap, bool bEnable); LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/); LRESULT OnClicked(WORD wNotifyCode, WORD wID, HWND /*hWndCtl*/, BOOL& bHandled); diff --git a/Source/Project64/UserInterface/Debugger/Debugger.cpp b/Source/Project64/UserInterface/Debugger/Debugger.cpp index 1321a174b..37889575e 100644 --- a/Source/Project64/UserInterface/Debugger/Debugger.cpp +++ b/Source/Project64/UserInterface/Debugger/Debugger.cpp @@ -655,21 +655,58 @@ void CDebuggerUI::TLBChanged() Debug_RefreshTLBWindow(); } - // Exception handling - break on exception vector if exception bp is set void CDebuggerUI::HandleCPUException(void) { int exc = (g_Reg->CAUSE_REGISTER >> 2) & 0x1F; - - if ((CDebugSettings::ExceptionBreakpoints() & (1 << exc))) + int intr = (g_Reg->CAUSE_REGISTER >> 8) & 0xFF; + int fpExc = (g_Reg->m_FPCR[31] >> 12) & 0x3F; + int rcpIntr = g_Reg->MI_INTR_REG & 0x2F; + + if ((ExceptionBreakpoints() & (1 << exc))) { - if (CDebugSettings::bCPULoggingEnabled()) + if (exc == 15) // floating-point exception { - g_Debugger->OpenCPULogWindow(); + if (fpExc & FpExceptionBreakpoints()) + { + goto have_bp; + } + return; + } + else if (exc == 0) // interrupt exception + { + if (intr & IntrBreakpoints()) + { + if (intr & 0x04) // RCP interrupt (IP2) + { + if (rcpIntr & RcpIntrBreakpoints()) + { + goto have_bp; + } + return; + } + else // other interrupts + { + goto have_bp; + } + } + return; + } + else // other exceptions + { + goto have_bp; } - - g_Settings->SaveBool(Debugger_SteppingOps, true); } + + return; + +have_bp: + if (bCPULoggingEnabled()) + { + g_Debugger->OpenCPULogWindow(); + } + + g_Settings->SaveBool(Debugger_SteppingOps, true); } void CDebuggerUI::HandleCartToRamDMA(void) @@ -749,7 +786,10 @@ void CDebuggerUI::CPUStepStarted() if (pc == 0x80000000 || pc == 0x80000080 || pc == 0xA0000100 || pc == 0x80000180) { - HandleCPUException(); + if ((g_Reg->STATUS_REGISTER >> 1) & 3) // if exl/erl bits are set + { + HandleCPUException(); + } } } diff --git a/Source/Project64/UserInterface/UIResources.rc b/Source/Project64/UserInterface/UIResources.rc index 37a8e3f09..4d6279385 100644 --- a/Source/Project64/UserInterface/UIResources.rc +++ b/Source/Project64/UserInterface/UIResources.rc @@ -1329,29 +1329,54 @@ BEGIN PUSHBUTTON "Cancel",IDCANCEL,65,114,50,14 END -IDD_Debugger_ExceptionBP DIALOGEX 0, 0, 213, 107 +IDD_Debugger_ExceptionBP DIALOGEX 0, 0, 269, 221 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | 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 + CONTROL "Interrupt",IDC_CHK_INT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,15,78,11 + CONTROL "TLB Mod",IDC_CHK_MOD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,25,78,11 + CONTROL "Read TLB Miss",IDC_CHK_RMISS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,35,80,11 + CONTROL "Write TLB Miss",IDC_CHK_WMISS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,45,80,11 + CONTROL "Read Address Error",IDC_CHK_RADE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,55,76,11 + CONTROL "Write Address Error",IDC_CHK_WADE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,78,11 + CONTROL "Instruction Bus Error",IDC_CHK_IBE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,75,79,11 + CONTROL "Data Bus Error",IDC_CHK_DBE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,85,59,11 + CONTROL "SYSCALL",IDC_CHK_SYSCALL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,95,59,11 + CONTROL "BREAK",IDC_CHK_BREAK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,119,15,59,11 + CONTROL "Illegal Instruction",IDC_CHK_II,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,119,25,71,11 + CONTROL "Coprocessor Unusable",IDC_CHK_CPU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,119,35,86,11 + CONTROL "Overflow",IDC_CHK_OV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,119,45,59,11 + CONTROL "Trap exception",IDC_CHK_TRAP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,119,55,59,11 + CONTROL "Virtual Coherency on Instruction Fetch",IDC_CHK_VCEI, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,119,65,135,11 + CONTROL "Floating Point Exception",IDC_CHK_FPE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,119,75,91,11 + CONTROL "Watchpoint Reference",IDC_CHK_WATCH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,119,85,87,11 + CONTROL "Virtual Coherency on Data Read",IDC_CHK_VCED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,119,95,116,11 + GROUPBOX "Exceptions",IDC_STATIC,3,4,261,107 + GROUPBOX "IP2 Interrupts",IDC_STATIC,199,114,65,102 + CONTROL "SP Interrupt",IDC_CHK_INTR_SP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,124,53,13 + CONTROL "SI Interrupt",IDC_CHK_INTR_SI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,135,53,13 + CONTROL "AI Interrupt",IDC_CHK_INTR_AI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,145,53,13 + CONTROL "VI Interrupt",IDC_CHK_INTR_VI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,156,53,13 + CONTROL "PI Interrupt",IDC_CHK_INTR_PI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,167,53,13 + CONTROL "DP Interrupt",IDC_CHK_INTR_DP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,178,53,13 + GROUPBOX "Interrupts",IDC_STATIC,113,114,83,102 + CONTROL "IP0 Software",IDC_CHK_INTR_IP0,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,119,124,53,13 + CONTROL "IP1 Software",IDC_CHK_INTR_IP1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,119,135,53,13 + CONTROL "IP2 RCP",IDC_CHK_INTR_IP2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,119,145,65,13 + CONTROL "IP3 Cartridge",IDC_CHK_INTR_IP3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,119,156,60,13 + CONTROL "IP4 Pre-NMI",IDC_CHK_INTR_IP4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,119,167,61,13 + CONTROL "IP5 RDB Read",IDC_CHK_INTR_IP5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,119,178,63,13 + CONTROL "IP6 RDB Write",IDC_CHK_INTR_IP6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,119,189,63,13 + CONTROL "IP7 Timer",IDC_CHK_INTR_IP7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,119,200,63,13 + GROUPBOX "Floating Point Exceptions",IDC_STATIC,4,114,106,103 + CONTROL "Unimplemented Operation",IDC_CHK_FP_CE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,178,96,13 + CONTROL "Invalid Operation",IDC_CHK_FP_CV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,167,80,13 + CONTROL "Division by Zero",IDC_CHK_FP_CZ,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,156,80,13 + CONTROL "Overflow",IDC_CHK_FP_CO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,145,80,13 + CONTROL "Underflow",IDC_CHK_FP_CU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,135,80,13 + CONTROL "Inexact Operation",IDC_CHK_FP_CI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,124,80,13 END IDD_Debugger_Search_SetValue DIALOGEX 0, 0, 109, 56 @@ -1837,9 +1862,9 @@ BEGIN IDD_Debugger_ExceptionBP, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 206 + RIGHTMARGIN, 262 TOPMARGIN, 7 - BOTTOMMARGIN, 100 + BOTTOMMARGIN, 214 END IDD_Debugger_Search_SetValue, DIALOG diff --git a/Source/Project64/UserInterface/resource.h b/Source/Project64/UserInterface/resource.h index fbc5ac4d2..485079027 100644 --- a/Source/Project64/UserInterface/resource.h +++ b/Source/Project64/UserInterface/resource.h @@ -697,6 +697,26 @@ #define IDC_IPLDIR_TL_TXT 1546 #define IDC_DISKSAVETYPE_TXT 1547 #define IDC_DISKSAVETYPE 1548 +#define IDC_CHK_INTR_SP 1549 +#define IDC_CHK_INTR_SI 1550 +#define IDC_CHK_INTR_AI 1551 +#define IDC_CHK_INTR_VI 1552 +#define IDC_CHK_INTR_PI 1553 +#define IDC_CHK_INTR_DP 1554 +#define IDC_CHK_INTR_IP0 1555 +#define IDC_CHK_INTR_IP1 1556 +#define IDC_CHK_INTR_IP2 1557 +#define IDC_CHK_INTR_IP3 1558 +#define IDC_CHK_INTR_IP4 1559 +#define IDC_CHK_INTR_IP5 1560 +#define IDC_CHK_INTR_IP6 1561 +#define IDC_CHK_INTR_IP7 1562 +#define IDC_CHK_FP_CE 1563 +#define IDC_CHK_FP_CV 1564 +#define IDC_CHK_FP_CZ 1565 +#define IDC_CHK_FP_CO 1566 +#define IDC_CHK_FP_CU 1567 +#define IDC_CHK_FP_CI 1568 #define ID_POPUPMENU_PLAYGAMEWITHDISK 40008 #define ID_POPUPMENU_ADDSYMBOL 40013 #define ID_POPUPMENU_VIEWDISASM 40017 @@ -757,7 +777,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 219 #define _APS_NEXT_COMMAND_VALUE 40092 -#define _APS_NEXT_CONTROL_VALUE 1549 +#define _APS_NEXT_CONTROL_VALUE 1569 #define _APS_NEXT_SYMED_VALUE 102 #endif #endif