From 79be404b07a8955bde6eedd260f38c764d51e9eb Mon Sep 17 00:00:00 2001 From: Pit64 Date: Fri, 13 Jun 2025 22:34:21 +0200 Subject: [PATCH] feat(emulators): bump n64 and 64dd emulators - Fix configgen to be able to use any controller correctly with mupen64plus standalone. Until now, some controllers were not correctly mapped because we are using udev for controller names but mupen64plus prefers sdl. - Fix 64dd games with lr-parallel-n64 Remove part of commit baba05c542107c3fdc0728319d7ab387cae1a033 --- .../0001-force-rice-plugin.patch | 5 +- .../0001-add-odroidgo2-support.patch | 6 +- .../0002-compile-asm-defines-no-lto.patch | 8 +-- ...fix-missing-extern-log_cb-definition.patch | 8 +-- .../0004-fix-pagesize.patch | 16 ++++- .../libretro-mupen64plus-nx.mk | 7 +- .../0001-add-odroidgo2-board.patch | 40 +++++++---- ...-board.patch => 0002-add-rpi5-board.patch} | 16 ++++- .../0003-bios-path.patch | 20 +++++- .../0004-fix-pagesize.patch | 18 ++++- .../0005-fix-64dd-launch.patch | 68 +++++++++++++++++++ .../libretro-parallel-n64.mk | 7 +- .../mupen64plus-audio-sdl.mk | 4 +- .../5000-fix-gcc14-compilation.patch | 18 ++++- .../mupen64plus-core/5001-fix-pagesize.patch | 26 +++++-- package/mupen64plus-core/mupen64plus-core.mk | 4 +- .../mupen64plus-gliden64-20.mk | 2 +- .../mupen64plus-gliden64.mk | 4 +- .../mupen64plus-input-sdl.mk | 4 +- package/mupen64plus-omx/mupen64plus-omx.mk | 1 + .../mupen64plus-rsphle/mupen64plus-rsphle.mk | 4 +- .../mupen64plus-uiconsole.mk | 4 +- .../mupen64plus-video-gles2n64.mk | 1 + .../mupen64plus-video-gles2rice.mk | 2 +- .../mupen64plus-video-glide64mk2.mk | 4 +- .../mupen64plus-video-rice.mk | 4 +- .../configgen/generators/mupen/mupenConfig.py | 13 ++-- .../generators/mupen/mupenControllers.py | 29 +++++--- .../generators/mupen/mupenGenerator.py | 4 +- .../tests/generators/mupenGenerator_test.py | 8 ++- 30 files changed, 268 insertions(+), 87 deletions(-) rename package/libretro-parallel-n64/{0001-add-rpi5-board.patch => 0002-add-rpi5-board.patch} (64%) create mode 100644 package/libretro-parallel-n64/0005-fix-64dd-launch.patch diff --git a/board/recalbox/rpi/patches/libretro-parallel-n64/0001-force-rice-plugin.patch b/board/recalbox/rpi/patches/libretro-parallel-n64/0001-force-rice-plugin.patch index 8e3968c018..e6e96b8177 100644 --- a/board/recalbox/rpi/patches/libretro-parallel-n64/0001-force-rice-plugin.patch +++ b/board/recalbox/rpi/patches/libretro-parallel-n64/0001-force-rice-plugin.patch @@ -1,6 +1,6 @@ --- ./libretro/libretro.c.orig 2021-03-16 23:47:27.547996607 +0100 +++ ./libretro/libretro.c 2021-03-16 23:51:25.700753540 +0100 -@@ -203,10 +203,14 @@ +@@ -206,10 +206,14 @@ } #endif @@ -16,3 +16,6 @@ return; } #endif +-- +2.51.1 + diff --git a/package/libretro-mupen64plus-nx/0001-add-odroidgo2-support.patch b/package/libretro-mupen64plus-nx/0001-add-odroidgo2-support.patch index 584653e965..5edc1f7fda 100644 --- a/package/libretro-mupen64plus-nx/0001-add-odroidgo2-support.patch +++ b/package/libretro-mupen64plus-nx/0001-add-odroidgo2-support.patch @@ -1,17 +1,17 @@ From 215317ce4850a903c9229d8c836bba7cef8ff2e4 Mon Sep 17 00:00:00 2001 From: David Barbion Date: Sat, 22 Jan 2022 09:34:54 +0100 -Subject: [PATCH 1/3] add odroidgo2 support +Subject: [PATCH 1/4] add odroidgo2 support --- Makefile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Makefile b/Makefile -index 3d2b37c..9d9b3d3 100644 +index 481e8b9..dcb1899 100644 --- a/Makefile +++ b/Makefile -@@ -234,6 +234,12 @@ else ifneq (,$(findstring odroid64,$(platform))) +@@ -259,6 +259,12 @@ else ifneq (,$(findstring odroid64,$(platform))) GLES = 0 GLES3= 1 GL_LIB := -lGLESv3 diff --git a/package/libretro-mupen64plus-nx/0002-compile-asm-defines-no-lto.patch b/package/libretro-mupen64plus-nx/0002-compile-asm-defines-no-lto.patch index 94f465abed..532926b00d 100644 --- a/package/libretro-mupen64plus-nx/0002-compile-asm-defines-no-lto.patch +++ b/package/libretro-mupen64plus-nx/0002-compile-asm-defines-no-lto.patch @@ -1,22 +1,22 @@ From 0ea91aa9227f73e83bd04a18cb9ba36bc8450c1d Mon Sep 17 00:00:00 2001 From: David Barbion Date: Sat, 22 Jan 2022 09:35:17 +0100 -Subject: [PATCH 2/3] compile asm defines no lto +Subject: [PATCH 2/4] compile asm defines no lto --- Makefile | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Makefile b/Makefile -index 9d9b3d3..0ff8982 100644 +index 27c62dd..dfd4bd2 100644 --- a/Makefile +++ b/Makefile -@@ -590,6 +590,14 @@ $(AWK_DEST_DIR)/asm_defines_gas.h: $(AWK_DEST_DIR)/asm_defines_nasm.h +@@ -686,6 +686,14 @@ $(AWK_DEST_DIR)/asm_defines_gas.h: $(AWK_DEST_DIR)/asm_defines_nasm.h $(AWK_DEST_DIR)/asm_defines_nasm.h: $(ASM_DEFINES_OBJ) $(STRINGS) "$<" | $(TR) -d '\r' | $(AWK) -v dest_dir="$(AWK_DEST_DIR)" -f $(CORE_DIR)/tools/gen_asm_defines.awk +# It is important to disable LTO for this object file -+# otherwise we can't extract usefull information from it. ++# otherwise we can't extract useful information from it. +$(ASM_DEFINES_OBJ): $(CORE_DIR)/src/asm_defines/asm_defines.c + $(COMPILE.c) -fno-lto -o $@ $< + diff --git a/package/libretro-mupen64plus-nx/0003-fix-missing-extern-log_cb-definition.patch b/package/libretro-mupen64plus-nx/0003-fix-missing-extern-log_cb-definition.patch index fac1786533..bb9a0704bf 100644 --- a/package/libretro-mupen64plus-nx/0003-fix-missing-extern-log_cb-definition.patch +++ b/package/libretro-mupen64plus-nx/0003-fix-missing-extern-log_cb-definition.patch @@ -1,18 +1,18 @@ From f7f336d7abd2047399774bb58d4051fcc71262e3 Mon Sep 17 00:00:00 2001 From: David Barbion Date: Sat, 22 Jan 2022 09:40:22 +0100 -Subject: [PATCH 3/3] fix missing extern log_cb definition +Subject: [PATCH 3/4] fix missing extern log_cb definition --- mupen64plus-core/src/backends/file_storage.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mupen64plus-core/src/backends/file_storage.c b/mupen64plus-core/src/backends/file_storage.c -index 9fbbf43..b07b515 100644 +index 0f281d2..ecc7e73 100644 --- a/mupen64plus-core/src/backends/file_storage.c +++ b/mupen64plus-core/src/backends/file_storage.c -@@ -32,6 +32,8 @@ - +@@ -33,6 +33,8 @@ + #include #include +extern retro_log_printf_t log_cb; diff --git a/package/libretro-mupen64plus-nx/0004-fix-pagesize.patch b/package/libretro-mupen64plus-nx/0004-fix-pagesize.patch index 598e8579b0..c980d7131e 100644 --- a/package/libretro-mupen64plus-nx/0004-fix-pagesize.patch +++ b/package/libretro-mupen64plus-nx/0004-fix-pagesize.patch @@ -1,6 +1,16 @@ ---- a/mupen64plus-core/src/device/r4300/new_dynarec/new_dynarec.c 2025-04-06 11:32:23.526503234 +0200 -+++ b/mupen64plus-core/src/device/r4300/new_dynarec/new_dynarec.c 2025-04-06 11:30:27.273791437 +0200 -@@ -8632,7 +8632,7 @@ +From b704c31fbe6c3e3f74ed378d8b7ab5c4d90602af Mon Sep 17 00:00:00 2001 +From: Bkg2k +Date: Fri, 06 Apr 2025 11:32:23 +0100 +Subject: [PATCH 4/4] fix pagesize + +--- + mupen64plus-core/src/device/r4300/new_dynarec/new_dynarec.c | 2 +- + 1 file changed, 1 insertions(+), 1 deletion(-) + +diff --git a//mupen64plus-core/src/device/r4300/new_dynarec/new_dynarec.c b//mupen64plus-core/src/device/r4300/new_dynarec/new_dynarec.c +--- a/mupen64plus-core/src/device/r4300/new_dynarec/new_dynarec.c ++++ b/mupen64plus-core/src/device/r4300/new_dynarec/new_dynarec.c +@@ -8632,7 +8632,7 @@ static void pagespan_ds(void) /**** Recompiler ****/ #ifdef HAVE_LIBNX diff --git a/package/libretro-mupen64plus-nx/libretro-mupen64plus-nx.mk b/package/libretro-mupen64plus-nx/libretro-mupen64plus-nx.mk index a457135aff..7684c8a3af 100644 --- a/package/libretro-mupen64plus-nx/libretro-mupen64plus-nx.mk +++ b/package/libretro-mupen64plus-nx/libretro-mupen64plus-nx.mk @@ -4,8 +4,8 @@ # ################################################################################ -# Commit of 2024/07/19 -LIBRETRO_MUPEN64PLUS_NX_VERSION = c7cd8edcd015ddcbd4a2e984573c9c1d1ddd0b6e +# Commit of 2025/11/14 +LIBRETRO_MUPEN64PLUS_NX_VERSION = 680e033fc8ed1a49df7b156d97164e0050ee13bc LIBRETRO_MUPEN64PLUS_NX_SITE = $(call github,libretro,mupen64plus-libretro-nx,$(LIBRETRO_MUPEN64PLUS_NX_VERSION)) LIBRETRO_MUPEN64PLUS_NX_LICENSE = GPLv3 LIBRETRO_MUPEN64PLUS_NX_DEPENDENCIES += host-nasm @@ -72,7 +72,8 @@ define LIBRETRO_MUPEN64PLUS_NX_BUILD_CMDS CPPFLAGS="$(TARGET_CPPFLAGS) $(COMPILER_COMMONS_CPPFLAGS_SO)" \ $(MAKE) NASM="$(HOST_DIR)/bin/nasm" CXX="$(TARGET_CXX)" CC="$(TARGET_CC)" LD="$(TARGET_LD)" \ AR="$(TARGET_AR)" RANLIB="$(TARGET_RANLIB)" -C $(@D)/ -f Makefile platform="$(LIBRETRO_MUPEN64PLUS_NX_PLATFORM)" $(LIBRETRO_MUPEN64PLUS_NX_SUPP_OPT) \ - WITH_DYNAREC=$(LIBRETRO_MUPEN64PLUS_NX_DYNAREC) + WITH_DYNAREC=$(LIBRETRO_MUPEN64PLUS_NX_DYNAREC) \ + GIT_VERSION="$(shell echo $(LIBRETRO_MUPEN64PLUS_NX_VERSION) | cut -c 1-8)" endef define LIBRETRO_MUPEN64PLUS_NX_INSTALL_TARGET_CMDS diff --git a/package/libretro-parallel-n64/0001-add-odroidgo2-board.patch b/package/libretro-parallel-n64/0001-add-odroidgo2-board.patch index 5d1c7aaf9e..aebf605130 100644 --- a/package/libretro-parallel-n64/0001-add-odroidgo2-board.patch +++ b/package/libretro-parallel-n64/0001-add-odroidgo2-board.patch @@ -1,6 +1,17 @@ ---- a/Makefile 2024-12-06 21:07:10.798235213 +0100 -+++ b/Makefile 2024-12-06 21:09:03.325146479 +0100 -@@ -181,18 +181,26 @@ +From 32db227a72ae11b78eca8662e2f8d8de887fe618 Mon Sep 17 00:00:00 2001 +From: David Barbion +Date: Wed, 17 Mar 2021 22:29:33 +0200 +Subject: [PATCH 1/5] add odroidgo2 board + +--- + Makefile | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index fc2885de..22877ee4 100644 +--- a/Makefile ++++ b/Makefile +@@ -179,18 +179,26 @@ ifneq (,$(findstring unix,$(platform))) GLES = 1 GL_LIB := -lGLESv2 CPUFLAGS += -DNO_ASM -DARM -D__arm__ -DARM_ASM -D__NEON_OPT -DNOSSE -DARM_FIX @@ -10,21 +21,24 @@ ifneq (,$(findstring ODROIDC,$(BOARD))) # ODROID-C1 CPUFLAGS += -mcpu=cortex-a5 -mfpu=neon -+ CPUFLAGS += -marm -mfloat-abi=hard ++ CPUFLAGS += -marm -mfloat-abi=hard else ifneq (,$(findstring ODROID-XU,$(BOARD))) # ODROID-XU3 XU4 and XU3-Lite CPUFLAGS += -mcpu=cortex-a15 -mtune=cortex-a15.cortex-a7 -mfpu=neon-vfpv4 -+ CPUFLAGS += -marm -mfloat-abi=hard ++ CPUFLAGS += -marm -mfloat-abi=hard + else ifneq (,$(findstring ODROIDGO2,$(BOARD))) -+ # ODROIDGO2 and ODROIDGO3 (64 bits) -+ HAVE_PARALLEL = 1 -+ WITH_DYNAREC=aarch64 -+ CPUFLAGS += -DCLASSIC -DARM64 -+ CPUFLAGS += -march=armv8-a+crc+simd -mtune=cortex-a35 -mcpu=cortex-a35 ++ # ODROIDGO2 and ODROIDGO3 (64 bits) ++ HAVE_PARALLEL = 1 ++ WITH_DYNAREC = aarch64 ++ CPUFLAGS += -DCLASSIC -DARM64 ++ CPUFLAGS += -march=armv8-a+crc+simd -mtune=cortex-a35 -mcpu=cortex-a35 else # ODROID-U3, U2, X2 & X -- CPUFLAGS += -mcpu=cortex-a9 -mfpu=neon -+ CPUFLAGS += -mcpu=cortex-a9 -mfpu=neon -+ CPUFLAGS += -marm -mfloat-abi=hard + CPUFLAGS += -mcpu=cortex-a9 -mfpu=neon ++ CPUFLAGS += -marm -mfloat-abi=hard endif endif + +-- +2.51.1 + diff --git a/package/libretro-parallel-n64/0001-add-rpi5-board.patch b/package/libretro-parallel-n64/0002-add-rpi5-board.patch similarity index 64% rename from package/libretro-parallel-n64/0001-add-rpi5-board.patch rename to package/libretro-parallel-n64/0002-add-rpi5-board.patch index 226b17e3cb..71fb54396d 100644 --- a/package/libretro-parallel-n64/0001-add-rpi5-board.patch +++ b/package/libretro-parallel-n64/0002-add-rpi5-board.patch @@ -1,8 +1,17 @@ +From 922cf811c9f2ef8a5a3f8909d9165915d66c2fe9 Mon Sep 17 00:00:00 2001 +From: Adrien Beudin +Date: Mon, 20 Jan 2025 15:40:28 +0200 +Subject: [PATCH 2/5] add rpi5 board + +--- + Makefile | 10 ++++++++++ + 1 file changed, 10 insertions(+) + diff --git a/Makefile b/Makefile -index 9cf9b6c516..c4927c31f6 100644 +index 22877ee4..16a74323 100644 --- a/Makefile +++ b/Makefile -@@ -177,6 +177,16 @@ ifneq (,$(findstring unix,$(platform))) +@@ -167,6 +167,16 @@ ifneq (,$(findstring unix,$(platform))) HAVE_OPENGL = 0 GLES = 0 GL_LIB := @@ -19,3 +28,6 @@ index 9cf9b6c516..c4927c31f6 100644 else CPUFLAGS += -DARMv5_ONLY -DNO_ASM endif +-- +2.51.1 + diff --git a/package/libretro-parallel-n64/0003-bios-path.patch b/package/libretro-parallel-n64/0003-bios-path.patch index b043e55639..bfaa6016db 100644 --- a/package/libretro-parallel-n64/0003-bios-path.patch +++ b/package/libretro-parallel-n64/0003-bios-path.patch @@ -1,6 +1,17 @@ ---- a/libretro/libretro.c 2023-10-01 19:16:02.280027000 +0200 -+++ b/libretro/libretro.c 2023-10-01 19:18:25.266298360 +0200 -@@ -568,7 +568,7 @@ +From 25216185bd07f3d66db016f3e9cab3dcc39cc000 Mon Sep 17 00:00:00 2001 +From: Pit64 +Date: Wed, 11 Jun 2025 01:07:50 +0200 +Subject: [PATCH 3/5] bios path + +--- + libretro/libretro.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libretro/libretro.c b/libretro/libretro.c +index 16525703..43ab795f 100644 +--- a/libretro/libretro.c ++++ b/libretro/libretro.c +@@ -573,7 +573,7 @@ static bool emu_step_load_data() disk_data = NULL; /* 64DD IPL LOAD - assumes "64DD_IPL.bin" is in system folder */ @@ -9,3 +20,6 @@ if (log_cb) log_cb(RETRO_LOG_INFO, "64DD_IPL.bin path: %s\n", disk_ipl_path); +-- +2.51.1 + diff --git a/package/libretro-parallel-n64/0004-fix-pagesize.patch b/package/libretro-parallel-n64/0004-fix-pagesize.patch index bb5e77ef9e..a2afbb6aeb 100644 --- a/package/libretro-parallel-n64/0004-fix-pagesize.patch +++ b/package/libretro-parallel-n64/0004-fix-pagesize.patch @@ -1,5 +1,16 @@ ---- a/mupen64plus-core/src/r4300/new_dynarec/arm64/linkage_aarch64.S 2025-04-06 11:05:35.859496992 +0200 -+++ b/mupen64plus-core/src/r4300/new_dynarec/arm64/linkage_aarch64.S 2025-04-06 10:58:21.845500243 +0200 +From 4f012a63ac8f4014aa273930476728e87dfbc7f3 Mon Sep 17 00:00:00 2001 +From: Bkg2k +Date: Sun, 6 Apr 2025 11:54:58 +0200 +Subject: [PATCH 4/5] fix pagesize + +--- + mupen64plus-core/src/r4300/new_dynarec/arm64/linkage_aarch64.S | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/mupen64plus-core/src/r4300/new_dynarec/arm64/linkage_aarch64.S b/mupen64plus-core/src/r4300/new_dynarec/arm64/linkage_aarch64.S +index 0cb9af4a..5343d1b2 100644 +--- a/mupen64plus-core/src/r4300/new_dynarec/arm64/linkage_aarch64.S ++++ b/mupen64plus-core/src/r4300/new_dynarec/arm64/linkage_aarch64.S @@ -43,7 +43,7 @@ BSS_SECTION @@ -9,3 +20,6 @@ GLOBAL_VARIABLE(extra_memory, 33554432) GLOBAL_VARIABLE(dynarec_local, 256) GLOBAL_VARIABLE(next_interrupt, 4) +-- +2.51.1 + diff --git a/package/libretro-parallel-n64/0005-fix-64dd-launch.patch b/package/libretro-parallel-n64/0005-fix-64dd-launch.patch new file mode 100644 index 0000000000..887558025b --- /dev/null +++ b/package/libretro-parallel-n64/0005-fix-64dd-launch.patch @@ -0,0 +1,68 @@ +From e027b5fc96e8dc7f49cdc51c182ed26ea2fb6b42 Mon Sep 17 00:00:00 2001 +From: Pit64 +Date: Sun, 19 Oct 2025 18:56:09 +0200 +Subject: [PATCH 5/5] fix 64dd launch + +--- + mupen64plus-core/src/pi/pi_controller.c | 20 ++++---------------- + 1 file1 changed, 4 insertions(+), 16 deletions(-) + +diff --git a/mupen64plus-core/src/pi/pi_controller.c b/mupen64plus-core/src/pi/pi_controller.c +index 70934489..46cc7cc9 100644 +--- a/mupen64plus-core/src/pi/pi_controller.c ++++ b/mupen64plus-core/src/pi/pi_controller.c +@@ -32,13 +32,10 @@ + #include "../r4300/r4300_core.h" + #include "../ri/rdram_detection_hack.h" + #include "../ri/ri_controller.h" +-#include "../ri/safe_rdram.h" + #include "../dd/dd_controller.h" + + #include + +-extern int g_rom_size; +- + enum + { + /* PI_STATUS - read */ +@@ -90,11 +87,7 @@ static void dma_pi_read(struct pi_controller *pi) + dram = (uint8_t*)pi->ri->rdram.dram; + + for (i = 0; i < length; ++i) +- { +- const unsigned int rom_i = (rom_address + i) ^ S8; +- if (rom_i >= (uint32_t)g_rom_size) continue; +- rom[rom_i] = rdram_safe_read_byte(dram, (dram_address + i) ^ S8); +- } ++ rom[(rom_address + i) ^ S8] = dram[(dram_address + i) ^ S8]; + } + else if (pi->regs[PI_CART_ADDR_REG] >= 0x08000000 + && pi->regs[PI_CART_ADDR_REG] < 0x08010000) +@@ -188,10 +181,7 @@ static void dma_pi_write(struct pi_controller *pi) + dram = (uint8_t*)pi->ri->rdram.dram; + + for (i = 0; i < length; ++i) +- { +- const unsigned int rom_i = (rom_address + i) ^ S8; +- rdram_safe_write_byte(dram, (dram_address + i) ^ S8, (rom_i < (uint32_t)g_rom_size) ? rom[rom_i] : 0u); +- } ++ dram[(dram_address + i) ^ S8] = rom[(rom_address + i) ^ S8]; + + invalidate_r4300_cached_code(0x80000000 + dram_address, length); + invalidate_r4300_cached_code(0xa0000000 + dram_address, length); +@@ -284,10 +274,8 @@ static void dma_pi_write(struct pi_controller *pi) + rom = pi->cart_rom.rom; + } + +- for (i = 0; i < length; ++i) { +- const unsigned int rom_i = (rom_address + i) ^ S8; +- rdram_safe_write_byte(dram, (dram_address + i) ^ S8, (rom_i < (uint32_t)g_rom_size) ? rom[rom_i] : 0); +- } ++ for (i = 0; i < length; ++i) ++ dram[(dram_address + i) ^ S8] = rom[(rom_address + i) ^ S8]; + + invalidate_r4300_cached_code(0x80000000 + dram_address, length); + invalidate_r4300_cached_code(0xa0000000 + dram_address, length); +-- +2.51.1 + diff --git a/package/libretro-parallel-n64/libretro-parallel-n64.mk b/package/libretro-parallel-n64/libretro-parallel-n64.mk index ced02f27e2..858622e252 100644 --- a/package/libretro-parallel-n64/libretro-parallel-n64.mk +++ b/package/libretro-parallel-n64/libretro-parallel-n64.mk @@ -4,8 +4,8 @@ # ################################################################################ -# Commit of 2024/10/21 -LIBRETRO_PARALLEL_N64_VERSION = e372c5e327dcd649e9d840ffc3d88480b6866eda +# Commit of 2025/12/04 +LIBRETRO_PARALLEL_N64_VERSION = 1da824e13e725a7144f3245324f43d59623974f8 LIBRETRO_PARALLEL_N64_SITE = $(call github,libretro,parallel-n64,$(LIBRETRO_PARALLEL_N64_VERSION)) LIBRETRO_PARALLEL_N64_LICENSE = GPL-3.0 @@ -79,7 +79,8 @@ define LIBRETRO_PARALLEL_N64_BUILD_CMDS LDFLAGS="$(TARGET_LDFLAGS) $(LIBRETRO_PARALLEL_N64_LDFLAGS)" \ $(MAKE) CXX="$(TARGET_CXX)" CC="$(TARGET_CC)" -C $(@D)/ -f Makefile \ platform="$(LIBRETRO_PARALLEL_N64_PLATFORM)" $(LIBRETRO_PARALLEL_N64_SUPP_OPT) \ - WITH_DYNAREC=$(LIBRETRO_PARALLEL_N64_DYNAREC) + WITH_DYNAREC=$(LIBRETRO_PARALLEL_N64_DYNAREC) \ + GIT_VERSION="$(shell echo $(LIBRETRO_PARALLEL_N64_VERSION) | cut -c 1-8)" # HAVE_PARALLEL=1 HAVE_PARALLEL_RSP=1 endef diff --git a/package/mupen64plus-audio-sdl/mupen64plus-audio-sdl.mk b/package/mupen64plus-audio-sdl/mupen64plus-audio-sdl.mk index 04cb3633a2..7e998349c5 100644 --- a/package/mupen64plus-audio-sdl/mupen64plus-audio-sdl.mk +++ b/package/mupen64plus-audio-sdl/mupen64plus-audio-sdl.mk @@ -4,8 +4,8 @@ # ################################################################################ -# commit of 2024/07/15 -MUPEN64PLUS_AUDIO_SDL_VERSION = 6c2c3f8ae10b7f0f6dfe06f45ca7ca598a6b659a +# Commit of 2025/06/21 +MUPEN64PLUS_AUDIO_SDL_VERSION = 07c866bd2b897fcbce2131dc36066c179422c3c9 MUPEN64PLUS_AUDIO_SDL_SITE = $(call github,mupen64plus,mupen64plus-audio-sdl,$(MUPEN64PLUS_AUDIO_SDL_VERSION)) MUPEN64PLUS_AUDIO_SDL_LICENSE = MIT MUPEN64PLUS_AUDIO_SDL_DEPENDENCIES = sdl2 alsa-lib mupen64plus-core diff --git a/package/mupen64plus-core/5000-fix-gcc14-compilation.patch b/package/mupen64plus-core/5000-fix-gcc14-compilation.patch index 0dc0268dbe..422e8c56ea 100644 --- a/package/mupen64plus-core/5000-fix-gcc14-compilation.patch +++ b/package/mupen64plus-core/5000-fix-gcc14-compilation.patch @@ -1,5 +1,16 @@ ---- mupen64plus-core-312a5befde1b44db8beee7868b929c23d896991f/src/device/r4300/new_dynarec/arm/arm_cpu_features.c.orig 2024-09-26 23:27:50.622744477 +0200 -+++ mupen64plus-core-312a5befde1b44db8beee7868b929c23d896991f/src/device/r4300/new_dynarec/arm/arm_cpu_features.c 2024-09-26 23:29:08.661722145 +0200 +From ec844925020f79d80ebbfb6a9c8f7a72418d9ed4 Mon Sep 17 00:00:00 2001 +From: David Barbion +Date: Thu, 26 Sep 2024 09:34:54 +0100 +Subject: [PATCH 1/2] fix gcc14 compilation + +--- + src/device/r4300/new_dynarec/arm/arm_cpu_features.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/device/r4300/new_dynarec/arm/arm_cpu_features.c b/src/device/r4300/new_dynarec/arm/arm_cpu_features.c +index e369b9e1..0ee7ede9 100644 +--- a/src/device/r4300/new_dynarec/arm/arm_cpu_features.c ++++ b/src/device/r4300/new_dynarec/arm/arm_cpu_features.c @@ -25,6 +25,7 @@ #include "api/callbacks.h" @@ -8,3 +19,6 @@ arm_cpu_features_t arm_cpu_features; +-- +2.52.0 + diff --git a/package/mupen64plus-core/5001-fix-pagesize.patch b/package/mupen64plus-core/5001-fix-pagesize.patch index 5f2a60c282..78b384b28b 100644 --- a/package/mupen64plus-core/5001-fix-pagesize.patch +++ b/package/mupen64plus-core/5001-fix-pagesize.patch @@ -1,11 +1,25 @@ ---- a/src/device/r4300/r4300_core.h 2025-04-06 11:43:43.099787784 +0200 -+++ b/src/device/r4300/r4300_core.h 2025-04-06 11:41:54.816063342 +0200 -@@ -181,7 +181,7 @@ +From 72cba9b7de3f19137740f3b59a96e71e3aa8949e Mon Sep 17 00:00:00 2001 +From: Bkg2k +Date: Sun, 6 Apr 2025 13:56:03 +0100 +Subject: [PATCH 2/2] fix pagesize + +--- + src/device/r4300/r4300_core.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/device/r4300/r4300_core.h b/src/device/r4300/r4300_core.h +index bce19d2f..8cef04a6 100644 +--- a/src/device/r4300/r4300_core.h ++++ b/src/device/r4300/r4300_core.h +@@ -181,7 +181,7 @@ struct r4300_core /* FIXME: better put that near linkage_arm code * to help generate call beyond the +/-32MB range. */ -- ALIGN(4096, char extra_memory[33554432]); -+ ALIGN(16384, char extra_memory[33554432]); +- ALIGN(4096, unsigned char extra_memory_buffer[NEW_DYNAREC_CACHE_SIZE + NEW_DYNAREC_CACHE_PAGE_PAD]); ++ ALIGN(16384, unsigned char extra_memory_buffer[NEW_DYNAREC_CACHE_SIZE + NEW_DYNAREC_CACHE_PAGE_PAD]); + unsigned char* extra_memory; struct new_dynarec_hot_state new_dynarec_hot_state; #endif /* NEW_DYNAREC */ - +-- +2.52.0 + diff --git a/package/mupen64plus-core/mupen64plus-core.mk b/package/mupen64plus-core/mupen64plus-core.mk index ef227b1968..74ca4ae1f7 100644 --- a/package/mupen64plus-core/mupen64plus-core.mk +++ b/package/mupen64plus-core/mupen64plus-core.mk @@ -4,8 +4,8 @@ # ################################################################################ -# Commit of 2024/09/10 -MUPEN64PLUS_CORE_VERSION = 312a5befde1b44db8beee7868b929c23d896991f +# Commit of 2025/12/08 +MUPEN64PLUS_CORE_VERSION = 37791911f120d43cd108aa8eea261729cbd0628b MUPEN64PLUS_CORE_SITE = $(call github,mupen64plus,mupen64plus-core,$(MUPEN64PLUS_CORE_VERSION)) MUPEN64PLUS_CORE_LICENSE = GPLv2+ MUPEN64PLUS_CORE_DEPENDENCIES = sdl2 alsa-lib libpng freetype host-nasm host-binutils diff --git a/package/mupen64plus-gliden64-20/mupen64plus-gliden64-20.mk b/package/mupen64plus-gliden64-20/mupen64plus-gliden64-20.mk index 05e90f0d28..5f00cbca9c 100644 --- a/package/mupen64plus-gliden64-20/mupen64plus-gliden64-20.mk +++ b/package/mupen64plus-gliden64-20/mupen64plus-gliden64-20.mk @@ -4,7 +4,7 @@ # ################################################################################ -# commit of 19/10/2015 +# Commit of 2015/10/19 MUPEN64PLUS_GLIDEN64_20_VERSION = 34fa719a61fa2338025facc9810ad2ef1a00e7ee MUPEN64PLUS_GLIDEN64_20_SITE = $(call github,gonetz,GLideN64,$(MUPEN64PLUS_GLIDEN64_20_VERSION)) MUPEN64PLUS_GLIDEN64_20_LICENSE = MIT diff --git a/package/mupen64plus-gliden64/mupen64plus-gliden64.mk b/package/mupen64plus-gliden64/mupen64plus-gliden64.mk index 9e6ec7cf29..37bd3e030e 100644 --- a/package/mupen64plus-gliden64/mupen64plus-gliden64.mk +++ b/package/mupen64plus-gliden64/mupen64plus-gliden64.mk @@ -4,8 +4,8 @@ # ################################################################################ -# commit of 2024/09/08 -MUPEN64PLUS_GLIDEN64_VERSION = f4b0755e2722d59fe1c20d7e470f7b8929dcae85 +# Commit of 2025/11/29 +MUPEN64PLUS_GLIDEN64_VERSION = a249be101870db681feb419d647c3e3031d0e057 MUPEN64PLUS_GLIDEN64_SITE = $(call github,gonetz,GLideN64,$(MUPEN64PLUS_GLIDEN64_VERSION)) MUPEN64PLUS_GLIDEN64_LICENSE = MIT MUPEN64PLUS_GLIDEN64_DEPENDENCIES = sdl2 alsa-lib mupen64plus-core diff --git a/package/mupen64plus-input-sdl/mupen64plus-input-sdl.mk b/package/mupen64plus-input-sdl/mupen64plus-input-sdl.mk index e0b5ebbc29..59b6bff769 100644 --- a/package/mupen64plus-input-sdl/mupen64plus-input-sdl.mk +++ b/package/mupen64plus-input-sdl/mupen64plus-input-sdl.mk @@ -4,8 +4,8 @@ # ################################################################################ -# Commit version 2024/07/15 -MUPEN64PLUS_INPUT_SDL_VERSION = f2ca3839415d45a547f79d21177dfe15a0ce6d8c +# Commit of 2025/08/31 +MUPEN64PLUS_INPUT_SDL_VERSION = cc808d57cd1aa1f619845ac9ac6be271266ab711 MUPEN64PLUS_INPUT_SDL_SITE = $(call github,mupen64plus,mupen64plus-input-sdl,$(MUPEN64PLUS_INPUT_SDL_VERSION)) MUPEN64PLUS_INPUT_SDL_LICENSE = MIT MUPEN64PLUS_INPUT_SDL_DEPENDENCIES = sdl2 alsa-lib mupen64plus-core diff --git a/package/mupen64plus-omx/mupen64plus-omx.mk b/package/mupen64plus-omx/mupen64plus-omx.mk index a7a017242e..57544dda1f 100644 --- a/package/mupen64plus-omx/mupen64plus-omx.mk +++ b/package/mupen64plus-omx/mupen64plus-omx.mk @@ -4,6 +4,7 @@ # ################################################################################ +# Commit of 2016/02/13 MUPEN64PLUS_OMX_VERSION = 3225ca52206c0a484a22212a76c9cf94e219c8c7 MUPEN64PLUS_OMX_SITE = $(call github,ricrpi,mupen64plus-audio-omx,$(MUPEN64PLUS_OMX_VERSION)) MUPEN64PLUS_OMX_LICENSE = MIT diff --git a/package/mupen64plus-rsphle/mupen64plus-rsphle.mk b/package/mupen64plus-rsphle/mupen64plus-rsphle.mk index 49b8e6818d..00df158f54 100644 --- a/package/mupen64plus-rsphle/mupen64plus-rsphle.mk +++ b/package/mupen64plus-rsphle/mupen64plus-rsphle.mk @@ -4,8 +4,8 @@ # ################################################################################ -# commit of 2024/07/15 -MUPEN64PLUS_RSPHLE_VERSION = 2798e65d6fc89d89aace0b0d779af6406809b940 +# Commit of 2025/09/27 +MUPEN64PLUS_RSPHLE_VERSION = 21f8bc494305fac47003202522249e81af95067e MUPEN64PLUS_RSPHLE_SITE = $(call github,mupen64plus,mupen64plus-rsp-hle,$(MUPEN64PLUS_RSPHLE_VERSION)) MUPEN64PLUS_RSPHLE_LICENSE = MIT MUPEN64PLUS_RSPHLE_DEPENDENCIES = sdl2 alsa-lib mupen64plus-core diff --git a/package/mupen64plus-uiconsole/mupen64plus-uiconsole.mk b/package/mupen64plus-uiconsole/mupen64plus-uiconsole.mk index e76a48423f..c51004975e 100644 --- a/package/mupen64plus-uiconsole/mupen64plus-uiconsole.mk +++ b/package/mupen64plus-uiconsole/mupen64plus-uiconsole.mk @@ -4,8 +4,8 @@ # ################################################################################ -# commit of 2024/09/10 -MUPEN64PLUS_UICONSOLE_VERSION = beddd15785663f1c3b4e9476998defea36223cf3 +# Commit of 2025/06/21 +MUPEN64PLUS_UICONSOLE_VERSION = 44bc0d8e82da88efa2bd700472c10f9166314e00 MUPEN64PLUS_UICONSOLE_SITE = $(call github,mupen64plus,mupen64plus-ui-console,$(MUPEN64PLUS_UICONSOLE_VERSION)) MUPEN64PLUS_UICONSOLE_LICENSE = MIT MUPEN64PLUS_UICONSOLE_DEPENDENCIES = sdl2 alsa-lib mupen64plus-core diff --git a/package/mupen64plus-video-gles2n64/mupen64plus-video-gles2n64.mk b/package/mupen64plus-video-gles2n64/mupen64plus-video-gles2n64.mk index afe23888b8..11f2147167 100644 --- a/package/mupen64plus-video-gles2n64/mupen64plus-video-gles2n64.mk +++ b/package/mupen64plus-video-gles2n64/mupen64plus-video-gles2n64.mk @@ -4,6 +4,7 @@ # ################################################################################ +# Commit of 2019/08/08 MUPEN64PLUS_VIDEO_GLES2N64_VERSION = 1f53773f9045f5f18b895fe41f166d272175d72f MUPEN64PLUS_VIDEO_GLES2N64_SITE = $(call github,ricrpi,mupen64plus-video-gles2n64,$(MUPEN64PLUS_VIDEO_GLES2N64_VERSION)) MUPEN64PLUS_VIDEO_GLES2N64_LICENSE = MIT diff --git a/package/mupen64plus-video-gles2rice/mupen64plus-video-gles2rice.mk b/package/mupen64plus-video-gles2rice/mupen64plus-video-gles2rice.mk index 0fef9d9294..ef1236e1c6 100644 --- a/package/mupen64plus-video-gles2rice/mupen64plus-video-gles2rice.mk +++ b/package/mupen64plus-video-gles2rice/mupen64plus-video-gles2rice.mk @@ -4,7 +4,7 @@ # ################################################################################ -# Commit of 2023/10/23 - pandora backport for RPi +# Commit of 2023/10/29 - pandora backport for RPi MUPEN64PLUS_VIDEO_GLES2RICE_VERSION = 1dcd6ddb6c60750c9fe4dd6dab6a2d04c304221e MUPEN64PLUS_VIDEO_GLES2RICE_SITE = $(call github,ricrpi,mupen64plus-video-gles2rice,$(MUPEN64PLUS_VIDEO_GLES2RICE_VERSION)) MUPEN64PLUS_VIDEO_GLES2RICE_LICENSE = MIT diff --git a/package/mupen64plus-video-glide64mk2/mupen64plus-video-glide64mk2.mk b/package/mupen64plus-video-glide64mk2/mupen64plus-video-glide64mk2.mk index af27fbf8ee..8ce1d0f149 100644 --- a/package/mupen64plus-video-glide64mk2/mupen64plus-video-glide64mk2.mk +++ b/package/mupen64plus-video-glide64mk2/mupen64plus-video-glide64mk2.mk @@ -4,8 +4,8 @@ # ################################################################################ -# Commit of 2024/09/14 -MUPEN64PLUS_VIDEO_GLIDE64MK2_VERSION = 39a8c11e8a041e16bcc6d67ebc2281b8632ba5ed +# Commit of 2025/06/21 +MUPEN64PLUS_VIDEO_GLIDE64MK2_VERSION = d82d5715111bc50cf6dd8066e531e9cc6fbb9eab MUPEN64PLUS_VIDEO_GLIDE64MK2_SITE = $(call github,mupen64plus,mupen64plus-video-glide64mk2,$(MUPEN64PLUS_VIDEO_GLIDE64MK2_VERSION)) MUPEN64PLUS_VIDEO_GLIDE64MK2_LICENSE = MIT diff --git a/package/mupen64plus-video-rice/mupen64plus-video-rice.mk b/package/mupen64plus-video-rice/mupen64plus-video-rice.mk index bb36e213ef..c3c3fa7b69 100644 --- a/package/mupen64plus-video-rice/mupen64plus-video-rice.mk +++ b/package/mupen64plus-video-rice/mupen64plus-video-rice.mk @@ -4,8 +4,8 @@ # ################################################################################ -# Commit of 2024/07/15 -MUPEN64PLUS_VIDEO_RICE_VERSION = fcf00779f08a9503ef30d26422f6b0350684820d +# Commit of 2025/06/21 +MUPEN64PLUS_VIDEO_RICE_VERSION = 50be36007f26500bd48d4b2c1574bb977af9e2e4 MUPEN64PLUS_VIDEO_RICE_SITE = $(call github,mupen64plus,mupen64plus-video-rice,$(MUPEN64PLUS_VIDEO_RICE_VERSION)) MUPEN64PLUS_VIDEO_RICE_LICENSE = MIT MUPEN64PLUS_VIDEO_RICE_DEPENDENCIES = sdl2 alsa-lib mupen64plus-core diff --git a/projects/configgen/configgen/generators/mupen/mupenConfig.py b/projects/configgen/configgen/generators/mupen/mupenConfig.py index 5dfe49a50d..be23e2ca7e 100644 --- a/projects/configgen/configgen/generators/mupen/mupenConfig.py +++ b/projects/configgen/configgen/generators/mupen/mupenConfig.py @@ -26,9 +26,9 @@ def writeMupenConfig(system: Emulator, controllers: ControllerPerPlayer, rom: st romName = os.path.basename(rom) # Crop resulted image. - mupenSettings.setInt('Video-Rice', 'CropMode', 1) # This option no longer exist! + mupenSettings.setInt('Video-Rice', 'CropMode', 1) # This option no longer exist! # Size of texture cache in megabytes. - mupenSettings.setInt('Video-Rice', 'CacheSize', 100) # This option no longer exist! + mupenSettings.setInt('Video-Rice', 'CacheSize', 100) # This option no longer exist! # Bilinear filtering mode. mupenSettings.setInt('Video-GLideN64', 'bilinearMode', 1) # Enable color buffer copy to RDRAM. @@ -101,10 +101,11 @@ def __writeHotKeyConfig(controllers: ControllerPerPlayer, mupenSettings: IniSett mupenSettings.setString(section, 'Joy Mapping Reset', "\"J{}{}/{}\"".format(controller.SdlIndex, __createButtonCode(controller.Hotkey), __createButtonCode(controller.A))) -def __createButtonCode(button: InputItem) -> str: - if button.IsAxis: return 'A' + str(button.Id) + ('-' if button.Value < 0 else '+') +def __createButtonCode(button: InputItem) -> str | None: + if button.IsAxis : return 'A' + str(button.Id) + ('-' if button.Value < 0 else '+') if button.IsButton: return 'B' + str(button.Id) - if button.IsHat: return 'H' + str(button.Id) + 'V' + str(button.Value) + if button.IsHat : return 'H' + str(button.Id) + 'V' + str(button.Value) + return None def __setPaths(mupenSettings: IniSettings): @@ -114,7 +115,7 @@ def __setPaths(mupenSettings: IniSettings): mupenSettings.setString(section, 'SaveSRAMPath', recalboxFiles.mupenSaves) def __setIpl64DD(system: Emulator, mupenSettings: IniSettings): - #Set ipl only for n64 + # Set ipl only for n64 section = '64DD' if system.Name == "64dd": mupenSettings.setString(section, "IPL-ROM", "/recalbox/share/bios/64DD_IPL.bin") diff --git a/projects/configgen/configgen/generators/mupen/mupenControllers.py b/projects/configgen/configgen/generators/mupen/mupenControllers.py index a982ce0dac..6ed29943fc 100644 --- a/projects/configgen/configgen/generators/mupen/mupenControllers.py +++ b/projects/configgen/configgen/generators/mupen/mupenControllers.py @@ -1,4 +1,5 @@ #!/usr/bin/env python +import pygame from typing import Dict from configgen.controllers.controller import InputItem, Controller, ControllerPerPlayer from configgen.settings.iniSettings import IniSettings @@ -8,7 +9,7 @@ import configgen.recalboxFiles as recalboxFiles # http://mupen64plus.org/wiki/index.php?title=Mupen64Plus_Plugin_Parameters # Mupen doesn't like to have 2 buttons mapped for N64 pad entry. That's why r2 is commented for now. 1 axis and 1 button is ok -mupenHatToAxis = { 1: 'Up', 2: 'Right', 4: 'Down', 8: 'Left'} +mupenHatToAxis = {1: 'Up', 2: 'Right', 4: 'Down', 8: 'Left'} mupenDoubleAxis = {0: 'X Axis', 1: 'Y Axis'} def getMupenMappingFile() -> str: @@ -31,7 +32,7 @@ def getMupenMapping() -> Dict[str, str]: return dictio # Write a configuration for a specified controller -def writeControllersConfig(controllers: ControllerPerPlayer): +def writeControllersConfig(controllers: ControllerPerPlayer) -> None: # Do not load previous file padConfig = IniSettings(recalboxFiles.mupenInput) padConfig.loadFile(True) \ @@ -85,13 +86,12 @@ def defineControllerKeys(controller: Controller) -> Dict[str, str]: if controller.DeviceName == 'Nintendo Switch N64 Controller': # Specific case for the official N64 controller for Nintendo Switch - config['C Button U'] = "button(3)"; - config['C Button D'] = "button(8)"; - config['C Button L'] = "button(2)"; - config['C Button R'] = "button(9)"; + config['C Button U'] = "button(3)" + config['C Button D'] = "button(8)" + config['C Button L'] = "button(2)" + config['C Button R'] = "button(9)" return config - def setControllerLine(_, item: InputItem, mupenSettingName: str) -> str: value = '' if item.IsButton: @@ -110,9 +110,8 @@ def setControllerLine(_, item: InputItem, mupenSettingName: str) -> str: else: value = "axis({}-)".format(item.Id) return value - -def writeToIni(controller: Controller, config: Dict[str, str], padConfig: IniSettings): - section = controller.DeviceName +def writeToIni(controller: Controller, config: Dict[str, str], padConfig: IniSettings) -> None: + section = get_sdl_joystick_name(controller.SdlIndex) # Write static config padConfig.setBool(section, 'plugged', True) @@ -128,3 +127,13 @@ def writeToIni(controller: Controller, config: Dict[str, str], padConfig: IniSet # Write dynamic config for inputName in sorted(config): padConfig.setString(section, inputName, config[inputName]) + +def get_sdl_joystick_name(index: int) -> str: + pygame.init() + pygame.joystick.init() + + joystick = pygame.joystick.Joystick(index) + joystick.init() + controller_name = joystick.get_name() + + return controller_name diff --git a/projects/configgen/configgen/generators/mupen/mupenGenerator.py b/projects/configgen/configgen/generators/mupen/mupenGenerator.py index 57fff197f2..ae5bd132e0 100644 --- a/projects/configgen/configgen/generators/mupen/mupenGenerator.py +++ b/projects/configgen/configgen/generators/mupen/mupenGenerator.py @@ -50,6 +50,4 @@ class MupenGenerator(Generator): commandArray.append(args.rom) - return Command(videomode=system.VideoMode, - array=commandArray, - env=commandEnv) + return Command(videomode=system.VideoMode, array=commandArray, env=commandEnv) diff --git a/projects/configgen/tests/generators/mupenGenerator_test.py b/projects/configgen/tests/generators/mupenGenerator_test.py index e9ecadd7f3..eafbad9a81 100644 --- a/projects/configgen/tests/generators/mupenGenerator_test.py +++ b/projects/configgen/tests/generators/mupenGenerator_test.py @@ -1,6 +1,7 @@ #!/usr/bin/env python import pytest import shutil +from unittest.mock import patch, MagicMock from configgen.Emulator import Emulator import configgen.generators.mupen.mupenControllers as mupenControllers import configgen.generators.mupen.mupenConfig as mupenConfig @@ -28,8 +29,13 @@ def system_gliden64(): return Emulator(name='n64', videoMode='1920x1080', ratio='auto', emulator='mupen64plus', core='gliden64') +@patch('pygame.joystick.Joystick') @pytest.mark.usefixtures("controller_configuration") -def test_simple_generate_mupen_gliden64(emulator, system_gliden64, controller_configuration): +def test_simple_generate_mupen_gliden64(mock_joystick_class, emulator, system_gliden64, controller_configuration): + mock_joystick = MagicMock() + mock_joystick.get_name.return_value = "Test Controller" + mock_joystick_class.return_value = mock_joystick + command = emulator.generate(system_gliden64, controller_configuration, keyValueSettings("", False), Arguments('path/to/test.n64')) assert command.videomode == '1920x1080' assert command.array == ['/usr/bin/mupen64plus', '--corelib', '/usr/lib/libmupen64plus.so.2.0.0', -- GitLab