Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
Arquivo: debug.c Projeto: nocrew/ostis
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;
}
Exemplo n.º 3
0
Arquivo: debug.c Projeto: nocrew/ostis
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();
}
Exemplo n.º 4
0
Arquivo: debug.c Projeto: nocrew/ostis
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;
}
Exemplo n.º 5
0
Arquivo: debug.c Projeto: nocrew/ostis
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;
}
Exemplo n.º 6
0
Arquivo: debug.c Projeto: nocrew/ostis
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;
}