From e506386fc683b18c2e25a27e8c3f7a220a92e5e1 Mon Sep 17 00:00:00 2001 From: neonloop Date: Thu, 10 Feb 2022 15:46:51 +0000 Subject: Updates cores and moves to snes9x2005 fork --- Makefile | 8 +- menu.c | 4 +- options.c | 3 - overrides.h | 2 + overrides/beetle-pce-fast.h | 28 +++--- overrides/fceumm.h | 4 + overrides/fmsx.h | 72 ++++++++++++++ overrides/mame2000.h | 25 +++-- overrides/pcsx_rearmed.h | 4 + overrides/smsplus.h | 10 ++ overrides/snes9x2005.h | 4 + .../beetle-pce-fast/0001-frameskip-interval.patch | 26 ++--- patches/mame2000/1000-trimui-build.patch | 20 +--- patches/snes9x2005/0001-frameskip-interval.patc_ | 107 +++++++++++++++++++++ patches/snes9x2005/0001-frameskip-interval.patch | 107 --------------------- patches/snes9x2005/1000-trimui-support.patc_ | 46 +++++++++ patches/snes9x2005/1000-trimui-support.patch | 46 --------- 17 files changed, 308 insertions(+), 208 deletions(-) create mode 100644 patches/snes9x2005/0001-frameskip-interval.patc_ delete mode 100644 patches/snes9x2005/0001-frameskip-interval.patch create mode 100644 patches/snes9x2005/1000-trimui-support.patc_ delete mode 100644 patches/snes9x2005/1000-trimui-support.patch diff --git a/Makefile b/Makefile index 42f18e4..dcad83b 100644 --- a/Makefile +++ b/Makefile @@ -50,6 +50,9 @@ quicknes_REPO = https://github.com/libretro/QuickNES_Core smsplus-gx_MAKEFILE = Makefile.libretro smsplus-gx_CORE = smsplus_libretro.so +snes9x2005_REPO = https://git.crowdedwood.com/snes9x2005 +snes9x2005_REVISION = performance + ifeq ($(platform), trimui) OBJS += plat_trimui.o CFLAGS += -mcpu=arm926ej-s -mtune=arm926ej-s -fno-PIC -DCONTENT_DIR='"/mnt/SDCARD/Roms"' @@ -62,6 +65,7 @@ endif ifeq ($(DEBUG), 1) CFLAGS += -Og -g + LDFLAGS += -g else CFLAGS += -Ofast -DNDEBUG @@ -125,8 +129,10 @@ $(1): $(if $1_REVISION,cd $(1) && git checkout $($1_REVISION),) (test ! -d patches/$(1)) || (cd $(1) && $(foreach patch, $(sort $(wildcard patches/$(1)/*.patch)), git apply -p1 < ../$(patch) &&) true) -$(1)_libretro.so: $(1) +$(1)/$(1)_libretro.so: $(1) cd $$($1_BUILD_PATH) && $$($1_MAKE) $(PROCS) + +$(1)_libretro.so: $(1)/$(1)_libretro.so cp $$($1_BUILD_PATH)/$(if $($(1)_CORE),$($(1)_CORE),$(1)_libretro.so) $(1)_libretro.so clean-$(1): diff --git a/menu.c b/menu.c index 23a6a27..52a05fe 100644 --- a/menu.c +++ b/menu.c @@ -529,8 +529,8 @@ static int key_config_loop_wrap(int id, int keys) const struct core_override *override = get_overrides(); me_bind_action *actions = CORE_OVERRIDE(override, actions, me_ctrl_actions); size_t action_size = CORE_OVERRIDE(override, action_size, array_size(me_ctrl_actions)); - me_bind_action *emu_actions = emuctrl_actions; - size_t emu_action_size = array_size(emuctrl_actions); + me_bind_action *emu_actions = CORE_OVERRIDE(override, emu_actions, emuctrl_actions); + size_t emu_action_size = CORE_OVERRIDE(override, emu_action_size, array_size(emuctrl_actions)); switch (id) { case MA_CTRL_PLAYER1: diff --git a/options.c b/options.c index 54e2607..95b4c71 100644 --- a/options.c +++ b/options.c @@ -287,9 +287,6 @@ bool options_changed(void) { } void options_update_changed(void) { - if (core_options.changed) - return; - for(size_t i = 0; i < core_options.len; i++) { struct core_option_entry* entry = &core_options.entries[i]; if (entry->value != entry->prev_value) { diff --git a/overrides.h b/overrides.h index 328a5d6..fd1f9c2 100644 --- a/overrides.h +++ b/overrides.h @@ -32,6 +32,8 @@ struct core_override { const struct core_override_startup_msg *startup_msg; me_bind_action* actions; const size_t action_size; + me_bind_action* emu_actions; + const size_t emu_action_size; const struct core_override_option* options; int block_load_content; }; diff --git a/overrides/beetle-pce-fast.h b/overrides/beetle-pce-fast.h index a16b044..010dc8f 100644 --- a/overrides/beetle-pce-fast.h +++ b/overrides/beetle-pce-fast.h @@ -20,36 +20,36 @@ static const struct core_override_option beetle_pce_fast_core_option_overrides[] .desc = "FS Interval", }, { - .key = "pce_hoverscan", + .key = "pce_fast_hoverscan", .desc = "Horiz. Overscan", .info = "Modify the horizontal overscan. (352 Width Mode Only)", }, { - .key = "pce_turbo_toggling", + .key = "pce_fast_turbo_toggling", .info = "Change III / IV to Toggle Turbo II / Toggle Turbo I", }, { - .key = "pce_sound_channel_0_volume", + .key = "pce_fast_sound_channel_0_volume", .desc = "Channel 0 Volume", }, { - .key = "pce_sound_channel_1_volume", + .key = "pce_fast_sound_channel_1_volume", .desc = "Channel 1 Volume", }, { - .key = "pce_sound_channel_2_volume", + .key = "pce_fast_sound_channel_2_volume", .desc = "Channel 2 Volume", }, { - .key = "pce_sound_channel_3_volume", + .key = "pce_fast_sound_channel_3_volume", .desc = "Channel 3 Volume", }, { - .key = "pce_sound_channel_4_volume", + .key = "pce_fast_sound_channel_4_volume", .desc = "Channel 4 Volume", }, { - .key = "pce_sound_channel_5_volume", + .key = "pce_fast_sound_channel_5_volume", .desc = "Channel 5 Volume", }, { @@ -57,20 +57,24 @@ static const struct core_override_option beetle_pce_fast_core_option_overrides[] .desc = "CD Cache (Restart)", }, { - .key = "pce_ocmultiplier", + .key = "pce_fast_cdbios", + .desc = "CD BIOS (Restart)", + }, + { + .key = "pce_fast_ocmultiplier", .desc = "Overclock (Restart)", .info = "Overclock the emulated CPU by selected multiplier.", }, { - .key = "pce_disable_softreset", + .key = "pce_fast_disable_softreset", .desc = "Disable Soft Reset", }, { - .key = "pce_mouse_sensitivity", + .key = "pce_fast_mouse_sensitivity", .blocked = true, }, { - .key = "pce_turbo_toggle_hotkey", + .key = "pce_fast_turbo_toggle_hotkey", .blocked = true, }, { NULL } diff --git a/overrides/fceumm.h b/overrides/fceumm.h index e0fbc10..71d8f6e 100644 --- a/overrides/fceumm.h +++ b/overrides/fceumm.h @@ -49,6 +49,10 @@ static const struct core_override_option fceumm_core_option_overrides[] = { .key = "fceumm_show_adv_sound_options", .desc = "Show Snd Options", }, + { + .key = "fceumm_game_genie", + .blocked = true + }, { .key = "fceumm_zapper_mode", .blocked = true diff --git a/overrides/fmsx.h b/overrides/fmsx.h index 5365c83..06f66ec 100644 --- a/overrides/fmsx.h +++ b/overrides/fmsx.h @@ -1,6 +1,10 @@ #include "overrides.h" static const struct core_override_option fmsx_core_option_overrides[] = { + { + .key = "fmsx_hires", + .retro_var_value = "High res; Off|Interlaced|Progressive" + }, { .key = "fmsx_mapper_type_mode", .retro_var_value = "Mapper Type; " @@ -23,6 +27,74 @@ static const struct core_override_option fmsx_core_option_overrides[] = { .key = "fmsx_autospace", .retro_var_value = "Autofire SPACE; No|Yes" }, + { + .key = "fmsx_phantom_disk", + .retro_var_value = "Make empty disk; No|Yes" + }, + { + .key = "fmsx_custom_keyboard_up", + .blocked = true + }, + { + .key = "fmsx_custom_keyboard_down", + .blocked = true + }, + { + .key = "fmsx_custom_keyboard_left", + .blocked = true + }, + { + .key = "fmsx_custom_keyboard_right", + .blocked = true + }, + { + .key = "fmsx_custom_keyboard_a", + .blocked = true + }, + { + .key = "fmsx_custom_keyboard_b", + .blocked = true + }, + { + .key = "fmsx_custom_keyboard_y", + .blocked = true + }, + { + .key = "fmsx_custom_keyboard_x", + .blocked = true + }, + { + .key = "fmsx_custom_keyboard_start", + .blocked = true + }, + { + .key = "fmsx_custom_keyboard_select", + .blocked = true + }, + { + .key = "fmsx_custom_keyboard_l", + .blocked = true + }, + { + .key = "fmsx_custom_keyboard_r", + .blocked = true + }, + { + .key = "fmsx_custom_keyboard_l2", + .blocked = true + }, + { + .key = "fmsx_custom_keyboard_r2", + .blocked = true + }, + { + .key = "fmsx_custom_keyboard_l3", + .blocked = true + }, + { + .key = "fmsx_custom_keyboard_r3", + .blocked = true + }, { NULL } }; diff --git a/overrides/mame2000.h b/overrides/mame2000.h index f3912f7..9d306c0 100644 --- a/overrides/mame2000.h +++ b/overrides/mame2000.h @@ -1,3 +1,4 @@ +#include "main.h" #include "overrides.h" static const struct core_override_option mame2000_core_option_overrides[] = { @@ -57,17 +58,27 @@ me_bind_action mame2000_ctrl_actions[] = { NULL, 0 } }; +me_bind_action mame2000_emu_actions[] = +{ + { "Toggle FPS/CPU% ", 1 << EACTION_TOGGLE_HUD }, + { "Toggle FF ", 1 << EACTION_TOGGLE_FF }, + { "Take Screenshot ", 1 << EACTION_SCREENSHOT }, + { NULL, 0 } +}; + const struct core_override_fast_forward mame2000_fast_forward = { .type_key = "mame2000-frameskip", .type_value = "auto", .interval_key = "mame2000-frameskip_interval" }; -#define mame2000_overrides { \ - .core_name = "mame2000", \ - .fast_forward = &mame2000_fast_forward, \ - .actions = mame2000_ctrl_actions, \ - .action_size = array_size(mame2000_ctrl_actions), \ - .options = mame2000_core_option_overrides, \ - .block_load_content = 1 \ +#define mame2000_overrides { \ + .core_name = "mame2000", \ + .fast_forward = &mame2000_fast_forward, \ + .actions = mame2000_ctrl_actions, \ + .action_size = array_size(mame2000_ctrl_actions), \ + .emu_actions = mame2000_emu_actions, \ + .emu_action_size = array_size(mame2000_emu_actions), \ + .options = mame2000_core_option_overrides, \ + .block_load_content = 1 \ } diff --git a/overrides/pcsx_rearmed.h b/overrides/pcsx_rearmed.h index daf0ea6..e68724e 100644 --- a/overrides/pcsx_rearmed.h +++ b/overrides/pcsx_rearmed.h @@ -154,6 +154,10 @@ static const struct core_override_option pcsx_rearmed_core_option_overrides[] = .key = "pcsx_rearmed_display_internal_fps", .blocked = true }, + { + .key = "pcsx_rearmed_icache_emulation", + .blocked = true + }, { NULL } }; diff --git a/overrides/smsplus.h b/overrides/smsplus.h index e540f18..1895792 100644 --- a/overrides/smsplus.h +++ b/overrides/smsplus.h @@ -1,8 +1,14 @@ #include "overrides.h" static const struct core_override_option smsplus_core_option_overrides[] = { + { + .key = "smsplus_sms_bios", + .desc = "SMS BIOS (Restart)", + .info = "Use official BIOS/bootloader, if present in the system directory.", + }, { .key = "smsplus_hardware", + .desc = "Hardware (Restart)", .options = { { "auto", NULL }, { "master system", "sms" }, @@ -13,6 +19,10 @@ static const struct core_override_option smsplus_core_option_overrides[] = { { NULL, NULL }, }, }, + { + .key = "smsplus_region", + .desc = "Region (Restart)", + }, { .key = "smsplus_fm_sound", .desc = "Use FM (Restart)", diff --git a/overrides/snes9x2005.h b/overrides/snes9x2005.h index af2f0ff..237a89a 100644 --- a/overrides/snes9x2005.h +++ b/overrides/snes9x2005.h @@ -31,6 +31,10 @@ static const struct core_override_option snes9x2005_core_option_overrides[] = { .desc = "Reduce Flicker", .info = "Raises sprite limit to reduce flickering in games.", }, + { + .key = "snes9x_2005_dynarec", + .default_value = "enabled", + }, { NULL } }; diff --git a/patches/beetle-pce-fast/0001-frameskip-interval.patch b/patches/beetle-pce-fast/0001-frameskip-interval.patch index c44a893..cdc6894 100644 --- a/patches/beetle-pce-fast/0001-frameskip-interval.patch +++ b/patches/beetle-pce-fast/0001-frameskip-interval.patch @@ -1,8 +1,8 @@ diff --git a/libretro.cpp b/libretro.cpp -index 508577f..c706d96 100644 +index 48fd03a..c0fe238 100644 --- a/libretro.cpp +++ b/libretro.cpp -@@ -1629,13 +1629,11 @@ static uint64_t audio_frames = 0; +@@ -1627,13 +1627,11 @@ static uint64_t audio_frames = 0; static unsigned frameskip_type = 0; static unsigned frameskip_threshold = 0; static uint16_t frameskip_counter = 0; @@ -17,7 +17,7 @@ index 508577f..c706d96 100644 static unsigned audio_latency = 0; static bool update_audio_latency = false; -@@ -1749,6 +1747,7 @@ void retro_init(void) +@@ -1747,6 +1745,7 @@ void retro_init(void) frameskip_type = 0; frameskip_threshold = 0; frameskip_counter = 0; @@ -25,7 +25,7 @@ index 508577f..c706d96 100644 retro_audio_buff_active = false; retro_audio_buff_occupancy = 0; retro_audio_buff_underrun = false; -@@ -1863,8 +1862,10 @@ static void check_variables(bool first_run) +@@ -1861,8 +1860,10 @@ static void check_variables(bool first_run) { if (strcmp(var.value, "auto") == 0) frameskip_type = 1; @@ -37,7 +37,7 @@ index 508577f..c706d96 100644 } /* Reinitialise frameskipping, if required */ -@@ -1878,6 +1879,13 @@ static void check_variables(bool first_run) +@@ -1876,6 +1877,13 @@ static void check_variables(bool first_run) if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) frameskip_threshold = strtol(var.value, NULL, 10); @@ -48,10 +48,10 @@ index 508577f..c706d96 100644 + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) + frameskip_interval = strtol(var.value, NULL, 10); + - var.key = "pce_hoverscan"; + var.key = "pce_fast_hoverscan"; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) -@@ -2357,16 +2365,19 @@ void retro_run(void) +@@ -2355,16 +2363,19 @@ void retro_run(void) case 1: /* auto */ skip_frame = retro_audio_buff_underrun ? 1 : 0; break; @@ -74,15 +74,15 @@ index 508577f..c706d96 100644 skip_frame = 0; frameskip_counter = 0; diff --git a/libretro_core_options.h b/libretro_core_options.h -index 28d27c6..1fedbd4 100644 +index 4b1a0a7..0e664b9 100644 --- a/libretro_core_options.h +++ b/libretro_core_options.h -@@ -102,13 +102,14 @@ struct retro_core_option_v2_definition option_defs_us[] = { +@@ -97,13 +97,14 @@ struct retro_core_option_v2_definition option_defs_us[] = { "pce_fast_frameskip", "Frameskip", NULL, -- "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 buffer under-run (crackling). Improves performance at the expense of visual smoothness. 'Auto' skips frames when advised by the frontend. 'Auto (Threshold)' utilises the 'Frameskip Threshold (%)' setting. 'Fixed Interval' utilises the 'Frameskip Interval' setting.", +- "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' utilizes the 'Frameskip Threshold (%)' setting.", ++ "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. 'Auto (Threshold)' utilises the 'Frameskip Threshold (%)' setting. 'Fixed Interval' utilizes the 'Frameskip Interval' setting.", NULL, "video", { @@ -96,7 +96,7 @@ index 28d27c6..1fedbd4 100644 { NULL, NULL }, }, "disabled" -@@ -141,6 +142,28 @@ struct retro_core_option_v2_definition option_defs_us[] = { +@@ -136,6 +137,28 @@ struct retro_core_option_v2_definition option_defs_us[] = { }, "33" }, @@ -123,5 +123,5 @@ index 28d27c6..1fedbd4 100644 + "2" + }, { - "pce_hoverscan", + "pce_fast_hoverscan", "Horizontal Overscan (352 Width Mode Only)", diff --git a/patches/mame2000/1000-trimui-build.patch b/patches/mame2000/1000-trimui-build.patch index b02c1cc..6368afc 100644 --- a/patches/mame2000/1000-trimui-build.patch +++ b/patches/mame2000/1000-trimui-build.patch @@ -1,8 +1,8 @@ diff --git a/Makefile b/Makefile -index 4b0667a..34df34e 100644 +index 8112d85..8f3555e 100644 --- a/Makefile +++ b/Makefile -@@ -335,6 +335,26 @@ else ifeq ($(platform), gcw0) +@@ -321,6 +321,26 @@ else ifeq ($(platform), gcw0) DISABLE_ERROR_LOGGING := 1 CFLAGS += -march=mips32 -mtune=mips32r2 -mhard-float @@ -29,7 +29,7 @@ index 4b0667a..34df34e 100644 # Windows MSVC 2010 x64 else ifeq ($(platform), windows_msvc2010_x64) CC = cl.exe -@@ -522,6 +542,8 @@ endif +@@ -508,6 +528,8 @@ endif ifeq ($(DEBUG), 1) CFLAGS += -O0 -g @@ -38,17 +38,3 @@ index 4b0667a..34df34e 100644 else CFLAGS += -O2 -DNDEBUG endif -@@ -531,6 +553,13 @@ RM = rm -f - LIBS = -lm - OBJ = obj - -+ifeq ($(PROFILE), GENERATE) -+ CFLAGS += -fprofile-generate=./profile/mame2000 -+ LIBS += -lgcov -+else ifeq ($(PROFILE), APPLY) -+ CFLAGS += -fprofile-use -fprofile-dir=../profile/mame2000 -fbranch-probabilities -+endif -+ - ifeq ($(HAVE_RZLIB),) - ZLIB_INCLUDE := -Isrc/zlib - endif diff --git a/patches/snes9x2005/0001-frameskip-interval.patc_ b/patches/snes9x2005/0001-frameskip-interval.patc_ new file mode 100644 index 0000000..f1c431d --- /dev/null +++ b/patches/snes9x2005/0001-frameskip-interval.patc_ @@ -0,0 +1,107 @@ +diff --git a/libretro.c b/libretro.c +index 9b4599e..c768c42 100644 +--- a/libretro.c ++++ b/libretro.c +@@ -58,13 +58,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; +@@ -345,6 +343,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; +@@ -418,7 +417,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; + } + +@@ -430,6 +429,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 = "snes9x_2005_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 = "snes9x_2005_overclock_cycles"; + var.value = NULL; + +@@ -535,7 +542,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 9b89154..41d5ff1 100644 +--- a/libretro_core_options.h ++++ b/libretro_core_options.h +@@ -87,9 +87,9 @@ struct retro_core_option_v2_definition option_defs_us[] = { + NULL, + NULL, + { +- { "disabled", NULL }, +- { "auto", "Auto" }, +- { "manual", "Manual" }, ++ { "disabled", NULL }, ++ { "auto", "Auto" }, ++ { "auto_threshold", "Threshold" }, + { NULL, NULL }, + }, + "disabled" +@@ -122,6 +122,29 @@ struct retro_core_option_v2_definition option_defs_us[] = { + }, + "33" + }, ++ { ++ "snes9x_2005_frameskip_interval", ++ "Frameskip Interval", ++ NULL, ++ "The maximum number of frames that can be skipped before a new frame is rendered.", ++ NULL, ++ NULL, ++ { ++ { "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" ++ }, + { + "snes9x_2005_overclock_cycles", + "Reduce Slowdown (Hack, Unsafe, Restart)", diff --git a/patches/snes9x2005/0001-frameskip-interval.patch b/patches/snes9x2005/0001-frameskip-interval.patch deleted file mode 100644 index f1c431d..0000000 --- a/patches/snes9x2005/0001-frameskip-interval.patch +++ /dev/null @@ -1,107 +0,0 @@ -diff --git a/libretro.c b/libretro.c -index 9b4599e..c768c42 100644 ---- a/libretro.c -+++ b/libretro.c -@@ -58,13 +58,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; -@@ -345,6 +343,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; -@@ -418,7 +417,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; - } - -@@ -430,6 +429,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 = "snes9x_2005_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 = "snes9x_2005_overclock_cycles"; - var.value = NULL; - -@@ -535,7 +542,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 9b89154..41d5ff1 100644 ---- a/libretro_core_options.h -+++ b/libretro_core_options.h -@@ -87,9 +87,9 @@ struct retro_core_option_v2_definition option_defs_us[] = { - NULL, - NULL, - { -- { "disabled", NULL }, -- { "auto", "Auto" }, -- { "manual", "Manual" }, -+ { "disabled", NULL }, -+ { "auto", "Auto" }, -+ { "auto_threshold", "Threshold" }, - { NULL, NULL }, - }, - "disabled" -@@ -122,6 +122,29 @@ struct retro_core_option_v2_definition option_defs_us[] = { - }, - "33" - }, -+ { -+ "snes9x_2005_frameskip_interval", -+ "Frameskip Interval", -+ NULL, -+ "The maximum number of frames that can be skipped before a new frame is rendered.", -+ NULL, -+ NULL, -+ { -+ { "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" -+ }, - { - "snes9x_2005_overclock_cycles", - "Reduce Slowdown (Hack, Unsafe, Restart)", diff --git a/patches/snes9x2005/1000-trimui-support.patc_ b/patches/snes9x2005/1000-trimui-support.patc_ new file mode 100644 index 0000000..96dcb78 --- /dev/null +++ b/patches/snes9x2005/1000-trimui-support.patc_ @@ -0,0 +1,46 @@ +diff --git a/Makefile b/Makefile +index b293853..bc220bd 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 ++ LIBS += -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/1000-trimui-support.patch b/patches/snes9x2005/1000-trimui-support.patch deleted file mode 100644 index 96dcb78..0000000 --- a/patches/snes9x2005/1000-trimui-support.patch +++ /dev/null @@ -1,46 +0,0 @@ -diff --git a/Makefile b/Makefile -index b293853..bc220bd 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 -+ LIBS += -lgcov -+else ifeq ($(PROFILE), APPLY) -+ CFLAGS += -fprofile-use -fprofile-dir=../profile/snes9x2005 -fbranch-probabilities -+endif -+ - ifneq (,$(findstring msvc,$(platform))) - ifeq ($(DEBUG),1) - FLAGS += -MTd -- cgit v1.2.3