Merge pull request #1643 from shygoo/exc-bp-intr-float

[Debugger] Add breakpoints for specific interrupts and FP exceptions
This commit is contained in:
zilmar 2019-08-21 09:28:48 +09:30 committed by GitHub
commit 95a0659e8d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 256 additions and 59 deletions

View File

@ -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));

View File

@ -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);
}

View File

@ -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;

View File

@ -260,6 +260,9 @@ enum SettingID
Debugger_CPULoggingEnabled,
Debugger_CPULogBufferSize,
Debugger_ExceptionBreakpoints,
Debugger_FpExceptionBreakpoints,
Debugger_IntrBreakpoints,
Debugger_RcpIntrBreakpoints,
//Trace
Debugger_TraceMD5,

View File

@ -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<CDebugExcBreakpoints>(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);
}
}

View File

@ -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);

View File

@ -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();
}
}
}

View File

@ -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

View File

@ -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