fix: give one native system id one slug

RetroDECK filed coco as tandy-coco and Dragon as dragon-32-64, MiSTer
filed COCO3 as tandy-coco and Recalbox kept its raw ids, so none of
them met xroar's coco, coco3 and dragon64 and its ROMs reached no
system. The scraper maps now agree and a test holds every shared
native id to one system.
This commit is contained in:
Abdessamad Derraz committed 2026-10-17 11:59:38 +02:00
1 parent 27ddd47b20
commit e540dac996
8 files changed
+81 -33

No files matched your search

+23 -23
View File
@@ -97,6 +97,29 @@ systems:
native_id: Casio_PV-2000
name: Casio PV-2000
docs: "https://github.com/MiSTer-devel/Casio_PV-2000_MiSTer"
coco3:
files:
- name: boot0.rom
destination: COCO3/boot0.rom
required: true
md5: 7233c6c429f3ce1c7392f28a933e0b6f
size: 32768
native_system: COCO3
- name: boot1.rom
destination: COCO3/boot1.rom
required: true
md5: 8cab28f4b7311b8df63c07bb3b59bfd5
size: 8192
native_system: COCO3
- name: boot2.rom
destination: COCO3/boot2.rom
required: true
md5: 171fb7a5d3b808565295b45c773abaaf
size: 8192
native_system: COCO3
native_id: COCO3
name: Tandy Color Computer 3
docs: "https://github.com/MiSTer-devel/CoCo3_MiSTer"
creativision:
files:
- name: boot.rom
@@ -597,29 +620,6 @@ systems:
native_system: SuperAcan
native_id: SuperAcan
name: superacan
tandy-coco:
files:
- name: boot0.rom
destination: COCO3/boot0.rom
required: true
md5: 7233c6c429f3ce1c7392f28a933e0b6f
size: 32768
native_system: COCO3
- name: boot1.rom
destination: COCO3/boot1.rom
required: true
md5: 8cab28f4b7311b8df63c07bb3b59bfd5
size: 8192
native_system: COCO3
- name: boot2.rom
destination: COCO3/boot2.rom
required: true
md5: 171fb7a5d3b808565295b45c773abaaf
size: 8192
native_system: COCO3
native_id: COCO3
name: Tandy Color Computer 3
docs: "https://github.com/MiSTer-devel/CoCo3_MiSTer"
ti99:
files:
- name: boot0.rom
+2 -2
View File
@@ -2948,7 +2948,7 @@ systems:
native_name: Texas Instrument TI-99/4A
note: Disk Operating System
native_id: ti994a
dragon:
dragon64:
files:
- name: d32.rom
destination: dragon/d32.rom
@@ -3131,7 +3131,7 @@ systems:
native_name: Dragon 32/64
note: Super DOS E8
native_id: dragon
trs80coco:
coco:
files:
- name: bas10.rom
destination: trs80coco/bas10.rom
+2 -2
View File
@@ -15751,7 +15751,7 @@ systems:
native_system: xbox
component: xemu
description: XBOX Complex BIOS 4627
dragon-32-64:
dragon64:
files:
- name: d32.rom
destination: bios/d32.rom
@@ -15882,7 +15882,7 @@ systems:
native_system: tanodragon
component: xroar
description: Prológica CP-400 BASIC OS firmware
tandy-coco:
coco:
files:
- name: cp400extbas.rom
destination: bios/cp400extbas.rom
+1 -1
View File
@@ -85,7 +85,7 @@ SYSTEM_SLUG_MAP = {
"ps2": "sony-playstation-2",
"ps3": "sony-playstation-3",
"psp": "sony-psp",
"psvita": "sony-psvita",
"psvita": "sony-playstation-vita",
"segacd": "sega-mega-cd",
"megacd": "sega-mega-cd",
"saturn": "sega-saturn",
+1 -1
View File
@@ -61,7 +61,7 @@ SYSTEM_MAP = {
"Astrocade": ("bally-astrocade", "Bally Astrocade", "Astrocade_MiSTer"),
"AtariLynx": ("atari-lynx", "Atari Lynx", "AtariLynx_MiSTer"),
"CD-i": ("philips-cdi", "Philips CD-i", "CDi_MiSTer"),
"COCO3": ("tandy-coco", "Tandy Color Computer 3", "CoCo3_MiSTer"),
"COCO3": ("coco3", "Tandy Color Computer 3", "CoCo3_MiSTer"),
"Casio_PV-2000": ("casio-pv2000", "Casio PV-2000", "Casio_PV-2000_MiSTer"),
"CreatiVision": ("creativision", "VTech CreatiVision", "CreatiVision_MiSTer"),
"GAMEBOY": ("nintendo-gb", "Game Boy / Game Boy Color", "Gameboy_MiSTer"),
+2
View File
@@ -49,6 +49,8 @@ SOURCE_URL = (
SYSTEM_SLUG_MAP = {
"3do": "3do",
"dragon": "dragon64",
"trs80coco": "coco",
"amiga600": "commodore-amiga",
"amiga1200": "commodore-amiga",
"amigacd32": "commodore-amiga",
+6 -4
View File
@@ -85,7 +85,7 @@ SYSTEM_SLUG_MAP: dict[str, str | None] = {
"ps2": "sony-playstation-2",
"ps3": "sony-playstation-3",
"psp": "sony-psp",
"psvita": "sony-psvita",
"psvita": "sony-playstation-vita",
# Sega
"megadrive": "sega-mega-drive",
"genesis": "sega-mega-drive",
@@ -146,10 +146,12 @@ SYSTEM_SLUG_MAP: dict[str, str | None] = {
"wonderswan": "bandai-wonderswan",
"neogeocd": "snk-neogeo-cd",
"neogeocdjp": "snk-neogeo-cd",
"coco": "tandy-coco",
# xroar files the CoCo 1/2 ROMs under coco and the Dragon 64's under
# dragon64, the ids Batocera uses too.
"coco": "coco",
"trs80": "tandy-trs-80",
"dragon": "dragon-32-64",
"tanodragon": "dragon-32-64",
"dragon": "dragon64",
"tanodragon": "dragon64",
"pico8": "pico8",
"wolfenstein": "wolfenstein-3d",
"zxspectrum": "sinclair-zx-spectrum",
+44
View File
@@ -587,5 +587,49 @@ class ImportingAScraperFetchesNothing(unittest.TestCase):
)
class OneNativeIdOneSystem(unittest.TestCase):
"""RetroDECK filed coco as tandy-coco and Batocera as coco: xroar's 28
CoCo and Dragon ROMs reached no RetroDECK system, and --system left
them out of the pack and the installer alike."""
# A folder each platform fills with something else, not a system name:
# EmuDeck checks the Neo Geo BIOS there, RetroDECK keeps arcade sets.
# Several platforms file the PC Engine CD under the HuCard system, the
# native_system of each entry keeping the platform's own grouping.
FOLDS = {"fbneo", "pcenginecd"}
def test_scrapers_agree_on_every_shared_native_id(self):
from common import _norm_system_id # noqa: PLC0415
seen: dict[str, dict[str, str]] = {}
for path in sorted((REPO_ROOT / "scripts" / "scraper").glob("*_scraper.py")):
if "SYSTEM_SLUG_MAP" not in path.read_text():
continue
module = importlib.import_module(f"scraper.{path.stem}")
for native, slug in getattr(module, "SYSTEM_SLUG_MAP", {}).items():
slug = slug[0] if isinstance(slug, tuple) else slug
if isinstance(slug, str):
seen.setdefault(native.lower(), {})[path.stem] = slug
split = {
native: by for native, by in seen.items()
if native not in self.FOLDS and len({_norm_system_id(s) for s in by.values()}) > 1
}
self.assertEqual(split, {})
def test_xroar_machines_reach_the_platforms_that_run_it(self):
import yaml # noqa: PLC0415
from common import _norm_system_id # noqa: PLC0415
xroar = yaml.safe_load((REPO_ROOT / "emulators" / "xroar.yml").read_text())
machines = {_norm_system_id(s) for s in xroar["systems"]}
for platform, wanted in (("retrodeck", {"coco", "dragon64"}),
("recalbox", {"coco", "dragon64"}),
("misterfpga", {"coco3"})):
with self.subTest(platform=platform):
data = yaml.safe_load((REPO_ROOT / "platforms" / f"{platform}.yml").read_text())
ids = {_norm_system_id(s) for s in data["systems"]}
self.assertEqual(wanted & ids & machines, wanted)
if __name__ == "__main__":
unittest.main()