nkeynes@1: #ifdef HAVE_CONFIG_H nkeynes@1: # include nkeynes@1: #endif nkeynes@1: nkeynes@1: #include nkeynes@1: nkeynes@1: #include "callbacks.h" nkeynes@1: #include "interface.h" nkeynes@1: #include "gui.h" nkeynes@1: #include "sh4core.h" nkeynes@1: #include "asic.h" nkeynes@18: #include "dreamcast.h" nkeynes@1: nkeynes@1: int selected_pc = -1; nkeynes@1: nkeynes@1: void nkeynes@1: on_new_file1_activate (GtkMenuItem *menuitem, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_open1_activate (GtkMenuItem *menuitem, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@18: open_file_dialog( "Open...", open_file, NULL, NULL ); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_save1_activate (GtkMenuItem *menuitem, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_save_as1_activate (GtkMenuItem *menuitem, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_exit1_activate (GtkMenuItem *menuitem, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: gtk_main_quit(); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_preferences1_activate (GtkMenuItem *menuitem, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_about1_activate (GtkMenuItem *menuitem, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: GtkWidget *about = create_about_win(); nkeynes@1: gtk_widget_show(about); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_load_btn_clicked (GtkButton *button, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@19: open_file_dialog( "Open...", load_bin_file, NULL, NULL ); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_reset_btn_clicked (GtkButton *button, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: sh4_reset(); nkeynes@1: mem_reset(); nkeynes@2: update_gui(); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_stop_btn_clicked (GtkButton *button, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: if( sh4_isrunning() ) { nkeynes@1: sh4_stop(); nkeynes@1: } nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_step_btn_clicked (GtkButton *button, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: sh4_execute_instruction(); nkeynes@2: update_gui(); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@9: void run( debug_info_t data, uint32_t target ) { nkeynes@1: if( ! sh4_isrunning() ) { nkeynes@1: do { nkeynes@1: if( target == -1 ) nkeynes@1: sh4_runfor(1000000); nkeynes@1: else nkeynes@1: sh4_runto(target, 1000000); nkeynes@9: update_icount(data); nkeynes@1: run_timers(1000000); nkeynes@19: SCIF_clock_tick(); nkeynes@1: while( gtk_events_pending() ) nkeynes@1: gtk_main_iteration(); nkeynes@1: pvr2_next_frame(); nkeynes@1: } while( sh4_isrunning() ); nkeynes@2: update_gui(); nkeynes@1: } nkeynes@1: } nkeynes@1: void nkeynes@1: on_run_btn_clicked (GtkButton *button, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@9: debug_info_t data = get_debug_info(GTK_WIDGET(button)); nkeynes@9: run(data,-1); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_runto_btn_clicked (GtkButton *button, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@9: debug_info_t data = get_debug_info(GTK_WIDGET(button)); nkeynes@1: if( selected_pc == -1 ) nkeynes@1: WARN( "No address selected, so can't run to it", NULL ); nkeynes@1: else { nkeynes@1: INFO( "Running until %08X...", selected_pc ); nkeynes@9: run( data, selected_pc ); nkeynes@1: } nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_break_btn_clicked (GtkButton *button, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: gboolean nkeynes@1: on_debug_win_delete_event (GtkWidget *widget, nkeynes@1: GdkEvent *event, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: gtk_main_quit(); nkeynes@1: return FALSE; nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_disasm_list_select_row (GtkCList *clist, nkeynes@1: gint row, nkeynes@1: gint column, nkeynes@1: GdkEvent *event, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@9: debug_info_t data = get_debug_info(GTK_WIDGET(clist)); nkeynes@9: selected_pc = row_to_address(data, row); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_disasm_list_unselect_row (GtkCList *clist, nkeynes@1: gint row, nkeynes@1: gint column, nkeynes@1: GdkEvent *event, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@9: debug_info_t data = get_debug_info(GTK_WIDGET(clist)); nkeynes@9: int pc = row_to_address(data,row); nkeynes@1: if( selected_pc == pc ) selected_pc = -1; nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_mem_mapped_regs1_activate (GtkMenuItem *menuitem, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: mmr_open_win(); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: gboolean nkeynes@1: on_mmr_win_delete_event (GtkWidget *widget, nkeynes@1: GdkEvent *event, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: mmr_close_win(); nkeynes@1: return TRUE; nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_mmr_close_clicked (GtkButton *button, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: mmr_close_win(); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_mode_field_changed (GtkEditable *editable, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@18: const gchar *text = gtk_entry_get_text( GTK_ENTRY(editable) ); nkeynes@10: debug_info_t data = get_debug_info( GTK_WIDGET(editable) ); nkeynes@10: set_disassembly_cpu( data, text ); nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_page_locked_btn_toggled (GtkToggleButton *togglebutton, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: gboolean nkeynes@1: on_page_field_key_press_event (GtkWidget *widget, nkeynes@1: GdkEventKey *event, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: if( event->keyval == GDK_Return || event->keyval == GDK_Linefeed ) { nkeynes@9: debug_info_t data = get_debug_info(widget); nkeynes@18: const gchar *text = gtk_entry_get_text( GTK_ENTRY(widget) ); nkeynes@1: gchar *endptr; nkeynes@1: unsigned int val = strtoul( text, &endptr, 16 ); nkeynes@1: if( text == endptr ) { /* invalid input */ nkeynes@1: char buf[10]; nkeynes@9: sprintf( buf, "%08X", row_to_address(data,0) ); nkeynes@1: gtk_entry_set_text( GTK_ENTRY(widget), buf ); nkeynes@1: } else { nkeynes@9: set_disassembly_region(data, val); nkeynes@1: } nkeynes@1: } nkeynes@1: return FALSE; nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_output_list_select_row (GtkCList *clist, nkeynes@1: gint row, nkeynes@1: gint column, nkeynes@1: GdkEvent *event, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@1: if( event->type == GDK_2BUTTON_PRESS && event->button.button == 1 ) { nkeynes@1: char *val; nkeynes@1: gtk_clist_get_text( clist, row, 1, &val ); nkeynes@1: if( val[0] != '\0' ) { nkeynes@1: int addr = strtoul( val, NULL, 16 ); nkeynes@9: debug_info_t data = get_debug_info( GTK_WIDGET(clist) ); nkeynes@9: jump_to_disassembly( data, addr, TRUE ); nkeynes@1: } nkeynes@1: } nkeynes@1: } nkeynes@1: nkeynes@1: nkeynes@1: void nkeynes@1: on_jump_pc_btn_clicked (GtkButton *button, nkeynes@1: gpointer user_data) nkeynes@1: { nkeynes@9: debug_info_t data = get_debug_info( GTK_WIDGET(button) ); nkeynes@9: jump_to_pc( data, TRUE ); nkeynes@1: } nkeynes@1: nkeynes@2: nkeynes@2: void nkeynes@2: on_button_add_watch_clicked (GtkButton *button, nkeynes@2: gpointer user_data) nkeynes@2: { nkeynes@2: nkeynes@2: } nkeynes@2: nkeynes@2: nkeynes@2: void nkeynes@2: on_button_clear_all_clicked (GtkButton *button, nkeynes@2: gpointer user_data) nkeynes@2: { nkeynes@2: nkeynes@2: } nkeynes@2: nkeynes@2: nkeynes@2: void nkeynes@2: on_button_close_clicked (GtkButton *button, nkeynes@2: gpointer user_data) nkeynes@2: { nkeynes@2: nkeynes@2: } nkeynes@2: nkeynes@2: nkeynes@2: void nkeynes@2: on_view_memory_activate (GtkMenuItem *menuitem, nkeynes@2: gpointer user_data) nkeynes@2: { nkeynes@2: dump_window_new(); nkeynes@2: } nkeynes@2: nkeynes@18: nkeynes@18: void nkeynes@18: on_loadstate_button_clicked (GtkToolButton *toolbutton, nkeynes@18: gpointer user_data) nkeynes@18: { nkeynes@18: open_file_dialog( "Load state...", dreamcast_load_state, "*.dst", "DreamOn Save State (*.dst)" ); nkeynes@18: } nkeynes@18: nkeynes@18: nkeynes@18: void nkeynes@18: on_savestate_button_clicked (GtkToolButton *toolbutton, nkeynes@18: gpointer user_data) nkeynes@18: { nkeynes@18: save_file_dialog( "Save state...", dreamcast_save_state, "*.dst", "DreamOn Save State (*.dst)" ); nkeynes@18: } nkeynes@18: