From 5a20ff0dc7c6a2fcde0b1e382f3d5a92aefa4ab9 Mon Sep 17 00:00:00 2001 From: Tatsuya79 Date: Thu, 8 Feb 2018 12:23:53 +0100 Subject: Overclock by reducing cycles. --- libretro.c | 13 +++++++++++++ source/snes9x.h | 8 +++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/libretro.c b/libretro.c index 0114559..42e316d 100644 --- a/libretro.c +++ b/libretro.c @@ -36,6 +36,7 @@ struct retro_perf_callback perf_cb; char retro_save_directory[PATH_MAX]; char retro_base_name[PATH_MAX]; +bool overclock_cycles = false; #ifdef _WIN32 char slash = '\\'; @@ -294,6 +295,7 @@ void retro_init(void) static const struct retro_variable vars[] = { { "catsfc_VideoMode", "Video Mode; auto|NTSC|PAL" }, + { "catsfc_overclock_cycles", "CPU Overclock (Hack, Unsafe, Restart); disabled|enabled" }, { NULL, NULL }, }; @@ -378,6 +380,17 @@ static void check_variables(void) Settings.ForceNTSC = !strcmp(var.value, "NTSC"); Settings.ForcePAL = !strcmp(var.value, "PAL"); } + + var.key = "catsfc_overclock_cycles"; + var.value = NULL; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) + { + if (strcmp(var.value, "enabled") == 0) + overclock_cycles = true; + else + overclock_cycles = false; + } } #ifdef PSP diff --git a/source/snes9x.h b/source/snes9x.h index 9e7d91d..4a4364c 100644 --- a/source/snes9x.h +++ b/source/snes9x.h @@ -46,9 +46,9 @@ #define SNES_CYCLES_PER_SCANLINE ((uint32_t) ((SNES_SCANLINE_TIME / SNES_CLOCK_LEN) * 6 + 0.5)) -#define ONE_CYCLE 6u -#define SLOW_ONE_CYCLE 8u -#define TWO_CYCLES 12u +#define ONE_CYCLE (overclock_cycles ? 4u : 6u) +#define SLOW_ONE_CYCLE (overclock_cycles ? 4u : 8u) +#define TWO_CYCLES (overclock_cycles ? 6u : 12u) #define SNES_TR_MASK (1u << 4) #define SNES_TL_MASK (1u << 5) @@ -63,6 +63,8 @@ #define SNES_Y_MASK (1u << 14) #define SNES_B_MASK (1u << 15) +extern bool overclock_cycles; + enum { SNES_MULTIPLAYER5, -- cgit v1.2.3