diff --git a/platforms/_shared.yml b/platforms/_shared.yml index 1ec84b41..dd8c347d 100644 --- a/platforms/_shared.yml +++ b/platforms/_shared.yml @@ -3,39 +3,6 @@ # Referenced via `includes: [group_name]` in platform configs. shared_groups: - mt32: - - name: MT32_CONTROL.ROM - sha1: "b083518fffb7f66b03c23b7eb4f868e62dc5a987" - md5: "5626206284b22c2734f3e9efefcd2675" - destination: "scummvm/extra/MT32_CONTROL.ROM" - required: false - - name: MT32_PCM.ROM - sha1: "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252" - md5: "89e42e386e82e0cacb4a2704a03706ca" - destination: "scummvm/extra/MT32_PCM.ROM" - required: false - - jiffydos: - - name: JiffyDOS_C128.bin - sha1: "7d1898f32beae4b2ae610d469ce578a588efaa7c" - destination: "vice/JiffyDOS_C128.bin" - required: false - - name: JiffyDOS_C64.bin - sha1: "31e73e66eccb28732daea8ec3ad1addd9b39a017" - destination: "vice/JiffyDOS_C64.bin" - required: false - - name: JiffyDOS_1541-II.bin - sha1: "b1a5b826304d3df2a27d7163c6a81a532e040d32" - destination: "vice/JiffyDOS_1541-II.bin" - required: false - - name: JiffyDOS_1571_repl310654.bin - sha1: "d4b79b60cf1eaa399d0932200eb7811e00455249" - destination: "vice/JiffyDOS_1571_repl310654.bin" - required: false - - name: JiffyDOS_1581.bin - sha1: "65bbf2be7bcd5bdcbff609d6c66471ffb9d04bfe" - destination: "vice/JiffyDOS_1581.bin" - required: false # NEC PC-9801/9821 — NP2kai core # np2kai hardcodes "np2kai/" subfolder for firmware lookups @@ -114,46 +81,6 @@ shared_groups: crc32: "638864c1" size: 5288 - # Sharp X68000 — PX68k core - # PX68k hardcodes "keropi/" subfolder for ROM lookups - # ref: px68k-libretro/libretro.c:1834 — sprintf(retro_system_conf, "%s%ckeropi", ...) - keropi: - - name: cgrom.dat - destination: keropi/cgrom.dat - required: true - sha1: "8d72c5b4d63bb14c5dbdac495244d659aa1498b6" - md5: "cb0a5cfcf7247a7eab74bb2716260269" - crc32: "9f3195f1" - size: 786432 - - name: iplrom.dat - destination: keropi/iplrom.dat - required: true - sha1: "0ed038ed2133b9f78c6e37256807424e0d927560" - md5: "7fd4caabac1d9169e289f0f7bbf71d8e" - crc32: "72bdf532" - size: 131072 - - name: iplrom30.dat - destination: keropi/iplrom30.dat - required: true - sha1: "239e9124568c862c31d9ec0605e32373ea74b86a" - md5: "f373003710ab4322642f527f567e020a" - crc32: "e8f8fdad" - size: 131072 - - name: iplromco.dat - destination: keropi/iplromco.dat - required: true - sha1: "77511fc58798404701f66b6bbc9cbde06596eba7" - md5: "cc78d4f4900f622bd6de1aed7f52592f" - crc32: "6c7ef608" - size: 131072 - - name: iplromxv.dat - destination: keropi/iplromxv.dat - required: true - sha1: "e33cdcdb69cd257b0b211ef46e7a8b144637db57" - md5: "0617321daa182c3f3d6f41fd02fb3275" - crc32: "00eeb408" - size: 131072 - # NEC PC-8801 — QUASI88 core # QUASI88 searches "quasi88/" subfolder first # ref: quasi88-libretro/src/LIBRETRO/libretro.c:463 — snprintf(..., "%s%cquasi88%c%s", ...) @@ -183,102 +110,3 @@ shared_groups: destination: quasi88/N88EXT3.ROM required: true md5: "fc4b76a402ba501e6ba6de4b3e8b4273" - - # Sinclair ZX Spectrum — Fuse core (Pentagon/Scorpion ROMs) - # VERIFIED: fuse-libretro/src/compat/paths.c compat_get_next_path() - # returns empty path — core searches system/ FLAT, not fuse/ subfolder. - # The libretro docs incorrectly show "fuse/" prefix. Tested against - # fuse/settings.c:221-229 which defines names without prefix. - # Shared group kept for platforms that DO use the fuse/ prefix (Recalbox). - fuse: - - name: 128p-0.rom - destination: fuse/128p-0.rom - required: true - sha1: "d07fcdeca892ee80494d286ea9ea5bf3928a1aca" - md5: "a249565f03b98d004ee7f019570069cd" - size: 16384 - - name: 128p-1.rom - destination: fuse/128p-1.rom - required: true - - name: trdos.rom - destination: fuse/trdos.rom - required: true - sha1: "21695e3f2a8f796386ce66eea8a246b0ac44810c" - md5: "0da70a5d2a0e733398e005b96b7e4ba6" - size: 16384 - - name: gluck.rom - destination: fuse/gluck.rom - required: true - sha1: "015eb96dafb273d4f4512c467e9b43c305fd1bc4" - md5: "d5869034604dbfd2c1d54170e874fd0a" - size: 16384 - - name: 256s-0.rom - destination: fuse/256s-0.rom - required: true - sha1: "477114ff0fe1388e0979df1423602b21248164e5" - md5: "b9fda5b6a747ff037365b0e2d8c4379a" - size: 16384 - - name: 256s-1.rom - destination: fuse/256s-1.rom - required: true - sha1: "367b5a102fb663beee8e7930b8c4acc219c1f7b3" - md5: "643861ad34831b255bf2eb64e8b6ecb8" - size: 16384 - - name: 256s-2.rom - destination: fuse/256s-2.rom - required: true - sha1: "07783ee295274d8ff15d935bfd787c8ac1d54900" - md5: "d8ad507b1c915a9acfe0d73957082926" - size: 16384 - - name: 256s-3.rom - destination: fuse/256s-3.rom - required: true - sha1: "33703e97cc93b7edfcc0334b64233cf81b7930db" - md5: "ce0723f9bc02f4948c15d3b3230ae831" - size: 16384 - - # Enterprise 128 / Videoton TVC — ep128emu core - # ep128emu loads ROMs from "ep128emu/roms/" subfolder - # ref: ep128emu-core/core/core.cpp:56,59 — romBasePath.append("/ep128emu/roms/") - # since v1.1.0 external BIOS is optional (built-in fallback) - ep128emu: - - name: hun.rom - destination: ep128emu/roms/hun.rom - required: false - md5: "22167938f142c222f40992839aa21a06" - - name: exos21.rom - destination: ep128emu/roms/exos21.rom - required: false - md5: "f36f24cbb87745fbd2714e4df881db09" - - name: basic21.rom - destination: ep128emu/roms/basic21.rom - required: false - md5: "e972fe42b398c9ff1d93ff014786aec6" - - name: exdos13.rom - destination: ep128emu/roms/exdos13.rom - required: false - md5: "ddff70c014d1958dc75378b6c9aab6f8" - - name: basic20.rom - destination: ep128emu/roms/basic20.rom - required: false - md5: "8e18edce4a7acb2c33cc0ab18f988482" - - name: exos20.rom - destination: ep128emu/roms/exos20.rom - required: false - md5: "5ad3baaad3b5156d6b60b34229a676fb" - - name: brd.rom - destination: ep128emu/roms/brd.rom - required: false - md5: "6af0402906944fd134004b85097c8524" - - # Sega Saturn — Kronos core - # Kronos searches "kronos/" subfolder first, falls back to root - # ref: libretro-kronos/libretro/libretro.c, docs.libretro.com/library/kronos - kronos: - - name: saturn_bios.bin - destination: kronos/saturn_bios.bin - required: true - sha1: "2b8cb4f87580683eb4d760e4ed210813d667f0a2" - md5: "af5828fdff51384f99b3c4926be27762" - crc32: "2aba43c2" - size: 524288 diff --git a/platforms/retroarch.yml b/platforms/retroarch.yml index 27ce473c..c6289703 100644 --- a/platforms/retroarch.yml +++ b/platforms/retroarch.yml @@ -990,8 +990,6 @@ systems: native_system: Enterprise - 64/128 native_path: ep128emu/roms/zt19hfnt.rom native_id: Enterprise - 64/128 - includes: - - ep128emu epoch-scv: files: - name: upd7801g.s01 @@ -2807,8 +2805,6 @@ systems: core: kronos manufacturer: Sega docs: "https://docs.libretro.com/library/kronos/" - includes: - - kronos sharp-x1: files: - name: IPLROM.X1 @@ -2882,8 +2878,6 @@ systems: core: px68k manufacturer: Sharp docs: "https://docs.libretro.com/library/px68k/" - includes: - - keropi sinclair-zx-spectrum: files: - name: 128-0.rom diff --git a/scripts/scraper/libretro_scraper.py b/scripts/scraper/libretro_scraper.py index 04b0465c..bcd74dbb 100644 --- a/scripts/scraper/libretro_scraper.py +++ b/scripts/scraper/libretro_scraper.py @@ -451,22 +451,18 @@ class Scraper(BaseScraper): systems[sys_id]["files"].append({**ef, "curated": True}) existing.add(key) - # ep128emu shared group for Enterprise - if "enterprise-64-128" in systems: - systems["enterprise-64-128"].setdefault("includes", []) - if "ep128emu" not in systems["enterprise-64-128"]["includes"]: - systems["enterprise-64-128"]["includes"].append("ep128emu") - # Inject shared group references for systems that have core-specific # subdirectory requirements already defined in _shared.yml. # Note: fuse/ prefix NOT injected for sinclair-zx-spectrum. # Verified in fuse-libretro/src/compat/paths.c -core searches # system/ flat, not fuse/ subfolder. Docs are wrong on this. + # A group System.dat already covers entry for entry injects nothing + # (ep128emu, keropi and kronos were), and a correction made there + # would never reach a pack: load_platform_config keeps the + # platform's own entry. SYSTEM_SHARED_GROUPS = { "nec-pc-88": ["quasi88"], "nec-pc-98": ["np2kai"], - "sharp-x68000": ["keropi"], - "sega-saturn": ["kronos"], } for sys_id, groups in SYSTEM_SHARED_GROUPS.items(): if sys_id in systems: diff --git a/tests/test_audit_regressions.py b/tests/test_audit_regressions.py index c97a6ea7..b7ae9ba7 100644 --- a/tests/test_audit_regressions.py +++ b/tests/test_audit_regressions.py @@ -457,6 +457,28 @@ class APackIsSwappedInWhole(unittest.TestCase): self.assertNotIn('ZipFile(zip_path, "w"', source) +class EverySharedGroupServesAPlatform(unittest.TestCase): + """Six of the eight shared groups injected nothing: fuse, mt32 and + jiffydos were included by no platform, and kronos, keropi and ep128emu + repeated System.dat entry for entry. load_platform_config keeps the + platform's own entry, so a hash corrected there changed no pack, no + verify and no manifest, and nothing said so.""" + + def test_each_group_contributes_an_entry_somewhere(self): + from common import list_registered_platforms, load_platform_config + + platforms_dir = str(ROOT / "platforms") + with (ROOT / "platforms" / "_shared.yml").open(encoding="utf-8") as handle: + groups = set((yaml.safe_load(handle) or {}).get("shared_groups") or {}) + served = { + entry.get("shared_group") + for name in list_registered_platforms(platforms_dir, include_archived=True) + for system in load_platform_config(name, platforms_dir).get("systems", {}).values() + for entry in system.get("files", []) + } + self.assertEqual(sorted(groups - served), []) + + class FaqRegressions(unittest.TestCase): """The FAQ states facts the code owns; these tie it back to the source.