fix: file every platform system under a known id

Thirty platform system ids, such as sufami, pokemini, vsmile, and
Recalbox's comma-joined msx1,msx2, matched no system any profile
names, so no core file was attributed to them and --system missed them.
The scraper maps now carry those names, and a test holds every platform
system to a profile system apart from two named folds.
This commit is contained in:
Abdessamad Derraz committed 2026-10-17 12:47:22 +02:00
1 parent 0894b67d3f
commit dbcd26d3ab
9 files changed
+764 -727

No files matched your search

+12 -20
View File
@@ -566,7 +566,7 @@ systems:
native_name: Odyssey 2
native_id: odyssey2
name: Odyssey 2
videopacplus:
philips-videopac:
files:
- name: g7400.bin
destination: g7400.bin
@@ -985,10 +985,6 @@ systems:
native_system: segacd
native_path: bios/bios_CD_J.bin
native_name: Sega CD
native_id: segacd
name: Sega CD
megadrive-msu:
files:
- name: bios_CD_E.bin
destination: bios_CD_E.bin
required: true
@@ -1010,7 +1006,7 @@ systems:
native_system: megadrive-msu
native_path: bios/bios_CD_J.bin
native_name: MSU-MD
native_id: megadrive-msu
native_id: segacd
name: MSU-MD
sega-saturn:
files:
@@ -1230,7 +1226,7 @@ systems:
native_name: Satellaview
native_id: satellaview
name: Satellaview
sufami:
nintendo-sufami-turbo:
files:
- name: STBIOS.bin
destination: STBIOS.bin
@@ -1428,7 +1424,7 @@ systems:
native_name: Xbox
native_id: xbox
name: Xbox
amiga500:
commodore-amiga:
files:
- name: kick33180.A500
destination: amiga/kick33180.A500
@@ -1500,10 +1496,6 @@ systems:
native_system: amiga500
native_path: bios/amiga/amiga-os-310-a600.rom
native_name: Amiga 500
native_id: amiga500
name: Amiga 500
commodore-amiga:
files:
- name: kick34005.A500
destination: amiga/kick34005.A500
required: true
@@ -1616,7 +1608,7 @@ systems:
native_system: amigacd32
native_path: bios/amiga/amiga-ext-310-cd32.rom
native_name: Amiga CD32
native_id: amigacdtv
native_id: amiga500
name: Amiga CD32
pc60:
files:
@@ -2040,7 +2032,7 @@ systems:
native_name: Fujistu FM-Towns
native_id: fmtowns
name: Fujistu FM-Towns
gp32:
gamepark-gp32:
files:
- name: gp32.zip
destination: gp32.zip
@@ -2645,7 +2637,7 @@ systems:
native_name: Apple Macintosh
native_id: macintosh
name: Apple Macintosh
segaai:
sega-ai:
files:
- name: segaai.zip
destination: segaai.zip
@@ -3215,7 +3207,7 @@ systems:
native_name: ColecoVision
native_id: colecovision
name: ColecoVision
bbc:
acorn-bbc-micro:
files:
- name: bbcb.zip
destination: bbcb.zip
@@ -4822,7 +4814,7 @@ systems:
native_name: VTech CreatiVision
native_id: crvision
name: VTech CreatiVision
vsmile:
vtech-vsmile:
files:
- name: vsmile.zip
destination: vsmile.zip
@@ -4856,7 +4848,7 @@ systems:
native_name: VTech V.Smile
native_id: vsmile
name: VTech V.Smile
socrates:
vtech-socrates:
files:
- name: socrates.zip
destination: socrates.zip
@@ -4924,7 +4916,7 @@ systems:
native_name: Bandai RX-78
native_id: rx78
name: Bandai RX-78
advision:
entex-advision:
files:
- name: advision.zip
destination: advision.zip
@@ -5536,7 +5528,7 @@ systems:
native_name: Triforce
native_id: triforce
name: Triforce
bk:
elektronika-bk:
files:
- name: B11M_BOS.ROM
destination: bk/B11M_BOS.ROM
+677 -683
View File
File diff suppressed because it is too large. Load diff
+16 -22
View File
@@ -497,7 +497,7 @@ systems:
native_path: bios/mame/hash/adam_flop.xml
native_name: Coleco Adam
name: Coleco Adam
advision:
entex-advision:
files:
- name: advision.zip
destination: advision.zip
@@ -513,7 +513,7 @@ systems:
native_path: bios/mame/hash/advision.xml
native_name: Adventure Vision
name: Adventure Vision
amiga500:
commodore-amiga:
files:
- name: kick33180.A500
destination: kick33180.A500
@@ -536,9 +536,6 @@ systems:
native_system: amiga500
native_path: bios/kick37175.A500
native_name: Amiga 500
name: Amiga 500
commodore-amiga:
files:
- name: kick40068.A1200
destination: kick40068.A1200
required: true
@@ -546,6 +543,13 @@ systems:
native_system: amiga1200
native_path: bios/kick40068.A1200
native_name: Amiga 1200
- name: kick40068.A4000
destination: kick40068.A4000
required: true
md5: 9bdedde6a4f33555b4a270c8ca53297d
native_system: amiga4000
native_path: bios/kick40068.A4000
native_name: Amiga 4000
- name: kick40060.CD32.ext
destination: kick40060.CD32.ext
required: true
@@ -575,16 +579,6 @@ systems:
native_path: bios/kick40060.CD32
native_name: Amiga CD32
name: Amiga CD32
amiga4000:
files:
- name: kick40068.A4000
destination: kick40068.A4000
required: true
md5: 9bdedde6a4f33555b4a270c8ca53297d
native_system: amiga4000
native_path: bios/kick40068.A4000
native_name: Amiga 4000
name: Amiga 4000
apfm1000:
files:
- name: apfm1000.zip
@@ -797,7 +791,7 @@ systems:
native_path: bios/mame/hash/aquarius_cass.xml
native_name: Aquarius
name: Aquarius
arcadia:
emerson-arcadia-2001:
files:
- name: ar_bios.zip
destination: ar_bios.zip
@@ -1145,7 +1139,7 @@ systems:
native_path: bios/mame/hash/bbcmc_flop.xml
native_name: BBC
name: BBC
bk:
elektronika-bk:
files:
- name: B11M_BOS.ROM
destination: bk/B11M_BOS.ROM
@@ -1515,7 +1509,7 @@ systems:
native_path: bios/disksys.rom
native_name: Nintendo Family Computer Disk System
name: Nintendo Family Computer Disk System
ecwolf:
wolfenstein3d:
files:
- name: ecwolf.pk3
destination: ecwolf.pk3
@@ -1726,7 +1720,7 @@ systems:
native_path: bios/mame/hash/gmaster.xml
native_name: Game Master
name: Game Master
gp32:
gamepark-gp32:
files:
- name: gp32.zip
destination: gp32.zip
@@ -2247,7 +2241,7 @@ systems:
native_path: bios/Mupen64plus/IPL_DEV.n64
native_name: Nintendo 64 DD
name: Nintendo 64 DD
namco2x6:
namco-system246:
files:
- name: r27v1602f.7d
destination: pcsx2/bios/r27v1602f.7d
@@ -2824,7 +2818,7 @@ systems:
native_path: bios/SGB2.sfc
native_name: Super Game Boy
name: Super Game Boy
sufami:
nintendo-sufami-turbo:
files:
- name: STBIOS.bin
destination: STBIOS.bin
@@ -2933,7 +2927,7 @@ systems:
native_path: bios/mame/hash/vg5k.xml
native_name: VG5000
name: VG5000
vsmile:
vtech-vsmile:
files:
- name: vsmile.zip
destination: vsmile.zip
+1 -1
View File
@@ -15695,7 +15695,7 @@ systems:
native_system: vectrex
component: retroarch
description: Vectrex BIOS
vsmile:
vtech-vsmile:
files:
- name: vsmile.zip
destination: bios/vsmile.zip
+12
View File
@@ -127,6 +127,18 @@ def es_systems_emulators(text: str) -> tuple[set[str], set[str]]:
SYSTEM_SLUG_MAP = {
"advision": "entex-advision",
"amiga500": "commodore-amiga",
"bbc": "acorn-bbc-micro",
"bk": "elektronika-bk",
"gp32": "gamepark-gp32",
# MSU-MD runs on the Mega Drive cores and loads the Mega-CD BIOS.
"megadrive-msu": "sega-mega-cd",
"segaai": "sega-ai",
"socrates": "vtech-socrates",
"sufami": "nintendo-sufami-turbo",
"videopacplus": "philips-videopac",
"vsmile": "vtech-vsmile",
"atari800": "atari-400-800",
"atari5200": "atari-5200",
"atarist": "atari-st",
+9 -1
View File
@@ -45,7 +45,12 @@ SOURCE_URL = (
SYSTEM_SLUG_MAP = {
"3do": "3do",
"bk": "elektronika-bk",
"dragon": "dragon64",
"palm": "palm-os",
"pokemini": "nintendo-pokemon-mini",
"sufami": "nintendo-sufami-turbo",
"videopacplus": "philips-videopac",
"trs80coco": "coco",
"amiga600": "commodore-amiga",
"amiga1200": "commodore-amiga",
@@ -230,7 +235,10 @@ class Scraper(BaseScraper):
for system_elem in root.findall(".//system"):
platform = system_elem.get("platform", "")
system_slug = SYSTEM_SLUG_MAP.get(platform, platform)
# One <system> can serve several platforms ("msx1,msx2", "gb,gbc"):
# it is filed under the first, which names the machine family.
first = platform.split(",")[0].strip()
system_slug = SYSTEM_SLUG_MAP.get(first, first)
fullname = system_elem.get("fullname", "")
for bios_elem in system_elem.findall("bios"):
+4
View File
@@ -74,6 +74,10 @@ def es_systems_cores(text: str) -> tuple[set[str], set[str]]:
# until the two shared one map.
SYSTEM_SLUG_MAP = {
**BATOCERA_SLUGS,
"amiga4000": "commodore-amiga",
"arcadia": "emerson-arcadia-2001",
"ecwolf": "wolfenstein3d",
"namco2x6": "namco-system246",
"ps2": "sony-playstation-2",
"ps3": "sony-playstation-3",
"psvita": "sony-playstation-vita",
+1
View File
@@ -153,6 +153,7 @@ SYSTEM_SLUG_MAP: dict[str, str | None] = {
"dragon": "dragon64",
"tanodragon": "dragon64",
"pico8": "pico8",
"vsmile": "vtech-vsmile",
"wolfenstein": "wolfenstein-3d",
"zxspectrum": "sinclair-zx-spectrum",
}
+32
View File
@@ -713,6 +713,38 @@ class OneNativeIdOneSystem(unittest.TestCase):
self.assertTrue({"sony-playstation", "nintendo-ds"} <= set(data["systems"]))
self.assertFalse({"psx", "nds", "atari800"} & set(data["systems"]))
# A platform system no profile names gets no core extra and answers no
# --system. Named here: Batocera's family folds Naomi and Atomiswave into
# one system the profiles keep apart, and MiSTer cores nothing profiles.
UNMATCHED = {
"*": {"sega-dreamcast-arcade"},
"misterfpga": {"gameking", "interact", "marty", "studio-ii", "superacan",
"videobrain"},
}
def test_every_platform_system_meets_a_profile_system(self):
import yaml # noqa: PLC0415
from common import ( # noqa: PLC0415
_norm_system_id,
load_emulator_profiles,
load_platform_config,
)
known = set()
for profile in load_emulator_profiles(str(REPO_ROOT / "emulators")).values():
known |= {_norm_system_id(s) for s in profile.get("systems") or []}
known |= {_norm_system_id(f["system"]) for f in profile.get("files") or []
if isinstance(f, dict) and f.get("system")}
registry = yaml.safe_load((REPO_ROOT / "platforms" / "_registry.yml").read_text())
for name in registry["platforms"]:
with self.subTest(platform=name):
config = load_platform_config(name, str(REPO_ROOT / "platforms"))
allowed = self.UNMATCHED["*"] | self.UNMATCHED.get(name, set())
stray = {s for s in config.get("systems", {})
if _norm_system_id(s) not in known} - allowed
self.assertEqual(stray, set())
def test_xroar_machines_reach_the_platforms_that_run_it(self):
import yaml # noqa: PLC0415