diff --git a/core/hostevents_sdl.cpp b/core/hostevents_sdl.cpp index 66ece6f34d..c130149e9b 100644 --- a/core/hostevents_sdl.cpp +++ b/core/hostevents_sdl.cpp @@ -125,6 +125,35 @@ void EventManager::poll_events() { } return; } + // LAlt-+: speed up icnt_factor + if (event.key.keysym.sym == SDLK_EQUALS && (event.key.keysym.mod & KMOD_ALL) == KMOD_LALT) { + if (event.type == SDL_KEYUP) { + int icnt_counter_val = increment_icnt_factor(); + LOG_F(INFO, "Incremented icnt_factor: %d", icnt_counter_val); + } + return; + } + // LAlt--: slow down icnt_factor + if (event.key.keysym.sym == SDLK_MINUS && (event.key.keysym.mod & KMOD_ALL) == KMOD_LALT) { + if (event.type == SDL_KEYUP) { + int icnt_counter_val = decrement_icnt_factor(); + LOG_F(INFO, "Decremented icnt_factor: %d", icnt_counter_val); + } + return; + } + + // LALT-R: g_realtime toggle + if (event.key.keysym.sym == SDLK_r && (event.key.keysym.mod & KMOD_ALL) == KMOD_LALT) { + if (event.type == SDL_KEYUP) { + bool g_realtime_status = toggle_g_realtime(); + if (g_realtime_status == true) { + LOG_F(INFO, "g_realtime: enabled"); + } else if (g_realtime_status == false) { + LOG_F(INFO, "g_realtime: disabled"); + } + } + } + // Control-L: log toggle if (event.key.keysym.sym == SDLK_l && (event.key.keysym.mod & KMOD_ALL) == KMOD_LCTRL) { if (event.type == SDL_KEYUP) { diff --git a/cpu/ppc/ppcemu.h b/cpu/ppc/ppcemu.h index 6f029f8c32..9ce766354e 100644 --- a/cpu/ppc/ppcemu.h +++ b/cpu/ppc/ppcemu.h @@ -691,4 +691,15 @@ extern void ppc_msr_did_change(uint32_t old_msr_val, uint32_t new_msr_val, bool uint64_t get_reg(std::string reg_name); /* get content of the register reg_name */ void set_reg(std::string reg_name, uint64_t val); /* set reg_name to val */ +/* icnt_factor control */ +extern int increment_icnt_factor(); +extern int decrement_icnt_factor(); +extern int get_icnt_factor(); + +/* toggle_g_realtime */ +extern bool toggle_g_realtime(); + +/* force_cycle_counter_reload */ +static void force_cycle_counter_reload(); + #endif /* PPCEMU_H */ diff --git a/cpu/ppc/ppcexec.cpp b/cpu/ppc/ppcexec.cpp index 58127337df..f27f80cfd1 100644 --- a/cpu/ppc/ppcexec.cpp +++ b/cpu/ppc/ppcexec.cpp @@ -81,7 +81,7 @@ bool dec_exception_pending = false; uint32_t glob_bb_start_la; /* variables related to virtual time */ -const bool g_realtime = false; +bool g_realtime = false; uint64_t g_nanoseconds_base; uint64_t g_icycles; int icnt_factor; @@ -290,6 +290,35 @@ static void force_cycle_counter_reload() exec_timer = true; } +int increment_icnt_factor() +{ + icnt_factor += 1; + force_cycle_counter_reload(); + return icnt_factor; +} + +int decrement_icnt_factor() +{ + icnt_factor -= 1; + force_cycle_counter_reload(); + return icnt_factor; +} + +int get_icnt_factor() +{ + return icnt_factor; +} + +bool toggle_g_realtime() +{ + if (g_realtime == false) + g_realtime = true; + else if (g_realtime == true) + g_realtime = false; + force_cycle_counter_reload(); + return g_realtime; +} + typedef enum { main, until,