aboutsummaryrefslogtreecommitdiff
path: root/patches/snes9x2005
diff options
context:
space:
mode:
authorneonloop2021-08-04 15:09:12 +0000
committerneonloop2021-08-04 15:09:12 +0000
commit99632f66e74fc57c463072be312d634aeb67bc61 (patch)
treee4ccaf52b93d04c69865d82556e2ce4cd3a6c599 /patches/snes9x2005
downloadpicoarch-99632f66e74fc57c463072be312d634aeb67bc61.tar.gz
picoarch-99632f66e74fc57c463072be312d634aeb67bc61.tar.bz2
picoarch-99632f66e74fc57c463072be312d634aeb67bc61.zip
Initial commit
Diffstat (limited to 'patches/snes9x2005')
-rw-r--r--patches/snes9x2005/0001-trimui-support.patch46
-rw-r--r--patches/snes9x2005/0002-core-options.patch64
-rw-r--r--patches/snes9x2005/1000-frameskip-interval.patch105
3 files changed, 215 insertions, 0 deletions
diff --git a/patches/snes9x2005/0001-trimui-support.patch b/patches/snes9x2005/0001-trimui-support.patch
new file mode 100644
index 0000000..9424312
--- /dev/null
+++ b/patches/snes9x2005/0001-trimui-support.patch
@@ -0,0 +1,46 @@
+diff --git a/Makefile b/Makefile
+index b293853..5704da3 100644
+--- a/Makefile
++++ b/Makefile
+@@ -282,6 +282,20 @@ else ifeq ($(platform), gcw0)
+ FLAGS += -fomit-frame-pointer -ffast-math -march=mips32 -mtune=mips32r2 -mhard-float
+ FLAGS += -DFAST_LSB_WORD_ACCESS
+
++else ifeq ($(platform), trimui)
++ TARGET := $(TARGET_NAME)_libretro.so
++ CC = $(CROSS_COMPILE)gcc
++ AR = $(CROSS_COMPILE)ar
++ SHARED := -shared -Wl,--version-script=link.T -Wl,--no-undefined
++ CFLAGS += -fsingle-precision-constant -fno-PIC -flto
++ CFLAGS += -DLSB_FIRST -DFAST_ALIGNED_LSB_WORD_ACCESS -DRIGHTSHIFT_IS_SAR
++ CFLAGS += -std=c99 -fomit-frame-pointer -ffast-math -mcpu=arm926ej-s -mtune=arm926ej-s
++ LDFLAGS += -flto
++ OPTIMIZE += -Ofast -DNDEBUG=1
++ ifeq (,$(DEBUG))
++ LDFLAGS += -s
++ endif
++
+ # (armv7 a7, hard point, neon based) ###
+ # NESC, SNESC, C64 mini
+ else ifeq ($(platform), classic_armv7_a7)
+@@ -570,10 +584,20 @@ endif
+
+ ifeq ($(DEBUG),1)
+ FLAGS += -O0 -g
++else ifneq (,$(OPTIMIZE))
++ FLAGS += $(OPTIMIZE)
+ else
+ FLAGS += -O2 -DNDEBUG
+ endif
+
++
++ifeq ($(PROFILE), GENERATE)
++ CFLAGS += -fprofile-generate=./profile/snes9x2005
++ LDFLAGS += -lgcov
++else ifeq ($(PROFILE), APPLY)
++ CFLAGS += -fprofile-use -fprofile-dir=../profile/snes9x2005 -fbranch-probabilities
++endif
++
+ ifneq (,$(findstring msvc,$(platform)))
+ ifeq ($(DEBUG),1)
+ FLAGS += -MTd
diff --git a/patches/snes9x2005/0002-core-options.patch b/patches/snes9x2005/0002-core-options.patch
new file mode 100644
index 0000000..8fea741
--- /dev/null
+++ b/patches/snes9x2005/0002-core-options.patch
@@ -0,0 +1,64 @@
+diff --git a/libretro_core_options.h b/libretro_core_options.h
+index 032cefd..63e17ae 100644
+--- a/libretro_core_options.h
++++ b/libretro_core_options.h
+@@ -57,7 +57,9 @@ struct retro_core_option_definition option_defs_us[] = {
+ {
+ "catsfc_VideoMode",
+ "Console Region",
+- "Specify which region the system is from. 'PAL' is 50hz, 'NTSC' is 60hz. Games will run faster or slower than normal if the incorrect region is selected.",
++ "'PAL' is 50hz, 'NTSC' is 60hz. Games will run\n"
++ "faster or slower than normal if the incorrect\n"
++ "region is selected.",
+ {
+ { "auto", "Auto" },
+ { "NTSC", NULL },
+@@ -69,19 +71,22 @@ struct retro_core_option_definition option_defs_us[] = {
+ {
+ "catsfc_frameskip",
+ "Frameskip",
+- "Skip frames to avoid audio buffer under-run (crackling). Improves performance at the expense of visual smoothness. 'Auto' skips frames when advised by the frontend. 'Manual' utilises the 'Frameskip Threshold (%)' setting.",
++ "Skip frames to avoid audio crackling. Improves\n"
++ "performance at the expense of visual smoothness.",
+ {
+ { "disabled", NULL },
+ { "auto", "Auto" },
+ { "manual", "Manual" },
+ { NULL, NULL },
+ },
+- "disabled"
++ "auto"
+ },
+ {
+ "catsfc_frameskip_threshold",
+- "Frameskip Threshold (%)",
+- "When 'Frameskip' is set to 'Manual', specifies the audio buffer occupancy threshold (percentage) below which frames will be skipped. Higher values reduce the risk of crackling by causing frames to be dropped more frequently.",
++ "FS Threshold (%)",
++ "When 'Frameskip' is set to 'Threshold', sets\n"
++ "how low the audio buffer can get before frames\n"
++ "will be skipped.",
+ {
+ { "15", NULL },
+ { "18", NULL },
+@@ -105,8 +110,10 @@ struct retro_core_option_definition option_defs_us[] = {
+ },
+ {
+ "catsfc_overclock_cycles",
+- "Reduce Slowdown (Hack, Unsafe, Restart)",
+- "Many games for the SNES suffered from slowdown due to the weak main CPU. This option helps allievate that at the cost of possible bugs. COMPATIBLE: Reduce slowdown but keep as much game compatibility as much as possible. MAX: Reduce slowdown as much as possible but will break more games.",
++ "Overclock (Restart)",
++ "Alleviate normal SNES slowdown. Compatible keeps\n"
++ "as much compatibility as possible. Max will reduce\n"
++ "more slowdown but break more games.",
+ {
+ { "disabled", NULL },
+ { "compatible", "Compatible" },
+@@ -117,7 +124,7 @@ struct retro_core_option_definition option_defs_us[] = {
+ },
+ {
+ "catsfc_reduce_sprite_flicker",
+- "Reduce Flickering (Hack, Unsafe)",
++ "Reduce Flicker",
+ "Raises sprite limit to reduce flickering in games.",
+ {
+ { "disabled", NULL },
diff --git a/patches/snes9x2005/1000-frameskip-interval.patch b/patches/snes9x2005/1000-frameskip-interval.patch
new file mode 100644
index 0000000..a0b6ef0
--- /dev/null
+++ b/patches/snes9x2005/1000-frameskip-interval.patch
@@ -0,0 +1,105 @@
+diff --git a/libretro.c b/libretro.c
+index c368d8f..f4675ed 100644
+--- a/libretro.c
++++ b/libretro.c
+@@ -57,13 +57,11 @@ static int32_t samplerate = (((SNES_CLOCK_SPEED * 6) / (32 * ONE_APU_CYCLE)));
+ static unsigned frameskip_type = 0;
+ static unsigned frameskip_threshold = 0;
+ static uint16_t frameskip_counter = 0;
++static unsigned frameskip_interval = 0;
+
+ static bool retro_audio_buff_active = false;
+ static unsigned retro_audio_buff_occupancy = 0;
+ static bool retro_audio_buff_underrun = false;
+-/* Maximum number of consecutive frames that
+- * can be skipped */
+-#define FRAMESKIP_MAX 30
+
+ static unsigned retro_audio_latency = 0;
+ static bool update_audio_latency = false;
+@@ -341,6 +339,7 @@ void retro_deinit(void)
+ frameskip_type = 0;
+ frameskip_threshold = 0;
+ frameskip_counter = 0;
++ frameskip_interval = 0;
+ retro_audio_buff_active = false;
+ retro_audio_buff_occupancy = 0;
+ retro_audio_buff_underrun = false;
+@@ -414,7 +413,7 @@ static void check_variables(bool first_run)
+ {
+ if (strcmp(var.value, "auto") == 0)
+ frameskip_type = 1;
+- else if (strcmp(var.value, "manual") == 0)
++ else if (strcmp(var.value, "auto_threshold") == 0)
+ frameskip_type = 2;
+ }
+
+@@ -426,6 +425,14 @@ static void check_variables(bool first_run)
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
+ frameskip_threshold = strtol(var.value, NULL, 10);
+
++ var.key = "catsfc_frameskip_interval";
++ var.value = NULL;
++
++ frameskip_interval = 4;
++
++ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
++ frameskip_interval = strtol(var.value, NULL, 10);
++
+ var.key = "catsfc_overclock_cycles";
+ var.value = NULL;
+
+@@ -531,7 +538,7 @@ void retro_run(void)
+
+ if (skip_frame)
+ {
+- if(frameskip_counter < FRAMESKIP_MAX)
++ if(frameskip_counter < frameskip_interval)
+ {
+ IPPU.RenderThisFrame = false;
+ frameskip_counter++;
+diff --git a/libretro_core_options.h b/libretro_core_options.h
+index 8620a4a..dc79a38 100644
+--- a/libretro_core_options.h
++++ b/libretro_core_options.h
+@@ -74,9 +74,9 @@ struct retro_core_option_definition option_defs_us[] = {
+ "Skip frames to avoid audio crackling. Improves\n"
+ "performance at the expense of visual smoothness.",
+ {
+- { "disabled", NULL },
+- { "auto", "Auto" },
+- { "manual", "Manual" },
++ { "disabled", NULL },
++ { "auto", "Auto" },
++ { "auto_threshold", "Threshold" },
+ { NULL, NULL },
+ },
+ "auto"
+@@ -108,6 +108,27 @@ struct retro_core_option_definition option_defs_us[] = {
+ },
+ "33"
+ },
++ {
++ "catsfc_frameskip_interval",
++ "FS Interval",
++ "The maximum number of frames that can be skipped\n"
++ "before a new frame is rendered.",
++ {
++ { "0", NULL },
++ { "1", NULL },
++ { "2", NULL },
++ { "3", NULL },
++ { "4", NULL },
++ { "5", NULL },
++ { "6", NULL },
++ { "7", NULL },
++ { "8", NULL },
++ { "9", NULL },
++ { "10", NULL },
++ { NULL, NULL },
++ },
++ "4"
++ },
+ {
+ "catsfc_overclock_cycles",
+ "Overclock (Restart)",