From 420f48fc277b8c69ed1dbf91df1749e8f068a474 Mon Sep 17 00:00:00 2001 From: digitalLumberjack Date: Sat, 5 Apr 2025 13:23:18 +0200 Subject: [PATCH] fix(system): somehow fix the n64 emulation on rpi5 - BR2_PACKAGE_LIBRETRO_MUPEN64PLUS_NX is now default as it's the only one having dynarec working with pagesize 16k - parallel n64 core is now started with cached_interpreter (only on pi5) - we should work on making dynarec work with pagesize 16k one day --- configs/recalbox-rpi5_64_defconfig | 15 ++++++++------- package/recalbox-romfs2/systems/64dd/system.ini | 3 +++ package/recalbox-romfs2/systems/n64/system.ini | 2 ++ .../generators/libretro/libretroCores.py | 2 ++ .../tests/generators/libretroGenerator_test.py | 11 +++++++++++ 5 files changed, 26 insertions(+), 7 deletions(-) diff --git a/configs/recalbox-rpi5_64_defconfig b/configs/recalbox-rpi5_64_defconfig index 4ca1dae374..6f20cf1585 100644 --- a/configs/recalbox-rpi5_64_defconfig +++ b/configs/recalbox-rpi5_64_defconfig @@ -191,13 +191,14 @@ BR2_PACKAGE_XARCADE2JSTICK=y BR2_PACKAGE_LINAPPLE_PIE=y BR2_PACKAGE_DUCKSTATION=y BR2_PACKAGE_SOLARUS_RECALBOX=y -BR2_PACKAGE_MUPEN64PLUS_AUDIO_SDL=y -BR2_PACKAGE_MUPEN64PLUS_CORE=y -BR2_PACKAGE_MUPEN64PLUS_INPUT_SDL=y -BR2_PACKAGE_MUPEN64PLUS_VIDEO_RICE=y -BR2_PACKAGE_MUPEN64PLUS_VIDEO_GLIDE64MK2=y -BR2_PACKAGE_MUPEN64PLUS_RSPHLE=y -BR2_PACKAGE_MUPEN64PLUS_UICONSOLE=y +# Removed since dynarec does not work with 16k pagesize +# BR2_PACKAGE_MUPEN64PLUS_AUDIO_SDL=y +# BR2_PACKAGE_MUPEN64PLUS_CORE=y +# BR2_PACKAGE_MUPEN64PLUS_INPUT_SDL=y +# BR2_PACKAGE_MUPEN64PLUS_VIDEO_RICE=y +# BR2_PACKAGE_MUPEN64PLUS_VIDEO_GLIDE64MK2=y +# BR2_PACKAGE_MUPEN64PLUS_RSPHLE=y +# BR2_PACKAGE_MUPEN64PLUS_UICONSOLE=y BR2_PACKAGE_HATARI=y BR2_PACKAGE_ADVANCEMAME=y BR2_PACKAGE_BEEBEM=y diff --git a/package/recalbox-romfs2/systems/64dd/system.ini b/package/recalbox-romfs2/systems/64dd/system.ini index 07156606bb..231f02d8b3 100644 --- a/package/recalbox-romfs2/systems/64dd/system.ini +++ b/package/recalbox-romfs2/systems/64dd/system.ini @@ -43,6 +43,7 @@ crt.multiregion = 1 [core.0] package = BR2_PACKAGE_LIBRETRO_PARALLEL_N64 priority = 1 +priority.rpi5_64 = 2 emulator = "libretro" core = "parallel_n64" extensions = ".bin .ndd" @@ -55,6 +56,7 @@ crt.available = 1 [core.1] package = BR2_PACKAGE_LIBRETRO_MUPEN64PLUS_NX priority = 2 +priority.rpi5_64 = 1 emulator = "libretro" core = "mupen64plus_next" extensions = ".bin .n64 .ndd .v64 .z64" @@ -62,3 +64,4 @@ netplay = 0 softpatching = 0 compatibility = low speed = unknown +crt.available = 1 diff --git a/package/recalbox-romfs2/systems/n64/system.ini b/package/recalbox-romfs2/systems/n64/system.ini index ffe36a9e01..d9280ea5b3 100644 --- a/package/recalbox-romfs2/systems/n64/system.ini +++ b/package/recalbox-romfs2/systems/n64/system.ini @@ -125,6 +125,7 @@ crt.available = 1 [core.7] package = BR2_PACKAGE_LIBRETRO_MUPEN64PLUS_NX priority = 8 +priority.rpi5_64 = 1 emulator = "libretro" core = "mupen64plus_next" extensions = ".n64 .v64 .z64 .zip .7z" @@ -132,6 +133,7 @@ netplay = 0 softpatching = 1 compatibility = high speed = high +crt.available = 1 [core.8] package = BR2_PACKAGE_MUPEN64PLUS_VIDEO_RICE diff --git a/projects/configgen/configgen/generators/libretro/libretroCores.py b/projects/configgen/configgen/generators/libretro/libretroCores.py index 30ac14ef21..dc10ceec60 100644 --- a/projects/configgen/configgen/generators/libretro/libretroCores.py +++ b/projects/configgen/configgen/generators/libretro/libretroCores.py @@ -40,6 +40,8 @@ class LibretroCores: coreSettings.setString("parallel-n64-64dd-hardware", '"disabled"') coreSettings.setString("parallel-n64-gfxplugin", '"auto"') coreSettings.setString("parallel-n64-alt-map", '"disabled"') + if Architecture().isPi5: + coreSettings.setString("parallel-n64-cpucore", '"cached_interpreter"') @staticmethod def configureMUPEN64(coreSettings: keyValueSettings): diff --git a/projects/configgen/tests/generators/libretroGenerator_test.py b/projects/configgen/tests/generators/libretroGenerator_test.py index 4d5755e44f..636af86d65 100644 --- a/projects/configgen/tests/generators/libretroGenerator_test.py +++ b/projects/configgen/tests/generators/libretroGenerator_test.py @@ -321,3 +321,14 @@ def test_widescreen_mode_disabled_tate(mocker, emulator, controller_configuratio assert 'reicast_widescreen_hack = "disabled"' in coreConf assert '/usr/lib/libretro/flycast_libretro.so' in command.array + +def test_given_rpi5_and_n64_parallel_then_avoid_dynarec(mocker, emulator, controller_configuration): + mocker.patch('configgen.utils.architecture.Architecture.isPi5', return_value=True) + + recalbox_conf = keyValueSettings("", True) + n64 = Emulator(name='n64', videoMode='1920x1080', ratio='auto', emulator='libretro', core='parallel_n64') + n64.configure(recalbox_conf, ExtraArguments("", "", "", "", "", "", "", "", "", "", "", "", "")) + emulator.generate(n64, controller_configuration, recalbox_conf, Arguments('path/to/rom.zip')) + + coreConf = Path(libretroConfigurations.recalboxFiles.retroarchCoreCustom).read_text() + assert 'parallel-n64-cpucore = "cached_interpreter"' in coreConf -- GitLab