From 16290853978c5c2c174e4dae7e8d341b05716fd1 Mon Sep 17 00:00:00 2001 From: Hairo Date: Tue, 13 May 2025 22:26:28 -0400 Subject: Option to use .srm or .sav for SRAM file. --- config.c | 1 + core.c | 26 +++++++++++++++++++++++--- main.c | 1 + menu.c | 13 +++++++++++++ options.c | 1 + options.h | 1 + 6 files changed, 40 insertions(+), 3 deletions(-) diff --git a/config.c b/config.c index 91835f8..beab9a9 100644 --- a/config.c +++ b/config.c @@ -26,6 +26,7 @@ static const struct { CE_NUM(show_cpu), CE_NUM(limit_frames), CE_NUM(enable_drc), + CE_NUM(use_srm), CE_NUM(audio_buffer_size), CE_NUM(scale_size), CE_NUM(scale_filter), diff --git a/core.c b/core.c index 2521b9a..2a1cf5b 100644 --- a/core.c +++ b/core.c @@ -68,8 +68,12 @@ void sram_write(void) { if (!sram_size) { return; } - - content_based_name(content, filename, MAX_PATH, save_dir, NULL, ".sav"); + + if (use_srm == 1) { + content_based_name(content, filename, MAX_PATH, save_dir, NULL, ".srm"); + } else { + content_based_name(content, filename, MAX_PATH, save_dir, NULL, ".sav"); + } sram_file = fopen(filename, "w"); if (!sram_file) { @@ -98,7 +102,23 @@ void sram_read(void) { return; } - content_based_name(content, filename, MAX_PATH, save_dir, NULL, ".sav"); + if (use_srm == 1) { + content_based_name(content, filename, MAX_PATH, save_dir, NULL, ".srm"); + + sram_file = fopen(filename, "r"); + if (!sram_file) { + memset(filename, 0, sizeof(filename)); + content_based_name(content, filename, MAX_PATH, save_dir, NULL, ".sav"); + } + } else { + content_based_name(content, filename, MAX_PATH, save_dir, NULL, ".sav"); + + sram_file = fopen(filename, "r"); + if (!sram_file) { + memset(filename, 0, sizeof(filename)); + content_based_name(content, filename, MAX_PATH, save_dir, NULL, ".srm"); + } + } sram_file = fopen(filename, "r"); if (!sram_file) { diff --git a/main.c b/main.c index 3637b59..5883bee 100644 --- a/main.c +++ b/main.c @@ -210,6 +210,7 @@ void set_defaults(void) limit_frames = 1; enable_audio = 1; enable_drc = 1; + use_srm = 0; audio_buffer_size = 5; scale_size = SCALE_SIZE_NONE; scale_filter = SCALE_FILTER_NEAREST; diff --git a/menu.c b/menu.c index a76ea44..1d68619 100644 --- a/menu.c +++ b/menu.c @@ -538,6 +538,11 @@ static const char h_scale_filter[] = "When stretching, how missing pixels are filled.\n" "Nearest copies the last pixel. Sharp keeps pixels\n" "aligned where possible. Smooth adds a blur effect."; + +static const char h_use_srm[] = + "Use .srm files for SRAM saves, needed for\n" + "compatibility with mainline retroarch saves.\n" + "Save file compression needs to be off in retroarch."; static const char *men_scale_size[] = { "Native", "Aspect", "Full", NULL}; #else @@ -561,6 +566,12 @@ static const char h_scale_filter[] = "are filled. Nearest copies the last\n" "pixel. Sharp tries to keep pixels\n" "aligned. Smooth adds a blur effect."; + +static const char h_use_srm[] = + "Use .srm files for SRAM saves,\n" + "needed for compatibility with mainline\n" + "retroarch saves. Save file compression\n" + "needs to be off in retroarch."; static const char *men_scale_size[] = { "Native", "Aspect", "Full", "Crop", NULL}; #endif @@ -615,6 +626,8 @@ const char *config_label(int id, int *offs) { static menu_entry e_menu_config_options[] = { + mee_onoff_h ("Use .srm saves", 0, use_srm, 1, h_use_srm), + mee_label (""), mee_cust_nosave ("Save global config", MA_OPT_SAVECFG, mh_savecfg, mgn_saveloadcfg), mee_cust_nosave ("Save game config", MA_OPT_SAVECFG_GAME, mh_savecfg, mgn_saveloadcfg), mee_handler_id_h ("Delete game config", MA_OPT_RMCFG_GAME, mh_rmcfg, h_rm_config_game), diff --git a/options.c b/options.c index decc29c..7c9c921 100644 --- a/options.c +++ b/options.c @@ -13,6 +13,7 @@ int show_hud; int limit_frames; int enable_audio; int enable_drc; +int use_srm; unsigned audio_buffer_size; enum scale_size scale_size; enum scale_filter scale_filter; diff --git a/options.h b/options.h index c76e251..3b8e7f5 100644 --- a/options.h +++ b/options.h @@ -9,6 +9,7 @@ extern int show_hud; extern int limit_frames; extern int enable_audio; extern int enable_drc; +extern int use_srm; extern unsigned audio_buffer_size; extern enum scale_size scale_size; extern enum scale_filter scale_filter; -- cgit v1.2.3