From 4e760fcc8b31de261268e984395875a008fdf91c Mon Sep 17 00:00:00 2001 From: Monroe88 Date: Fri, 20 May 2016 23:48:35 -0500 Subject: [PATCH 1/4] Make core provided display aspect ratio have 8:7 pixel aspect ratio --- src/drivers/libretro/libretro.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/drivers/libretro/libretro.c b/src/drivers/libretro/libretro.c index 6032ac0..d1d1404 100644 --- a/src/drivers/libretro/libretro.c +++ b/src/drivers/libretro/libretro.c @@ -572,7 +572,7 @@ void retro_get_system_av_info(struct retro_system_av_info *info) info->geometry.base_height = height; info->geometry.max_width = width; info->geometry.max_height = height; - info->geometry.aspect_ratio = 4.0 / 3.0; + info->geometry.aspect_ratio = (width * (8.0 / 7.0)) / height; info->timing.sample_rate = 32050.0; if (FSettings.PAL) info->timing.fps = 838977920.0/16777215.0; From f630a20ae6dfedfd6a722a0be89fecc5f505a5db Mon Sep 17 00:00:00 2001 From: Monroe88 Date: Sat, 21 May 2016 00:32:55 -0500 Subject: [PATCH 2/4] Make crop overscan into a runtime core option, and update geometry. --- src/drivers/libretro/libretro.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/drivers/libretro/libretro.c b/src/drivers/libretro/libretro.c index d1d1404..b6e59d0 100644 --- a/src/drivers/libretro/libretro.c +++ b/src/drivers/libretro/libretro.c @@ -548,6 +548,7 @@ void retro_set_environment(retro_environment_t cb) { "fceumm_palette", "Color Palette; asqrealc|loopy|quor|chris|matt|pasofami|crashman|mess|zaphod-cv|zaphod-smb|vs-drmar|vs-cv|vs-smb|nintendo-vc|yuv-v3|unsaturated-v5|sony-cxa2025as-us|pal|raw" }, { "fceumm_nospritelimit", "No Sprite Limit; disabled|enabled" }, { "fceumm_overclocking", "Overclocking; disabled|2x" }, + { "fceumm_overscan", "Crop Overscan; enabled|disabled" }, { NULL, NULL }, }; @@ -689,6 +690,7 @@ static void check_variables(void) { static int overclock_state = -1; struct retro_variable var = {0}; + struct retro_system_av_info av_info; var.key = "fceumm_palette"; @@ -780,6 +782,19 @@ static void check_variables(void) FCEU_InitVirtualVideo(); } } + + var.key = "fceumm_overscan"; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) + { + if (!strcmp(var.value, "enabled")) + use_overscan = false; + else if(!strcmp(var.value, "disabled")) + use_overscan = true; + } + + retro_get_system_av_info(&av_info); + environ_cb(RETRO_ENVIRONMENT_SET_GEOMETRY, &av_info); } /* @@ -1413,9 +1428,6 @@ bool retro_load_game(const struct retro_game_info *game) FCEUD_SoundToggle(); check_variables(); - if (!environ_cb(RETRO_ENVIRONMENT_GET_OVERSCAN, &use_overscan)) - use_overscan = true; - FCEUI_DisableFourScore(1); for (i = 0; i < fourscore_len; i++) From bd53db8be15946b5ec0aebf23451a9f2b503d804 Mon Sep 17 00:00:00 2001 From: Monroe88 Date: Sat, 21 May 2016 01:33:59 -0500 Subject: [PATCH 3/4] Make core-provided aspect ratio into a core option --- src/drivers/libretro/libretro.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/drivers/libretro/libretro.c b/src/drivers/libretro/libretro.c index b6e59d0..d52ed1a 100644 --- a/src/drivers/libretro/libretro.c +++ b/src/drivers/libretro/libretro.c @@ -26,6 +26,9 @@ #include "libretro-common/include/streams/memory_stream.h" +#define NES_8_7_PAR (width * (8.0 / 7.0)) / height +#define NES_4_3 4.0 / 3.0 + #if defined(_3DS) void* linearMemAlign(size_t size, size_t alignment); void linearFree(void* mem); @@ -38,6 +41,7 @@ static retro_audio_sample_batch_t audio_batch_cb = NULL; static retro_environment_t environ_cb = NULL; static bool use_overscan; static bool use_raw_palette; +static bool use_par; /* emulator-specific variables */ @@ -549,6 +553,7 @@ void retro_set_environment(retro_environment_t cb) { "fceumm_nospritelimit", "No Sprite Limit; disabled|enabled" }, { "fceumm_overclocking", "Overclocking; disabled|2x" }, { "fceumm_overscan", "Crop Overscan; enabled|disabled" }, + { "fceumm_aspect", "Core-provided aspect ratio; 8:7 PAR|4:3" }, { NULL, NULL }, }; @@ -573,7 +578,7 @@ void retro_get_system_av_info(struct retro_system_av_info *info) info->geometry.base_height = height; info->geometry.max_width = width; info->geometry.max_height = height; - info->geometry.aspect_ratio = (width * (8.0 / 7.0)) / height; + info->geometry.aspect_ratio = use_par ? NES_8_7_PAR : NES_4_3; info->timing.sample_rate = 32050.0; if (FSettings.PAL) info->timing.fps = 838977920.0/16777215.0; @@ -793,6 +798,16 @@ static void check_variables(void) use_overscan = true; } + var.key = "fceumm_aspect"; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) + { + if (!strcmp(var.value, "8:7 PAR")) + use_par = true; + else if(!strcmp(var.value, "4:3")) + use_par = false; + } + retro_get_system_av_info(&av_info); environ_cb(RETRO_ENVIRONMENT_SET_GEOMETRY, &av_info); } From 6ac652096d5a14972c5733668d2342594e654f49 Mon Sep 17 00:00:00 2001 From: Monroe88 Date: Thu, 11 Aug 2016 20:16:13 -0500 Subject: [PATCH 4/4] Only do SET_GEOMETRY when overscan or aspect core options are changed --- src/drivers/libretro/libretro.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/drivers/libretro/libretro.c b/src/drivers/libretro/libretro.c index d52ed1a..19c07b6 100644 --- a/src/drivers/libretro/libretro.c +++ b/src/drivers/libretro/libretro.c @@ -696,6 +696,7 @@ static void check_variables(void) static int overclock_state = -1; struct retro_variable var = {0}; struct retro_system_av_info av_info; + bool geometry_update = false; var.key = "fceumm_palette"; @@ -792,24 +793,31 @@ static void check_variables(void) if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { - if (!strcmp(var.value, "enabled")) - use_overscan = false; - else if(!strcmp(var.value, "disabled")) - use_overscan = true; + bool newval = (!strcmp(var.value, "disabled")); + if (newval != use_overscan) + { + use_overscan = newval; + geometry_update = true; + } } var.key = "fceumm_aspect"; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { - if (!strcmp(var.value, "8:7 PAR")) - use_par = true; - else if(!strcmp(var.value, "4:3")) - use_par = false; + bool newval = (!strcmp(var.value, "8:7 PAR")); + if (newval != use_par) + { + use_par = newval; + geometry_update = true; + } } - retro_get_system_av_info(&av_info); - environ_cb(RETRO_ENVIRONMENT_SET_GEOMETRY, &av_info); + if (geometry_update) + { + retro_get_system_av_info(&av_info); + environ_cb(RETRO_ENVIRONMENT_SET_GEOMETRY, &av_info); + } } /*