void screen_swap(int indicate_rasterpos) { SDL_Rect dst,src; if(disable) return; if(debugger) { display_swap_screen(); } SDL_UpdateTexture(texture, NULL, screen->pixels, screen->pitch); if(crop_screen) { src.x = mon.crop_offset_x; src.y = mon.crop_offset_y; src.w = mon.crop_width; src.h = mon.crop_height; SDL_RenderCopy(renderer, texture, &src, NULL); } else { SDL_RenderCopy(renderer, texture, NULL, NULL); } if(indicate_rasterpos) { int rasterpos = screen_get_vsync(); dst.x = 2*(rasterpos%512)-8; dst.y = 2*(rasterpos/512); dst.w = 8; dst.h = 2; SDL_RenderCopy(renderer, rasterpos_indicator[rasterpos_indicator_cnt&1], NULL, &dst); rasterpos_indicator_cnt++; } SDL_RenderPresent(renderer); }
static int debug_do_key_edit(SDL_KeyboardEvent key) { SDL_Keysym k; k = key.keysym; if(k.sym == SDLK_RETURN) { if(edit_finish(win_get_exwin()) == EDIT_SUCCESS) { win_set_exwin(EDIT_EXIT); keymode = KEY_NORMAL; } } else if(k.sym == SDLK_ESCAPE) { win_set_exwin(EDIT_EXIT); keymode = KEY_NORMAL; } else if(k.sym == SDLK_LEFT) { edit_move(EDIT_LEFT); } else if(k.sym == SDLK_RIGHT) { edit_move(EDIT_RIGHT); } else if(k.sym == SDLK_BACKSPACE) { edit_remove_char(); } display_swap_screen(); return 0; }
void debug_init() { if(clocked_cpu) { runfn = cpu_run_clocked; stepfn = cpu_step_instr_clocked; } else { runfn = cpu_run; stepfn = cpu_step_instr; } display_setup(); win_setup_default(); display_swap_screen(); }
static int debug_do_text_edit(SDL_TextInputEvent tev) { if(((tev.text[0] >= '0') && (tev.text[0] <= '9')) || ((tev.text[0] >= 'a') && (tev.text[0] <= 'z')) || ((tev.text[0] >= 'A') && (tev.text[0] <= 'Z')) || (tev.text[0] == '[') || (tev.text[0] == ']') || (tev.text[0] == '(') || (tev.text[0] == ')') || (tev.text[0] == '$') || (tev.text[0] == '-') || (tev.text[0] == '+') || (tev.text[0] == '*') || (tev.text[0] == '/') || (tev.text[0] == '_') || (tev.text[0] == '|') || (tev.text[0] == '&') || (tev.text[0] == '^') || (tev.text[0] == '~') || (tev.text[0] == '\\') || (tev.text[0] == '.') || (tev.text[0] == '!') || (tev.text[0] == '<') || (tev.text[0] == '>') || (tev.text[0] == '=') || (tev.text[0] == ',')) { edit_insert_char(tev.text[0]); } display_swap_screen(); return 0; }
int debug_event_parse(SDL_Event ev) { switch(ev.type) { case SDL_WINDOWEVENT: if(ev.window.windowID == debug_window_id) { screen_swap(DEBUG_NORMAL); display_swap_screen(); } break; case SDL_TEXTINPUT: case SDL_KEYDOWN: if(debug_dispatch_keys(ev)) { SDL_Quit(); return 1; } break; case SDL_QUIT: SDL_Quit(); return 1; } return 0; }
static int debug_do_key_normal(SDL_KeyboardEvent key) { SDL_Keysym k; int ret; k = key.keysym; win_set_message(""); switch(k.sym) { case SDLK_ESCAPE: win[2].addr = cpu->pc; break; case SDLK_TAB: win_cycle_selected(); break; case SDLK_PRINTSCREEN: // TODO: toggle this state. diag_set_module_levels("CPU0:6"); break; case SDLK_UP: win_move_window(MOVE_UP, k.mod&KMOD_SHIFT); break; case SDLK_DOWN: win_move_window(MOVE_DOWN, k.mod&KMOD_SHIFT); break; case SDLK_LEFT: win_move_window(MOVE_LEFT, k.mod&KMOD_SHIFT); break; case SDLK_RIGHT: win_move_window(MOVE_RIGHT, k.mod&KMOD_SHIFT); break; case SDLK_d: if(debugmode) debugmode = 0; else debugmode = 1; break; case SDLK_t: if(k.mod & KMOD_ALT) win_toggle_window_type(WIN_CURRENT); break; case SDLK_f: if(k.mod & KMOD_ALT) win_toggle_window_font(WIN_CURRENT); break; case SDLK_s: if(k.mod & KMOD_ALT) win_toggle_window_split(WIN_CURRENT); if(k.mod & KMOD_CTRL) debug_skip_next_instr(); break; case SDLK_y: if(k.mod & KMOD_ALT) win_toggle_window_full(WIN_CURRENT); break; case SDLK_z: if(k.mod & KMOD_CTRL) { if((win_get_selected() != 2) && (win_get_selected() != 4)) win_set_selected(2); ret = stepfn(CPU_TRACE_SINGLE); if(debugmode) { cpu_print_status(CPU_USE_CURRENT_PC); mfp_print_status(); } if(ret == CPU_BREAKPOINT) { win_set_message("Breakpoint"); } else if(ret == CPU_WATCHPOINT) { win_set_message("Watchpoint"); } else { win_set_message("Trace"); } win_move_window_to_pc(); } break; case SDLK_a: if(k.mod & KMOD_CTRL) { debug_breakpoint_next_instr(); if((win_get_selected() != 2) && (win_get_selected() != 4)) win_set_selected(2); debug_update_win = 0; ret = runfn(CPU_DEBUG_RUN); debug_update_win = 1; if(ret == CPU_BREAKPOINT) { win_set_message("Breakpoint"); } else if(ret == CPU_WATCHPOINT) { win_set_message("Watchpoint"); } win_move_window_to_pc(); } break; case SDLK_r: if(k.mod & KMOD_CTRL) { if((win_get_selected() != 2) && (win_get_selected() != 4)) win_set_selected(2); debug_update_win = 0; ret = runfn(CPU_DEBUG_RUN); debug_update_win = 1; if(ret == CPU_BREAKPOINT) { win_set_message("Breakpoint"); } else if(ret == CPU_WATCHPOINT) { win_set_message("Watchpoint"); } else { printf("DEBUG: Run Return %d\n", ret); } win_move_window_to_pc(); } else if(k.mod & KMOD_ALT) { win_set_exwin(EDIT_SETREG); debug_set_editmode(); } break; case SDLK_m: if(k.mod & KMOD_ALT) { win_set_exwin(EDIT_SETMEM); debug_set_editmode(); } else { if(win_get_selected() > 1) { win_set_exwin(EDIT_SETADDR); debug_set_editmode(); } } break; case SDLK_v: if(viewmode == VIEW_DISPLAY) viewmode = VIEW_DEBUG; else viewmode = VIEW_DISPLAY; break; case SDLK_l: if(k.mod & KMOD_SHIFT) { win_set_exwin(EDIT_LABELCMD); } else { win_set_exwin(EDIT_LABEL); } debug_set_editmode(); break; case SDLK_b: if(k.mod & KMOD_ALT) { win_set_exwin(EDIT_SETBRK); debug_set_editmode(); } else if(k.mod & KMOD_CTRL) { if(win[win_get_selected()].type == TYPE_DIS) debug_toggle_breakpoint(win_get_selected()); } else { cpu_print_breakpoints(); } break; case SDLK_w: if(k.mod & KMOD_ALT) { win_set_exwin(EDIT_SETWATCH); debug_set_editmode(); } break; case SDLK_c: if(k.mod & KMOD_CTRL) return 1; screen_clear(); break; case SDLK_F12: printf("-------------------------------------------\n"); cpu_print_status(CPU_USE_CURRENT_PC); printf("- - - - - - - - - - - - - - - - - - - - - -\n"); mfp_print_status(); printf("- - - - - - - - - - - - - - - - - - - - - -\n"); ikbd_print_status(); printf("-------------------------------------------\n"); default: break; } screen_swap(DEBUG_INDICATE_RASTERPOS); display_swap_screen(); return 0; }