From 1d3a4076c5d51bdc7ad9f3c2306edda48dc6787f Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Wed, 11 Nov 2026 11:43:30 +0100 Subject: [PATCH] fix: prove KNULLI's MAME -hard at its builds KNULLI 20260511 ships libretro/mame lrmame0278 and GroovyMAME gm0277sr221e (the batocera submodule's libretro-mame.mk and mame.mk). mameGenerator.py and libretroMAMEConfig.py pass the Macintosh boot disk as -hard. MAME names the option of a machine's one hard disk image by its brief type name: harddriv.h:43 returns "hard", update_names keeps it without an index (diimage.cpp:1131-1165) and the option entries are registered under it (emuopts.cpp:389-404, 680-694), the LC III holding one harddisk at scsi:0 (maclc3.cpp:266). GroovyMAME's diimage.cpp, harddriv.h and maclc3.cpp equal mamedev mame0277. The mame profile carries that read as config_reads with KNULLI's two builds in pin_build, and both -hard records bind. The manifest does not change: KNULLI's own list already puts mac608, mac701 and mac755.chd in /userdata/bios, the folder the records search. --- emulators/mame.yml | 27 +++++++++++++++++++++++++++ tests/test_launcher_placement.py | 14 ++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/emulators/mame.yml b/emulators/mame.yml index a9439bbfe..b7f23ce3d 100644 --- a/emulators/mame.yml +++ b/emulators/mame.yml @@ -13,6 +13,26 @@ version_basis: path: "makefile" pattern: '#define BARE_BUILD_VERSION "([^"]+)"' display_name: "Arcade (MAME)" +pin_build: + - platform: knulli + repo: "https://github.com/knulli-cfw/knulli-linux" + revision: "20260511" + path: "batocera/package/batocera/emulators/retroarch/libretro/libretro-mame/libretro-mame.mk" + variable: LIBRETRO_MAME_VERSION + value: "lrmame0278" + - platform: knulli + repo: "https://github.com/knulli-cfw/knulli-linux" + revision: "20260511" + path: "batocera/package/batocera/emulators/mame/mame.mk" + variable: MAME_VERSION + value: "gm0277sr221e" +config_reads: + - file: "command line" + platforms: [knulli] + source_ref: "src/emu/emuopts.cpp:680-694" + keys: + - key: "-hard" + source_ref: "src/devices/imagedev/harddriv.h:43, src/emu/diimage.cpp:1131-1165, src/emu/emuopts.cpp:389-404, src/mame/apple/maclc3.cpp:266" cores: - mame @@ -182,6 +202,13 @@ notes: | hash and pluginspath to plugins (src/emu/emuopts.cpp:44-46, 53), and the sets are read at the top of a rompath directory. + KNULLI ships libretro/mame lrmame0278 and GroovyMAME gm0277sr221e. In both + a machine with one hard disk image (the LC III's scsi:0 harddisk) names its + option -hard, the brief type name of the image (harddriv.h:43, diimage.cpp + update_names, emuopts.cpp get_full_option_names). GroovyMAME's diimage.cpp, + harddriv.h and maclc3.cpp equal mamedev mame0277, its emuopts.cpp carries + the same code at 396-411 and 695. + BIOS root set names follow current MAME conventions. ZN-based boards renamed from legacy names (cpzn1 to coh1000c, atpsx to coh1000a, etc.). File structure uses vendor-based paths (src/mame/{vendor}/). diff --git a/tests/test_launcher_placement.py b/tests/test_launcher_placement.py index 5cf239dc5..2ab289e51 100644 --- a/tests/test_launcher_placement.py +++ b/tests/test_launcher_placement.py @@ -1148,6 +1148,20 @@ class MameOnRetroDeckRomPaths(unittest.TestCase): self.assertEqual(places["stvbios.zip"] - {"arcade", "mame", "consolearcade"}, {"stv"}) +class MacBootDisksOnKnulli(unittest.TestCase): + def test_the_hard_records_bind(self) -> None: + # mameGenerator.py and libretroMAMEConfig.py pass the boot disk as + # -hard, the brief name of the LC III's one hard disk image + # (harddriv.h:43, diimage.cpp:1131-1165, maclc3.cpp:266). + from launchers import bound_launchers + + config = load_platform_config("knulli", str(REPO_ROOT / "platforms")) + profiles = load_emulator_profiles(str(REPO_ROOT / "emulators")) + bound = [r for r in bound_launchers(config, profiles) + if r.get("emulator") == "mame" and "-hard" in str(r.get("passes_to"))] + self.assertEqual(sorted(r["build"] for r in bound), ["libretro", "standalone"]) + + class ArcadeParentSources(unittest.TestCase): def test_the_index_names_each_driver_source(self) -> None: import json