10
#include "debug_dbox.h"
13
#include "interface.h"
20
#include "pgmentbkpt_dbox.h"
21
#include "pgmentbkpt_cb.h"
22
#include "trap_dbox.h"
24
#include "dbgopt_dbox.h"
25
#include "dbgopt_cb.h"
27
#include "dbkpt_dbox.h"
29
#include "bkpt_cause.h"
34
#define DEBUG_LINES 20
37
static GtkWidget *debugger_dbox = NULL;
38
static GtkWidget *code_clist;
39
static GtkWidget *mem_clist;
40
static GtkWidget *stack_clist;
41
static GtkWidget *reg_text;
42
static GtkWidget *statusbar; // statusbar
44
gint refresh_register_dbox();
45
gint refresh_code_dbox();
46
gint refresh_stack_dbox();
47
gint refresh_memory_dbox();
49
gint display_debugger_dbox(void)
54
if(debugger_dbox == NULL)
56
dbox = create_debugger_dbox();
58
user_data = gtk_object_get_data(GTK_OBJECT(dbox), "debugger_dbox");
59
debugger_dbox = GTK_WIDGET(user_data);
61
user_data = gtk_object_get_data(GTK_OBJECT(dbox), "text5");
62
reg_text = GTK_WIDGET(user_data);
64
user_data = gtk_object_get_data(GTK_OBJECT(dbox), "clist1");
65
code_clist = GTK_WIDGET(user_data);
67
user_data = gtk_object_get_data(GTK_OBJECT(dbox), "clist2");
68
mem_clist = GTK_WIDGET(user_data);
70
user_data = gtk_object_get_data(GTK_OBJECT(dbox), "clist3");
71
stack_clist = GTK_WIDGET(user_data);
73
user_data = gtk_object_get_data(GTK_OBJECT(dbox), "statusbar1");
74
statusbar = GTK_WIDGET(user_data);
76
gtk_widget_show_all(dbox);
83
refresh_memory_dbox();
85
refresh_register_dbox();
91
/* Local persistant variables */
92
GtkWidget *data_bkpt_dbox = NULL;
93
gint data_bkpt_selected_row = -1;
94
gint bkpt_encountered = 0;
95
gint data_addr = 0x000000;
96
gint selected_row = -1;
98
/* Some linked-list for breakpoints */
99
GList *bkpt_address_list = NULL;
100
GList *bkpt_access_list = NULL;
101
GList *bkpt_vector_list = NULL;
102
GList *bkpt_trap_list = NULL;
109
static int put_in_sb(gchar *s)
113
id = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), s);
114
gtk_statusbar_push(GTK_STATUSBAR(statusbar), id, s);
121
Called when the Debuger dbox is displayed
124
on_debugger_dbox_show (GtkWidget *widget,
131
Called when the Debugger Dbox is destroyed
134
on_debugger_dbox_destroy (GtkObject *object,
140
// The debugger dbox is not active any longer
142
debugger_dbox = NULL;
144
// Restore breakpoints
145
// Bkpts are removed when the debugger is launched so
146
// that we can 'single step'
147
for(i=0; i<g_list_length(bkpt_address_list); i++)
149
s = (CODE_BKPT *)g_list_nth_data(bkpt_address_list, i);
151
ti68k_setBreakpointAddress(s->address);
154
// Emulation core in free running
160
Initialize the 'Registers' box
162
gint refresh_register_dbox()
164
GtkWidget *text = reg_text;
169
gchar buffer[MAXCHARS];
170
static gint prev_Dx[8] = {0, 0, 0, 0, 0, 0, 0, 0};
171
static gint prev_Ax[8] = {0, 0, 0, 0, 0, 0, 0, 0};
172
static gint prev_SP = 0;
173
static gint prev_SR = 0;
174
static gint prev_PC = 0;
177
gtk_editable_delete_text((GtkEditable *)text, 0, -1);
179
cmap = gdk_colormap_get_system();
183
if (!gdk_color_alloc(cmap, &colour))
185
g_error("couldn't allocate colour");
188
//fixed_font = gdk_font_load ("-misc-fixed-medium-r-*-*-*-100-*-*-*-*-*-*");
189
fixed_font = gdk_font_load("-adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1");
191
gtk_widget_realize (text);
192
gtk_text_freeze (GTK_TEXT (text));
194
/* Display the Dx & Ax registers */
197
sprintf(buffer, "D%i=%08X", i, ti68k_getDataRegister(i));
198
if(prev_Dx[i] == ti68k_getDataRegister(i))
199
gtk_text_insert(GTK_TEXT(text), fixed_font, &text->style->black,
202
gtk_text_insert(GTK_TEXT(text), fixed_font, &colour,
205
sprintf(buffer, " ");
206
gtk_text_insert(GTK_TEXT(text), fixed_font, &text->style->black,
209
sprintf(buffer, "A%i=%08X\n", i, ti68k_getAddressRegister(i));
210
if(prev_Ax[i] == ti68k_getAddressRegister(i))
211
gtk_text_insert(GTK_TEXT(text), fixed_font, &text->style->black,
214
gtk_text_insert(GTK_TEXT(text), fixed_font, &colour,
218
gtk_text_insert(GTK_TEXT(text), fixed_font, &text->style->black,
221
/* Display the SP register */
222
sprintf(buffer, "SP=%06X\n", ti68k_getSpRegister());
223
if(prev_SP == ti68k_getSpRegister())
224
gtk_text_insert(GTK_TEXT(text), fixed_font, &text->style->black,
227
gtk_text_insert(GTK_TEXT(text), fixed_font, &colour, NULL, buffer, -1);
229
/* Display the SR register */
230
sprintf(buffer, "SR=%04X ", ti68k_getSrRegister());
231
if(prev_SR == ti68k_getSrRegister())
232
gtk_text_insert(GTK_TEXT(text), fixed_font, &text->style->black,
235
gtk_text_insert(GTK_TEXT(text), fixed_font, &colour, NULL, buffer, -1);
237
/* Display the PC register */
238
sprintf(buffer, "PC=%06X \n", ti68k_getPcRegister());
239
if(prev_PC == ti68k_getPcRegister())
240
gtk_text_insert(GTK_TEXT(text), fixed_font, &text->style->black,
243
gtk_text_insert(GTK_TEXT(text), fixed_font, &colour, NULL, buffer, -1);
245
/* Display the status flag register */
247
sprintf(buffer, "T=%i S=%i M=%i I=%i \n", 0, 0, 0, 0);
248
gtk_text_insert(GTK_TEXT(text), fixed_font, &text->style->black,
251
sprintf(buffer, "X=%i N=%i Z=%i V=%i C=%i\n", 0, 0, 0, 0, 0);
252
gtk_text_insert(GTK_TEXT(text), fixed_font, &text->style->black,
255
gtk_text_insert(GTK_TEXT(text), fixed_font, &text->style->black,
256
NULL, ti68k_getFlagRegister(), -1);
259
gtk_text_thaw (GTK_TEXT (text));
261
/* Store old values for colour display */
264
prev_Dx[i] = ti68k_getDataRegister(i);
265
prev_Ax[i] = ti68k_getAddressRegister(i);
267
prev_SR = ti68k_getSrRegister();
268
prev_SP = ti68k_getSpRegister();
269
prev_PC = ti68k_getPcRegister();
275
Initialize the 'code/disasm' box
278
/* Utility function */
279
gint refresh_breakpoints(GtkWidget *widget)
281
GtkWidget *clist = code_clist;
282
GdkPixmap *pixmap_run;
284
GdkPixmap *pixmap_bkpt;
285
GdkBitmap *mask_bkpt;
286
GdkPixmap *pixmap_void;
287
GdkBitmap *mask_void;
290
gint addr1, addr2, addr;
294
open_xpm("run.xpm", widget, &pixmap_run, &mask_run);
295
open_xpm("bkpt.xpm", widget, &pixmap_bkpt, &mask_bkpt);
296
open_xpm("void.xpm", widget, &pixmap_void, &mask_void);
298
/* Erase pixmaps entries */
299
for(j=0; j<DEBUG_LINES; j++)
301
gtk_clist_set_pixmap((GtkCList *)clist, j, 0,
302
pixmap_void, mask_void);
306
gtk_clist_freeze((GtkCList *)clist);
307
//printf("list length: %i, %p\n", g_list_length(bkpt_address_list), bkpt_address_list);
308
for(i=0; i<g_list_length(bkpt_address_list); i++)
310
s1 = (CODE_BKPT *)g_list_nth_data(bkpt_address_list, i);
312
//printf("Breakpoint to localize at 0x%06x\n", addr1);
314
for(j=0; j<DEBUG_LINES; j++)
316
addr2 = GPOINTER_TO_INT(gtk_clist_get_row_data((GtkCList *)clist,
318
//printf("Address localized: 0x%06x\n", addr2);
322
//printf("Bkpt localized: 0x%06x at clist line %i\n", addr2, j);
323
gtk_clist_set_pixmap((GtkCList *)clist, j, 0,
324
pixmap_bkpt, mask_bkpt);
329
//fprintf(stderr, "<%06X %06X>\n", addr2, getPcRegister());
333
/* Update the run arrow */
334
addr = ti68k_getPcRegister();
335
//fprintf(stdout, "PC in refresh: %06X\n", ti68k_getPcRegister());
336
res = gtk_clist_find_row_from_data((GtkCList *)clist, GINT_TO_POINTER(addr));
337
//fprintf(stdout, "row in refresh: %i\n", res);
340
gtk_clist_set_pixmap((GtkCList *)clist, res, 0, pixmap_run, mask_run);
344
gdk_pixmap_unref(pixmap_run);
345
gdk_pixmap_unref(pixmap_bkpt);
346
gdk_pixmap_unref(pixmap_void);
348
gtk_clist_thaw((GtkCList *)clist);
352
gint refresh_code_dbox()
354
GtkWidget *clist = code_clist;
357
gint addr = ti68k_getPcRegister();
359
gchar buffer[MAXCHARS];
365
/* Check if necessary to refresh the clist box */
368
//fprintf(stderr, "PC: %06X\n", getPcRegister());
369
row = gtk_clist_find_row_from_data((GtkCList *)clist,
370
GINT_TO_POINTER(ti68k_getPcRegister()));
371
//fprintf(stdout, "row: %i\n", row);
373
{ // row not found: address is outside, reload disasm
374
refresh_breakpoints(debugger_dbox);
380
//fixed_font = gdk_font_load ("-misc-fixed-medium-r-*-*-*-100-*-*-*-*-*-*");
381
fixed_font = gdk_font_load("-adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1");
383
style = gtk_style_new();
384
style->font = fixed_font;
385
cw = gdk_char_width(fixed_font, 'A');
387
gtk_clist_set_column_width((GtkCList *)clist, 0, 1*cw);
388
gtk_clist_set_column_width((GtkCList *)clist, 1, 10*cw);
389
gtk_clist_set_column_width((GtkCList *)clist, 2, 24*cw);
392
gtk_clist_freeze((GtkCList *)clist);
393
for(i=0; i<options.code_lines; i++)
394
gtk_clist_remove((GtkCList *)clist, 0);
395
for(i=0; i<3; i++) row_text[i] = NULL;
396
for(i=0; i<options.code_lines; i++)
398
offset = ti68k_disasm(addr, buffer);
399
row_text[1] = g_strdup(buffer);
400
row_text[1][9] = '\0';
401
row_text[2] = g_strdup(buffer+10);
403
gtk_clist_append((GtkCList *)clist, row_text);
404
gtk_clist_set_row_data((GtkCList *)clist, i,
405
GINT_TO_POINTER(addr)); // add addr to clist data
406
//fprintf(stderr, "%i: %06X\n", i, addr);
407
gtk_clist_set_row_style((GtkCList *)clist, i, style);
417
/* Refresh breakpoints */
418
//printf("clist pointer: %p\n", clist);
419
refresh_breakpoints(debugger_dbox);
421
gtk_clist_thaw((GtkCList *)clist);
426
Initialize the 'memory' box
428
gint refresh_memory_dbox()
430
GtkWidget *clist = mem_clist;
437
UBYTE *ti_ram = (UBYTE *)ti68k_getRamPtr();
439
gint addr = data_addr;
441
/* Load the colormap */
442
cmap = gdk_colormap_get_system();
446
if (!gdk_color_alloc(cmap, &colour))
448
g_error("couldn't allocate colour");
452
//fixed_font = gdk_font_load ("-misc-fixed-medium-r-*-*-*-100-*-*-*-*-*-*");
453
fixed_font = gdk_font_load("-adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1");
454
style = gtk_style_new();
455
style->font = fixed_font;
456
//style->text[GTK_STATE_NORMAL] = colour;
457
cw = gdk_char_width(fixed_font, 'A');
459
gtk_clist_set_column_width((GtkCList *)clist, 0, 7*cw);
460
gtk_clist_set_column_width((GtkCList *)clist, 1, 25*cw);
461
gtk_clist_set_column_width((GtkCList *)clist, 2, 9*cw);
464
gtk_clist_freeze((GtkCList *)clist);
465
for(i=0; i<options.mem_lines; i++)
466
gtk_clist_remove((GtkCList *)clist, 0);
469
for(j=0; j<options.mem_lines; j++, addr+=8)
471
row_text[0] = g_strdup_printf("%06X", addr);
472
row_text[1] = g_strdup_printf("%02X %02X %02X %02X %02X %02X %02X %02X ",
473
ti_ram[addr+0], ti_ram[addr+1],
474
ti_ram[addr+2], ti_ram[addr+3],
475
ti_ram[addr+4], ti_ram[addr+5],
476
ti_ram[addr+6], ti_ram[addr+7]);
478
row_text[2] = g_strdup_printf("%c%c%c%c%c%c%c%c",
479
isprint(ti_ram[addr+0]) ? ti_ram[addr+0] : '.',
480
isprint(ti_ram[addr+1]) ? ti_ram[addr+1] : '.',
481
isprint(ti_ram[addr+2]) ? ti_ram[addr+2] : '.',
482
isprint(ti_ram[addr+3]) ? ti_ram[addr+3] : '.',
483
isprint(ti_ram[addr+4]) ? ti_ram[addr+4] : '.',
484
isprint(ti_ram[addr+5]) ? ti_ram[addr+5] : '.',
485
isprint(ti_ram[addr+6]) ? ti_ram[addr+6] : '.',
486
isprint(ti_ram[addr+7]) ? ti_ram[addr+7] : '.');
488
gtk_clist_append((GtkCList *)clist, row_text);
489
gtk_clist_set_row_style((GtkCList *)clist, j, style);
493
//fprintf(stderr, "<%i %p %s>\n", k, row_text[k], row_text[k]); // bug here !!!
498
gtk_clist_thaw((GtkCList *)clist);
503
Initialize the 'stack' box
505
gint refresh_stack_dbox()
507
GtkWidget *clist = stack_clist;
512
gint sp = ti68k_getSpRegister();
513
UWORD *ti_ram = (UWORD *)ti68k_getRamPtr();
518
//fixed_font = gdk_font_load ("-misc-fixed-medium-r-*-*-*-100-*-*-*-*-*-*");
519
fixed_font = gdk_font_load("-adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1");
520
style = gtk_style_new();
521
style->font = fixed_font;
522
cw = gdk_char_width(fixed_font, 'A');
524
gtk_clist_set_column_width((GtkCList *)clist, 0, 8*cw);
525
gtk_clist_set_column_width((GtkCList *)clist, 1, 10*cw);
528
gtk_clist_freeze((GtkCList *)clist);
529
for(i=0; i<options.stack_lines; i++)
530
gtk_clist_remove((GtkCList *)clist, 0);
533
for(i=0, addr = sp; i<10; i++, addr += 2)
535
row_text[0] = g_strdup_printf("%06X:", addr);
536
row_text[1] = g_strdup_printf("%04X", ti_ram[addr]);
538
gtk_clist_append((GtkCList *)clist, row_text);
539
gtk_clist_set_row_style((GtkCList *)clist, i, style);
547
gtk_clist_thaw((GtkCList *)clist);
552
/********************************/
553
/* Debugger dbox menu callbacks */
554
/********************************/
560
on_run1_activate (GtkMenuItem *menuitem,
563
put_in_sb(_("Running..."));
565
// Run the emulation core
575
on_step1_activate (GtkMenuItem *menuitem,
580
put_in_sb(_("One step (F7)"));
581
DISPLAY("Step (F7)\n");
583
// Set up an internal trap (DBTRACE) which will launch/refresh the
584
// debugger when encountered
585
addr = ti68k_getPcRegister();
586
DISPLAY("addr=$%06x\n", addr);
587
ti68k_doSingleStep(); // set trap
588
unhalt(); // emulator in free running
593
on_step_over1_activate (GtkMenuItem *menuitem,
598
put_in_sb(_("Step over."));
599
fprintf(stderr, "Step over (F8): not yet implemented\n");
601
/* Execute one instruction */
602
//bkpt_encountered = !doInstructions(1, 0);
604
/* Refresh the 'code' dbox by sending the 'show' signal */
605
gtk_signal_emit_by_name((GtkObject *)debugger_dbox, "show");
607
/* Refres_breakpoints */
608
refresh_breakpoints(code_clist);
613
Run up to cursor (F4)
616
on_run_to_cursor1_activate (GtkMenuItem *menuitem,
619
gint addr_to_go, next_addr;
623
put_in_sb(_("Ran up to cursor."));
624
fprintf(stderr, "Run to cursor (F4)\n");
626
/* Execute some instructions */
627
if(selected_row != -1)
629
printf("PC: 0x%06x\n", ti68k_getPcRegister());
630
addr_to_go = GPOINTER_TO_INT(gtk_clist_get_row_data((GtkCList *)code_clist, selected_row));
631
printf("addr to go: 0x%06x\n", addr_to_go);
632
for(i=1, next_addr = ti68k_getPcRegister(); next_addr < addr_to_go; i++)
634
next_addr += ti68k_disasm(next_addr, buffer);
635
printf("-> buffer: <%s>\n", buffer);
636
if(i > options.code_lines)
639
//bkpt_encountered = !doInstructions(i, 0);
644
/* Refresh the 'code' dbox by sending the 'show' signal */
645
gtk_signal_emit_by_name((GtkObject *)debugger_dbox, "show");
647
/* Refres_breakpoints */
648
refresh_breakpoints(code_clist);
656
on_break1_activate (GtkMenuItem *menuitem,
661
//GtkWidget *clist = code_clist;
664
put_in_sb(_("Break !"));
666
fprintf(stderr, "Break (F11)\n");
668
/* Place a breakpoint */
669
addr = ti68k_getPcRegister();
670
//addr = getPcRegister() + disasm(getPcRegister(), buffer);
671
i = ti68k_setBreakpointAddress(addr);
673
s = (CODE_BKPT *)g_malloc(sizeof(CODE_BKPT));
676
bkpt_address_list = g_list_append(bkpt_address_list, s);
678
/* Refresh the 'code' dbox by sending the 'show' signal */
679
gtk_signal_emit_by_name((GtkObject *)debugger_dbox, "show");
681
/* Refres_breakpoints */
682
refresh_breakpoints(code_clist);
686
/* Quit the 'Debugger' window */
688
on_exit2_activate (GtkMenuItem *menuitem,
691
gtk_widget_destroy(GTK_WIDGET(user_data));
696
on_set_breakpoint_at_selection1_activate
697
(GtkMenuItem *menuitem,
700
GtkWidget *clist = code_clist; //user_data;
707
put_in_sb(_("Breakpoint added."));
708
fprintf(stderr, "Breakpoints|Set bkpt at selection (F2)\n");
709
//fprintf(stderr, "clist: %p\n", clist);
710
/* Retrieve the selected line and its address */
711
if(selected_row != -1)
713
addr = GPOINTER_TO_INT(gtk_clist_get_row_data((GtkCList *)clist,
715
/* Check whether we already have a breakpoint */
716
for(i=0; i<g_list_length(bkpt_address_list); i++)
718
s1 = (CODE_BKPT *)g_list_nth_data(bkpt_address_list, i);
719
if(addr == s1->address)
721
/* If yes, then remove it (toggle bkpt) */
722
ti68k_delBreakpointAddress(s1->id);
723
bkpt_address_list = g_list_remove(bkpt_address_list, s1);
725
printf("Bkpt toggled\n");
726
refresh_breakpoints(code_clist);
734
addr = ti68k_getPcRegister();
737
/* Place a breakpoint */
738
fprintf(stdout, "Place a breakpoint at %06X\n", addr);
739
i = ti68k_setBreakpointAddress(addr);
741
s = (CODE_BKPT *)g_malloc(sizeof(CODE_BKPT));
744
bkpt_address_list = g_list_append(bkpt_address_list, s);
746
open_xpm("bkpt.xpm", code_clist, &pixmap, &mask);
747
gtk_clist_set_pixmap((GtkCList *)clist, selected_row, 0, pixmap, mask);
748
gdk_pixmap_unref(pixmap);
753
on_set_breakpoint_on_program_entry1_activate
754
(GtkMenuItem *menuitem,
757
display_pgmentrybkpt_dbox ();
762
on_set_breakpoint_on_trap_exception1_activate
763
(GtkMenuItem *menuitem,
771
on_set_data_breakpoint1_activate (GtkMenuItem *menuitem,
774
//gtk_widget_show(create_add_data_bkpt_dbox());
775
display_data_bkpts_dbox();
778
/* Local functions used below */
779
static void clear_all_bkpt_address(gpointer data, gpointer user_data)
781
CODE_BKPT *s = (CODE_BKPT *)data;
782
ti68k_delBreakpointAddress(s->id);
788
on_clear_all_breakpoints1_activate (GtkMenuItem *menuitem,
791
fprintf(stderr, "Breakpoints|Clear all bkpts\n");
792
g_list_foreach(bkpt_address_list, clear_all_bkpt_address, NULL);
793
g_list_free(bkpt_address_list);
794
bkpt_address_list = NULL; // free ne met pas le ptr a null: bug !
796
/* Refresh breakpoints */
797
refresh_breakpoints(code_clist);
802
on_log1_activate (GtkMenuItem *menuitem,
810
on_view_log1_activate (GtkMenuItem *menuitem,
813
msg_box2(_("Information"),
814
_("This function is not available yet."));
819
on_edit_logged_addresses1_activate (GtkMenuItem *menuitem,
822
msg_box2(_("Information"),
823
_("This function is not available yet."));
828
on_log_link_port_send1_activate (GtkMenuItem *menuitem,
836
on_log_link_port_receive1_activate (GtkMenuItem *menuitem,
844
on_clear_all1_activate (GtkMenuItem *menuitem,
847
msg_box2(_("Information"),
848
_("This function is not available yet."));
853
on_enable_logging1_activate (GtkMenuItem *menuitem,
861
on_clist1_button_press_event (GtkWidget *widget,
862
GdkEventButton *event,
866
GdkEventButton *bevent;
868
if (!gtk_clist_get_selection_info (GTK_CLIST (widget),
875
case GDK_BUTTON_PRESS:
878
bevent=(GdkEventButton *)(event);
879
gtk_menu_popup(GTK_MENU(create_code_popup_menu()),
880
NULL, NULL, NULL, NULL,
881
bevent->button, bevent->time);
886
case GDK_2BUTTON_PRESS:
897
on_clist1_select_row (GtkCList *clist,
908
on_clist1_unselect_row (GtkCList *clist,
919
on_clist2_key_press_event (GtkWidget *widget,
925
printf("Key pressed\n");
927
if (gtk_clist_get_selection_info (GTK_CLIST (widget), event->x, event->y,
930
printf("at row %i, column %i\n", row, column);
938
on_clist2_button_press_event (GtkWidget *widget,
939
GdkEventButton *event,
943
GdkEventButton *bevent;
945
if (!gtk_clist_get_selection_info (GTK_CLIST (widget),
952
case GDK_BUTTON_PRESS:
955
bevent=(GdkEventButton *)(event);
956
gtk_menu_popup(GTK_MENU(create_memory_popup_menu()),
957
NULL, NULL, NULL, NULL,
958
bevent->button, bevent->time);
963
case GDK_2BUTTON_PRESS:
972
/*******************/
973
/* Code popup menu */
974
/*******************/
978
on_go_to_address1_activate (GtkMenuItem *menuitem,
981
gtk_widget_show_all(create_gotocode_dbox());
986
on_go_to_pc1_activate (GtkMenuItem *menuitem,
993
/* Right button menu in the code part of the Debugger Window */
995
on_set_breakpoint1_activate (GtkMenuItem *menuitem,
998
// Equivalent to the menu
999
on_set_breakpoint_at_selection1_activate(menuitem, code_clist);
1004
on_set_pc_to_selection1_activate (GtkMenuItem *menuitem,
1009
/* Retrieve the selected line and its address */
1010
if(selected_row != -1)
1012
addr = GPOINTER_TO_INT(gtk_clist_get_row_data((GtkCList *)code_clist,
1014
ti68k_setPcRegister(addr);
1015
gtk_signal_emit_by_name((GtkObject *)debugger_dbox, "show");
1021
on_force_refresh1_activate (GtkMenuItem *menuitem,
1024
/* Refresh the 'code' dbox by sending the 'show' signal */
1025
gtk_signal_emit_by_name((GtkObject *)debugger_dbox, "show");
1027
/* Refres_breakpoints */
1028
refresh_breakpoints(code_clist);
1031
/********************/
1032
/* Memoy popup menu */
1033
/********************/
1036
on_edit1_activate (GtkMenuItem *menuitem,
1044
on_go_to1_activate (GtkMenuItem *menuitem,
1047
gtk_widget_show_all(create_gotodata_dbox());
1051
/********************************/
1052
/* 'Address to go' dialog boxes */
1053
/********************************/
1055
static gint code_addr_to_go = 0x000000;
1056
static gint data_addr_to_go = 0x000000;
1059
on_entry10_changed (GtkEditable *editable,
1064
s = gtk_editable_get_chars((GtkEditable *)(user_data), 0, -1);
1065
if(sscanf(s, "0x%6x", &code_addr_to_go) < 1)
1066
code_addr_to_go = 0x000000;
1073
on_button45_clicked (GtkButton *button,
1076
ti68k_setPcRegister(code_addr_to_go);
1077
gtk_signal_emit_by_name((GtkObject *)debugger_dbox, "show");
1079
gtk_widget_destroy(GTK_WIDGET(user_data));
1082
/* 'Address mem to go' dialog box */
1085
on_entry11_changed (GtkEditable *editable,
1090
s = gtk_editable_get_chars((GtkEditable *)(user_data), 0, -1);
1091
if(sscanf(s, "0x%6x", &data_addr_to_go) < 1)
1092
data_addr_to_go = 0x000000;
1099
on_button99_clicked (GtkButton *button,
1102
data_addr = data_addr_to_go;
1103
gtk_signal_emit_by_name((GtkObject *)debugger_dbox, "show");
1105
gtk_widget_destroy(GTK_WIDGET(user_data));
1110
on_options1_activate (GtkMenuItem *menuitem,
1113
display_dbgopt_dbox();
1116
/* Memory box events for test purposes */
1119
on_clist2_click_column (GtkCList *clist,
1128
on_clist2_select_row (GtkCList *clist,
1134
//fprintf(stdout, "row: %i\n", row);
1139
on_clist2_event (GtkWidget *widget,
1144
GdkEventButton *bevent = (GdkEventButton *)event;
1148
if( (event->type >= 4) && (event->type <= 9))
1152
gtk_clist_get_selection_info (GTK_CLIST(widget), x, y, &row, &column);
1153
fprintf(stdout, "event %i, x=%i, y=%i, row=%i, column=%i\n",
1154
event->type, x, y, row, column);
1161
on_gotocode_dbox_destroy (GtkObject *object,
1169
on_gotodata_dbox_destroy (GtkObject *object,