Added a few hooks for break on cycles, instructions and bad opcode checkboxes. Still TODO add break cycle/instruction limit set logic.

This commit is contained in:
Matthew Budd 2020-05-25 20:28:42 -04:00
parent 41e1bdc592
commit 20af463419
1 changed files with 53 additions and 7 deletions

View File

@ -38,6 +38,7 @@
extern Config *g_config;
static void updateAllDebugWindows(void);
//*******************************************************************************************************
// Debugger Window
//*******************************************************************************************************
@ -107,6 +108,9 @@ struct debuggerWin_t
GtkWidget *cpu_radio_btn;
GtkWidget *ppu_radio_btn;
GtkWidget *sprite_radio_btn;
GtkWidget *badop_chkbox;
GtkWidget *brkcycles_chkbox;
GtkWidget *brkinstrs_chkbox;
int dialog_op;
int bpEditIdx;
@ -153,6 +157,9 @@ struct debuggerWin_t
P_I_chkbox = NULL;
P_Z_chkbox = NULL;
P_C_chkbox = NULL;
badop_chkbox = NULL;
brkcycles_chkbox = NULL;
brkinstrs_chkbox = NULL;
dialog_op = 0;
bpEditIdx = -1;
ctx_menu_addr = 0;
@ -380,6 +387,10 @@ void debuggerWin_t::updateRegisterView(void)
sprintf(stmp, "(+%llu)", delta_instructions);
gtk_label_set_text( GTK_LABEL(instr_label2), stmp );
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(badop_chkbox ), FCEUI_Debugger().badopbreak );
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(brkcycles_chkbox), break_on_cycles );
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(brkinstrs_chkbox), break_on_instructions );
}
// This function is for "smart" scrolling...
@ -1153,6 +1164,34 @@ textview_button_press_cb (GtkWidget *widget,
return ret;
}
static void resetCountersCB( GtkWidget *button, debuggerWin_t * dw)
{
ResetDebugStatisticsCounters();
updateAllDebugWindows();
}
static void breakOnBadOpcodeCB( GtkToggleButton *togglebutton, debuggerWin_t * dw)
{
FCEUI_Debugger().badopbreak = !FCEUI_Debugger().badopbreak;
updateAllDebugWindows();
}
static void breakOnCyclesCB( GtkToggleButton *togglebutton, debuggerWin_t * dw)
{
break_on_cycles = !break_on_cycles;
updateAllDebugWindows();
}
static void breakOnInstructionsCB( GtkToggleButton *togglebutton, debuggerWin_t * dw)
{
break_on_instructions = !break_on_instructions;
updateAllDebugWindows();
}
static void romOffsetToggleCB( GtkToggleButton *togglebutton, debuggerWin_t * dw)
{
dw->displayROMoffsets = gtk_toggle_button_get_active( togglebutton );
@ -1530,9 +1569,10 @@ void openDebuggerWindow (void)
gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
button = gtk_check_button_new_with_label("Break on Bad Opcodes");
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 1);
dw->badop_chkbox = gtk_check_button_new_with_label("Break on Bad Opcodes");
g_signal_connect (dw->badop_chkbox, "toggled",
G_CALLBACK (breakOnBadOpcodeCB), dw);
gtk_box_pack_start (GTK_BOX (vbox), dw->badop_chkbox, FALSE, FALSE, 1);
// Status Flags Frame
frame = gtk_frame_new ("Status Flags");
@ -1623,13 +1663,17 @@ void openDebuggerWindow (void)
gtk_grid_attach( GTK_GRID(grid), dw->instr_label1, 1, 2, 1, 1 );
gtk_grid_attach( GTK_GRID(grid), dw->instr_label2, 2, 2, 1, 1 );
button = gtk_check_button_new_with_label("Break when exceed");
gtk_grid_attach( GTK_GRID(grid), button, 1, 1, 1, 1 );
dw->brkcycles_chkbox = gtk_check_button_new_with_label("Break when exceed");
g_signal_connect (dw->brkcycles_chkbox, "toggled",
G_CALLBACK (breakOnCyclesCB), dw);
gtk_grid_attach( GTK_GRID(grid), dw->brkcycles_chkbox, 1, 1, 1, 1 );
entry = gtk_entry_new ();
gtk_grid_attach( GTK_GRID(grid), entry, 2, 1, 1, 1 );
button = gtk_check_button_new_with_label("Break when exceed");
gtk_grid_attach( GTK_GRID(grid), button, 1, 3, 1, 1 );
dw->brkinstrs_chkbox = gtk_check_button_new_with_label("Break when exceed");
g_signal_connect (dw->brkinstrs_chkbox, "toggled",
G_CALLBACK (breakOnInstructionsCB), dw);
gtk_grid_attach( GTK_GRID(grid), dw->brkinstrs_chkbox, 1, 3, 1, 1 );
entry = gtk_entry_new ();
gtk_grid_attach( GTK_GRID(grid), entry, 2, 3, 1, 1 );
@ -1688,6 +1732,8 @@ void openDebuggerWindow (void)
gtk_box_pack_start (GTK_BOX (hbox2), vbox, FALSE, FALSE, 2);
button = gtk_button_new_with_label ("Reset Counters");
g_signal_connect (button, "clicked",
G_CALLBACK (resetCountersCB), dw);
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 2);
button = gtk_check_button_new_with_label("ROM Offsets");
g_signal_connect (button, "toggled",