aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libretro.c13
-rw-r--r--source/snes9x.h8
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,