From af5d6e77d1bbcbfaf7a00804636578991f799a78 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Sat, 17 Oct 2026 19:14:00 +0200 Subject: [PATCH] fix: place openMSX ROMs under share/systemroms --- emulators/openmsx.yml | 24 ++++++++++++++++++++++++ tests/test_audit_regressions.py | 23 +++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/emulators/openmsx.yml b/emulators/openmsx.yml index f40f8813..989fc9f0 100644 --- a/emulators/openmsx.yml +++ b/emulators/openmsx.yml @@ -27,6 +27,13 @@ notes: | searches configured directories for files matching SHA1 checksums. Filenames are secondary hints; SHA1 is the primary lookup key. Files may be gzipped or individually zipped. + Each user data directory contributes share/systemroms, scanned + recursively (src/file/FilePool.cc:27, FilePoolCore.cc:369-385). RetroBat + sets OPENMSX_HOME to bios/openmsx and refuses to start a machine whose + ROMs are not in bios/openmsx/share/systemroms; RetroPie links + share/systemroms to BIOS/openmsx and Batocera adds bios/openmsx to the + pool, both scanned recursively, so openmsx/share/systemroms serves all + three. Batocera configgen (openmsxGenerator.py) configures filepool paths (/userdata/bios/Machines position 1, /userdata/bios/openmsx position 2) @@ -51,6 +58,7 @@ files: # Based on Philips NMS 8245 with extra hardware # ------------------------------------------------------- - name: NMS8245SystemROM1.08.bin + path: "openmsx/share/systemroms/NMS8245SystemROM1.08.bin" sha1: cc57c1dcd7249ea9f8e2547244592e7d97308ed0 required: true size: 65536 @@ -59,6 +67,7 @@ files: source_ref: "share/machines/Boosted_MSX2_EN.xml:24,65,111" - name: fmpac.rom + path: "openmsx/share/systemroms/fmpac.rom" sha1: fec451b9256570a0e4869355a40329c57f40705f required: true description: "Panasonic SW-M004 FMPAC (FM-PAC) sound cartridge ROM" @@ -66,6 +75,7 @@ files: source_ref: "share/machines/Boosted_MSX2_EN.xml:83" - name: phc-70fd2_basickun.rom + path: "openmsx/share/systemroms/phc-70fd2_basickun.rom" sha1: 22b3191d865010264001b9d896186a9818478a6b required: true description: "Sanyo PHC-70FD2 MSX-BASIC Kun compiler ROM" @@ -73,6 +83,7 @@ files: source_ref: "share/machines/Boosted_MSX2_EN.xml:89, share/machines/Boosted_MSX2+_JP.xml:167, share/machines/Boosted_MSXturboR_with_IDE.xml:79" - name: yrw801.rom + path: "openmsx/share/systemroms/yrw801.rom" sha1: 32760893ce06dbe3930627755ba065cc3d8ec6ca required: true description: "Yamaha YRW801 MoonSound wavetable ROM" @@ -84,6 +95,7 @@ files: # Based on Panasonic FS-A1WSX with extra hardware # ------------------------------------------------------- - name: fs-a1wsx_basic-bios2p.rom + path: "openmsx/share/systemroms/fs-a1wsx_basic-bios2p.rom" sha1: f4433752d3bf876bfefb363c749d4d2e08a218b6 required: true description: "FS-A1WSX MSX2+ BIOS and BASIC ROM" @@ -91,6 +103,7 @@ files: source_ref: "share/machines/Boosted_MSX2+_JP.xml:143" - name: fs-a1wsx_fmbasic.rom + path: "openmsx/share/systemroms/fs-a1wsx_fmbasic.rom" sha1: aad42ba4289b33d8eed225d42cea930b7fc5c228 required: true description: "FS-A1WSX MSX-MUSIC (OPLL) ROM" @@ -98,6 +111,7 @@ files: source_ref: "share/machines/Boosted_MSX2+_JP.xml:155" - name: fs-a1wsx_msx2psub.rom + path: "openmsx/share/systemroms/fs-a1wsx_msx2psub.rom" sha1: fe0254cbfc11405b79e7c86c7769bd6322b04995 required: true description: "FS-A1WSX MSX2+ Sub ROM" @@ -105,6 +119,7 @@ files: source_ref: "share/machines/Boosted_MSX2+_JP.xml:218" - name: fs-a1wsx_kanjibasic.rom + path: "openmsx/share/systemroms/fs-a1wsx_kanjibasic.rom" sha1: dcc3a67732aa01c4f2ee8d1ad886444a4dbafe06 required: true description: "FS-A1WSX Kanji Driver with BASIC ROM" @@ -112,6 +127,7 @@ files: source_ref: "share/machines/Boosted_MSX2+_JP.xml:225" - name: fs-a1wsx_disk.rom + path: "openmsx/share/systemroms/fs-a1wsx_disk.rom" sha1: 7ed7c55e0359737ac5e68d38cb6903f9e5d7c2b6 required: true description: "FS-A1WSX FDC (TC8566AF) disk controller ROM" @@ -119,6 +135,7 @@ files: source_ref: "share/machines/Boosted_MSX2+_JP.xml:237" - name: fs-a1wsx_firmware.rom + path: "openmsx/share/systemroms/fs-a1wsx_firmware.rom" sha1: 3330d9b6b76e3c4ccb7cf252496ed15d08b95d3f required: true description: "FS-A1WSX Panasonic firmware ROM" @@ -126,6 +143,7 @@ files: source_ref: "share/machines/Boosted_MSX2+_JP.xml:251" - name: fs-a1wsx_kanjifont.rom + path: "openmsx/share/systemroms/fs-a1wsx_kanjifont.rom" sha1: 5aff2d9b6efc723bc395b0f96f0adfa83cc54a49 aliases: [fs-a1gt_kanjifont.rom] required: true @@ -138,6 +156,7 @@ files: # Based on Panasonic FS-A1GT with IDE interface # ------------------------------------------------------- - name: fs-a1gt_firmware.rom + path: "openmsx/share/systemroms/fs-a1gt_firmware.rom" sha1: - e779c338eb91a7dea3ff75f3fde76b8af22c4a3a - 5fa3aa79aeba2c0441f349e78e9a16d9d64422ea @@ -147,6 +166,7 @@ files: source_ref: "share/machines/Boosted_MSXturboR_with_IDE.xml:23" - name: ide250.dat + path: "openmsx/share/systemroms/ide250.dat" sha1: 93e41c7d479bc90c1d1f6d081af20fd9924b8ada required: true description: "Sunrise IDE 2.50 interface ROM" @@ -158,6 +178,7 @@ files: # ColecoVision with built-in Super Game Module # ------------------------------------------------------- - name: COLECO.ROM + path: "openmsx/share/systemroms/COLECO.ROM" sha1: 45bedc4cbdeac66c7df59e9e599195c778d86a92 required: true description: "ColecoVision system BIOS ROM" @@ -168,6 +189,7 @@ files: # Spectravideo_SVI-328 (spectravideo) # ------------------------------------------------------- - name: svi-3x8_v111.rom + path: "openmsx/share/systemroms/svi-3x8_v111.rom" sha1: 10349ce675f6d6d47f0976e39cb7188eba858d89 required: true description: "SVI-328 BASIC v1.11 ROM" @@ -179,6 +201,7 @@ files: # MSX1 with LaserDisc controller # ------------------------------------------------------- - name: px-7_basic-bios1.rom + path: "openmsx/share/systemroms/px-7_basic-bios1.rom" sha1: 302afb5d8be26c758309ca3df611ae69cced2821 required: true description: "Pioneer PX-7 MSX1 BIOS and BASIC ROM" @@ -186,6 +209,7 @@ files: source_ref: "share/machines/Pioneer_PX-7.xml:67" - name: px-7_pbasic.rom + path: "openmsx/share/systemroms/px-7_pbasic.rom" sha1: 665d805f96616e1037f1823050657b7849899283 required: true description: "Pioneer PX-7 LaserDisc PBASIC controller ROM" diff --git a/tests/test_audit_regressions.py b/tests/test_audit_regressions.py index 646b23ea..11348514 100644 --- a/tests/test_audit_regressions.py +++ b/tests/test_audit_regressions.py @@ -3111,3 +3111,26 @@ class VerifyStrictAppliesInEveryMode(unittest.TestCase): def test_a_listing_refuses_strict(self): self.assertEqual(self.run_verify("--list-emulators", "--strict"), 2) + + +class OpenMsxRomsSitInItsSystemroms(unittest.TestCase): + """openMSX entries had no path and landed at the BIOS root, where no + frontend points FilePool. RetroBat declares its ROMs under + openMSX/share/systemroms; the profile's paths must agree.""" + + def test_every_entry_is_under_share_systemroms(self): + profile = yaml.safe_load((ROOT / "emulators" / "openmsx.yml").read_text()) + retrobat = yaml.safe_load((ROOT / "platforms" / "retrobat.yml").read_text()) + declared_dirs = { + fe["destination"].rsplit("/", 1)[0].lower() + for system in retrobat["systems"].values() + for fe in system.get("files", []) + if "systemroms" in fe.get("destination", "") + } + self.assertEqual(declared_dirs, {"openmsx/share/systemroms"}) + for entry in profile["files"]: + with self.subTest(name=entry["name"]): + self.assertEqual( + entry.get("path", "").lower(), + f"openmsx/share/systemroms/{entry['name']}".lower(), + )