chore: regenerate manifests, site, and docs after new BIOS files

This commit is contained in:
Abdessamad Derraz
2026-04-02 15:56:24 +02:00
parent f9a612db4a
commit 2f11542ed3
10 changed files with 558 additions and 44 deletions

View File

@@ -4,7 +4,7 @@
"platform": "batocera",
"display_name": "Batocera",
"version": "1.0",
"generated": "2026-04-02T08:32:09Z",
"generated": "2026-04-02T13:52:15Z",
"base_destination": "bios",
"detect": [
{
@@ -15,8 +15,8 @@
}
],
"standalone_copies": [],
"total_files": 1541,
"total_size": 3891648039,
"total_files": 1547,
"total_size": 4371484317,
"files": [
{
"dest": "panafz1.bin",
@@ -6157,6 +6157,39 @@
"FinalBurn Neo"
]
},
{
"dest": "fbneo/samples/donpachi.zip",
"sha1": "d380fb29287eb7fc9ff901a7653ad40785f7deb1",
"size": 208549253,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "donpachi.zip"
},
{
"dest": "fbneo/samples/sfz3mix.zip",
"sha1": "937cdc6ccf9de418b94d8b762aad36822f857ec9",
"size": 116329446,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "sfz3mix.zip"
},
{
"dest": "fbneo/samples/twotiger.zip",
"sha1": "74399cc36d97e9f74b387b87900505ebbf260ca9",
"size": 154888877,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "twotiger.zip"
},
{
"dest": "gamegenie.nes",
"sha1": "f430a0d752a9fa0c7032db8131f9090d18f71779",
@@ -8398,6 +8431,24 @@
"NXEngine"
]
},
{
"dest": "nxengine/data/sprites.sif",
"sha1": "73acccee601b56a2b7f624b0227fa7e1d662ef4b",
"size": 59482,
"repo_path": "bios/Other/NXEngine/nxengine/data/sprites.sif",
"cores": [
"NXEngine"
]
},
{
"dest": "nxengine/tilekey.dat",
"sha1": "74c14b15dbc2f36c81d2ad9cb65e2893298415da",
"size": 1028,
"repo_path": "bios/Other/NXEngine/nxengine/tilekey.dat",
"cores": [
"NXEngine"
]
},
{
"dest": "NMS8245SystemROM1.08.bin",
"sha1": "cc57c1dcd7249ea9f8e2547244592e7d97308ed0",
@@ -10666,6 +10717,15 @@
"XRoar"
]
},
{
"dest": "delta2.rom",
"sha1": "686ebb5f39dd4fc907a0b748867d0a022d2f1a60",
"size": 8192,
"repo_path": "bios/Dragon/Dragon/delta2.rom",
"cores": [
"XRoar"
]
},
{
"dest": "cp450dsk.rom",
"sha1": "827697fa5b755f5dc1efb054cdbbeb04e405405b",

View File

@@ -4,7 +4,7 @@
"platform": "bizhawk",
"display_name": "BizHawk",
"version": "1.0",
"generated": "2026-04-01T14:00:10Z",
"generated": "2026-04-02T13:52:21Z",
"base_destination": "Firmware",
"detect": [
{
@@ -19,8 +19,8 @@
}
],
"standalone_copies": [],
"total_files": 527,
"total_size": 2068127713,
"total_files": 530,
"total_size": 2547895289,
"files": [
{
"dest": "panafz1.bin",
@@ -1274,6 +1274,39 @@
"FinalBurn Neo"
]
},
{
"dest": "fbneo/samples/donpachi.zip",
"sha1": "d380fb29287eb7fc9ff901a7653ad40785f7deb1",
"size": 208549253,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "donpachi.zip"
},
{
"dest": "fbneo/samples/sfz3mix.zip",
"sha1": "937cdc6ccf9de418b94d8b762aad36822f857ec9",
"size": 116329446,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "sfz3mix.zip"
},
{
"dest": "fbneo/samples/twotiger.zip",
"sha1": "74399cc36d97e9f74b387b87900505ebbf260ca9",
"size": 154888877,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "twotiger.zip"
},
{
"dest": "sl31253.bin",
"sha1": "81193965a374d77b99b4743d317824b53c3e3c78",

View File

@@ -4,7 +4,7 @@
"platform": "lakka",
"display_name": "Lakka",
"version": "1.0",
"generated": "2026-04-02T08:32:35Z",
"generated": "2026-04-02T13:52:45Z",
"base_destination": "system",
"detect": [
{
@@ -15,8 +15,8 @@
}
],
"standalone_copies": [],
"total_files": 1621,
"total_size": 5255390792,
"total_files": 1627,
"total_size": 5735234905,
"files": [
{
"dest": "3do_arcade_saot.bin",
@@ -5079,6 +5079,39 @@
"storage": "release",
"release_asset": "vimana.zip"
},
{
"dest": "fbneo/samples/donpachi.zip",
"sha1": "d380fb29287eb7fc9ff901a7653ad40785f7deb1",
"size": 208549253,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "donpachi.zip"
},
{
"dest": "fbneo/samples/sfz3mix.zip",
"sha1": "937cdc6ccf9de418b94d8b762aad36822f857ec9",
"size": 116329446,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "sfz3mix.zip"
},
{
"dest": "fbneo/samples/twotiger.zip",
"sha1": "74399cc36d97e9f74b387b87900505ebbf260ca9",
"size": 154888877,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "twotiger.zip"
},
{
"dest": "nes.pal",
"sha1": "37027d92e1015b82a7dc5c43e9f1649a961577ab",
@@ -7871,6 +7904,24 @@
"NXEngine"
]
},
{
"dest": "nxengine/data/sprites.sif",
"sha1": "73acccee601b56a2b7f624b0227fa7e1d662ef4b",
"size": 59482,
"repo_path": "bios/Other/NXEngine/nxengine/data/sprites.sif",
"cores": [
"NXEngine"
]
},
{
"dest": "nxengine/tilekey.dat",
"sha1": "74c14b15dbc2f36c81d2ad9cb65e2893298415da",
"size": 1028,
"repo_path": "bios/Other/NXEngine/nxengine/tilekey.dat",
"cores": [
"NXEngine"
]
},
{
"dest": "mda.rom",
"sha1": "c2a8b10808bf51a3c123ba3eb1e9dd608231916f",
@@ -9659,6 +9710,15 @@
"SameBoy"
]
},
{
"dest": "sdlpal/desc.dat",
"sha1": "8c20ff26ebfefbf9b050b67af8083704003595ba",
"size": 16027,
"repo_path": "bios/sdlpal/desc.dat",
"cores": [
"SDLPAL"
]
},
{
"dest": "SkyEmu/dmg_rom.bin",
"sha1": "4ed31ec6b0b175bb109c0eb5fd3d193da823339f",

View File

@@ -4,7 +4,7 @@
"platform": "recalbox",
"display_name": "Recalbox",
"version": "1.0",
"generated": "2026-04-02T08:33:02Z",
"generated": "2026-04-02T13:53:15Z",
"base_destination": "bios",
"detect": [
{
@@ -15,8 +15,8 @@
}
],
"standalone_copies": [],
"total_files": 1098,
"total_size": 3500175098,
"total_files": 1107,
"total_size": 3980096655,
"files": [
{
"dest": "3do/panafz1.bin",
@@ -540,7 +540,7 @@
"dest": "dragon/deltados.rom",
"sha1": "686ebb5f39dd4fc907a0b748867d0a022d2f1a60",
"size": 8192,
"repo_path": "bios/Dragon/Dragon/deltados.rom",
"repo_path": "bios/Dragon/Dragon/delta2.rom",
"cores": null
},
{
@@ -3804,6 +3804,39 @@
"FinalBurn Neo"
]
},
{
"dest": "fbneo/samples/donpachi.zip",
"sha1": "d380fb29287eb7fc9ff901a7653ad40785f7deb1",
"size": 208549253,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "donpachi.zip"
},
{
"dest": "fbneo/samples/sfz3mix.zip",
"sha1": "937cdc6ccf9de418b94d8b762aad36822f857ec9",
"size": 116329446,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "sfz3mix.zip"
},
{
"dest": "fbneo/samples/twotiger.zip",
"sha1": "74399cc36d97e9f74b387b87900505ebbf260ca9",
"size": 154888877,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "twotiger.zip"
},
{
"dest": "gamegenie.nes",
"sha1": "f430a0d752a9fa0c7032db8131f9090d18f71779",
@@ -6459,6 +6492,24 @@
"NXEngine"
]
},
{
"dest": "nxengine/data/sprites.sif",
"sha1": "73acccee601b56a2b7f624b0227fa7e1d662ef4b",
"size": 59482,
"repo_path": "bios/Other/NXEngine/nxengine/data/sprites.sif",
"cores": [
"NXEngine"
]
},
{
"dest": "nxengine/tilekey.dat",
"sha1": "74c14b15dbc2f36c81d2ad9cb65e2893298415da",
"size": 1028,
"repo_path": "bios/Other/NXEngine/nxengine/tilekey.dat",
"cores": [
"NXEngine"
]
},
{
"dest": "64DD_IPL.bin",
"sha1": "bf861922dcb78c316360e3e742f4f70ff63c9bc3",
@@ -6828,6 +6879,33 @@
"Stella 2023"
]
},
{
"dest": "Gram Kracker.ctg",
"sha1": "56dd520570cdcdd60dda2eedc8af1e02a781dcc5",
"size": 7587,
"repo_path": "bios/Texas Instruments/TI-99/Gram Kracker.ctg",
"cores": [
"ti99sim"
]
},
{
"dest": "ti-pcard.ctg",
"sha1": "c7bf5fcfea0502011dca76d12efcc242e23421b9",
"size": 71924,
"repo_path": "bios/Texas Instruments/TI-99/ti-pcard.ctg",
"cores": [
"ti99sim"
]
},
{
"dest": "cf7+.ctg",
"sha1": "698c638e1773244a6bf8a353c87d210047cce402",
"size": 5768,
"repo_path": "bios/Texas Instruments/TI-99/cf7+.ctg",
"cores": [
"ti99sim"
]
},
{
"dest": "JiffyDOS_SX-64.bin",
"sha1": "942c2150123dc30f40b3df6086132ef0a3c43948",
@@ -7053,6 +7131,15 @@
"XRoar"
]
},
{
"dest": "delta2.rom",
"sha1": "686ebb5f39dd4fc907a0b748867d0a022d2f1a60",
"size": 8192,
"repo_path": "bios/Dragon/Dragon/delta2.rom",
"cores": [
"XRoar"
]
},
{
"dest": "cp450dsk.rom",
"sha1": "827697fa5b755f5dc1efb054cdbbeb04e405405b",

View File

@@ -4,7 +4,7 @@
"platform": "retroarch",
"display_name": "RetroArch",
"version": "1.0",
"generated": "2026-04-02T08:32:35Z",
"generated": "2026-04-02T13:52:45Z",
"base_destination": "system",
"detect": [
{
@@ -33,8 +33,8 @@
}
],
"standalone_copies": [],
"total_files": 1621,
"total_size": 5255390792,
"total_files": 1627,
"total_size": 5735234905,
"files": [
{
"dest": "3do_arcade_saot.bin",
@@ -5097,6 +5097,39 @@
"storage": "release",
"release_asset": "vimana.zip"
},
{
"dest": "fbneo/samples/donpachi.zip",
"sha1": "d380fb29287eb7fc9ff901a7653ad40785f7deb1",
"size": 208549253,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "donpachi.zip"
},
{
"dest": "fbneo/samples/sfz3mix.zip",
"sha1": "937cdc6ccf9de418b94d8b762aad36822f857ec9",
"size": 116329446,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "sfz3mix.zip"
},
{
"dest": "fbneo/samples/twotiger.zip",
"sha1": "74399cc36d97e9f74b387b87900505ebbf260ca9",
"size": 154888877,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "twotiger.zip"
},
{
"dest": "nes.pal",
"sha1": "37027d92e1015b82a7dc5c43e9f1649a961577ab",
@@ -7889,6 +7922,24 @@
"NXEngine"
]
},
{
"dest": "nxengine/data/sprites.sif",
"sha1": "73acccee601b56a2b7f624b0227fa7e1d662ef4b",
"size": 59482,
"repo_path": "bios/Other/NXEngine/nxengine/data/sprites.sif",
"cores": [
"NXEngine"
]
},
{
"dest": "nxengine/tilekey.dat",
"sha1": "74c14b15dbc2f36c81d2ad9cb65e2893298415da",
"size": 1028,
"repo_path": "bios/Other/NXEngine/nxengine/tilekey.dat",
"cores": [
"NXEngine"
]
},
{
"dest": "mda.rom",
"sha1": "c2a8b10808bf51a3c123ba3eb1e9dd608231916f",
@@ -9677,6 +9728,15 @@
"SameBoy"
]
},
{
"dest": "sdlpal/desc.dat",
"sha1": "8c20ff26ebfefbf9b050b67af8083704003595ba",
"size": 16027,
"repo_path": "bios/sdlpal/desc.dat",
"cores": [
"SDLPAL"
]
},
{
"dest": "SkyEmu/dmg_rom.bin",
"sha1": "4ed31ec6b0b175bb109c0eb5fd3d193da823339f",

View File

@@ -4,7 +4,7 @@
"platform": "retrobat",
"display_name": "RetroBat",
"version": "1.0",
"generated": "2026-04-02T08:33:12Z",
"generated": "2026-04-02T13:53:25Z",
"base_destination": "bios",
"detect": [
{
@@ -14,8 +14,8 @@
}
],
"standalone_copies": [],
"total_files": 1163,
"total_size": 4297804943,
"total_files": 1169,
"total_size": 4777641221,
"files": [
{
"dest": "panafz1.bin",
@@ -3977,6 +3977,39 @@
"storage": "release",
"release_asset": "vimana.zip"
},
{
"dest": "fbneo/samples/donpachi.zip",
"sha1": "d380fb29287eb7fc9ff901a7653ad40785f7deb1",
"size": 208549253,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "donpachi.zip"
},
{
"dest": "fbneo/samples/sfz3mix.zip",
"sha1": "937cdc6ccf9de418b94d8b762aad36822f857ec9",
"size": 116329446,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "sfz3mix.zip"
},
{
"dest": "fbneo/samples/twotiger.zip",
"sha1": "74399cc36d97e9f74b387b87900505ebbf260ca9",
"size": 154888877,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "twotiger.zip"
},
{
"dest": "gamegenie.nes",
"sha1": "f430a0d752a9fa0c7032db8131f9090d18f71779",
@@ -6200,6 +6233,24 @@
"NXEngine"
]
},
{
"dest": "nxengine/data/sprites.sif",
"sha1": "73acccee601b56a2b7f624b0227fa7e1d662ef4b",
"size": 59482,
"repo_path": "bios/Other/NXEngine/nxengine/data/sprites.sif",
"cores": [
"NXEngine"
]
},
{
"dest": "nxengine/tilekey.dat",
"sha1": "74c14b15dbc2f36c81d2ad9cb65e2893298415da",
"size": 1028,
"repo_path": "bios/Other/NXEngine/nxengine/tilekey.dat",
"cores": [
"NXEngine"
]
},
{
"dest": "panafz1j.bin",
"sha1": "ec7ec62d60ec0459a14ed56ebc66761ef3c80efc",
@@ -7448,6 +7499,15 @@
"XRoar"
]
},
{
"dest": "delta2.rom",
"sha1": "686ebb5f39dd4fc907a0b748867d0a022d2f1a60",
"size": 8192,
"repo_path": "bios/Dragon/Dragon/delta2.rom",
"cores": [
"XRoar"
]
},
{
"dest": "cp450dsk.rom",
"sha1": "827697fa5b755f5dc1efb054cdbbeb04e405405b",

View File

@@ -4,7 +4,7 @@
"platform": "retrodeck",
"display_name": "RetroDECK",
"version": "1.0",
"generated": "2026-04-02T08:33:28Z",
"generated": "2026-04-02T13:53:43Z",
"base_destination": "",
"detect": [
{
@@ -15,8 +15,8 @@
}
],
"standalone_copies": [],
"total_files": 3146,
"total_size": 5871648429,
"total_files": 3153,
"total_size": 6351500734,
"files": [
{
"dest": "bios/panafz1.bin",
@@ -11082,7 +11082,7 @@
"dest": "bios/deltados.rom",
"sha1": "686ebb5f39dd4fc907a0b748867d0a022d2f1a60",
"size": 8192,
"repo_path": "bios/Dragon/Dragon/deltados.rom",
"repo_path": "bios/Dragon/Dragon/delta2.rom",
"cores": null
},
{
@@ -16297,6 +16297,39 @@
"storage": "release",
"release_asset": "vimana.zip"
},
{
"dest": "fbneo/samples/donpachi.zip",
"sha1": "d380fb29287eb7fc9ff901a7653ad40785f7deb1",
"size": 208549253,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "donpachi.zip"
},
{
"dest": "fbneo/samples/sfz3mix.zip",
"sha1": "937cdc6ccf9de418b94d8b762aad36822f857ec9",
"size": 116329446,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "sfz3mix.zip"
},
{
"dest": "fbneo/samples/twotiger.zip",
"sha1": "74399cc36d97e9f74b387b87900505ebbf260ca9",
"size": 154888877,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "twotiger.zip"
},
{
"dest": "gamegenie.nes",
"sha1": "f430a0d752a9fa0c7032db8131f9090d18f71779",
@@ -18263,6 +18296,24 @@
"NXEngine"
]
},
{
"dest": "nxengine/data/sprites.sif",
"sha1": "73acccee601b56a2b7f624b0227fa7e1d662ef4b",
"size": 59482,
"repo_path": "bios/Other/NXEngine/nxengine/data/sprites.sif",
"cores": [
"NXEngine"
]
},
{
"dest": "nxengine/tilekey.dat",
"sha1": "74c14b15dbc2f36c81d2ad9cb65e2893298415da",
"size": 1028,
"repo_path": "bios/Other/NXEngine/nxengine/tilekey.dat",
"cores": [
"NXEngine"
]
},
{
"dest": "mda.rom",
"sha1": "c2a8b10808bf51a3c123ba3eb1e9dd608231916f",
@@ -20044,6 +20095,15 @@
"SameBoy"
]
},
{
"dest": "sdlpal/desc.dat",
"sha1": "8c20ff26ebfefbf9b050b67af8083704003595ba",
"size": 16027,
"repo_path": "bios/sdlpal/desc.dat",
"cores": [
"SDLPAL"
]
},
{
"dest": "SkyEmu/dmg_rom.bin",
"sha1": "4ed31ec6b0b175bb109c0eb5fd3d193da823339f",
@@ -21740,6 +21800,15 @@
"XRoar"
]
},
{
"dest": "delta2.rom",
"sha1": "686ebb5f39dd4fc907a0b748867d0a022d2f1a60",
"size": 8192,
"repo_path": "bios/Dragon/Dragon/delta2.rom",
"cores": [
"XRoar"
]
},
{
"dest": "cp450dsk.rom",
"sha1": "827697fa5b755f5dc1efb054cdbbeb04e405405b",

View File

@@ -4,7 +4,7 @@
"platform": "romm",
"display_name": "RomM",
"version": "1.0",
"generated": "2026-04-01T14:43:09Z",
"generated": "2026-04-02T13:53:45Z",
"base_destination": "bios",
"detect": [
{
@@ -14,8 +14,8 @@
}
],
"standalone_copies": [],
"total_files": 535,
"total_size": 1076531155,
"total_files": 538,
"total_size": 1556298731,
"files": [
{
"dest": "3do/3do_arcade_saot.bin",
@@ -2796,6 +2796,39 @@
"ep128emu-core"
]
},
{
"dest": "colecovision/fbneo/samples/donpachi.zip",
"sha1": "d380fb29287eb7fc9ff901a7653ad40785f7deb1",
"size": 208549253,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "donpachi.zip"
},
{
"dest": "colecovision/fbneo/samples/sfz3mix.zip",
"sha1": "937cdc6ccf9de418b94d8b762aad36822f857ec9",
"size": 116329446,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "sfz3mix.zip"
},
{
"dest": "colecovision/fbneo/samples/twotiger.zip",
"sha1": "74399cc36d97e9f74b387b87900505ebbf260ca9",
"size": 154888877,
"repo_path": "",
"cores": [
"FinalBurn Neo"
],
"storage": "release",
"release_asset": "twotiger.zip"
},
{
"dest": "fds/gamegenie.nes",
"sha1": "f430a0d752a9fa0c7032db8131f9090d18f71779",

View File

@@ -127,11 +127,22 @@ def _build_system_page_map_from_data(
break
def _slugify_anchor(text: str) -> str:
"""Slugify text for MkDocs anchor compatibility."""
import re
slug = text.lower()
slug = re.sub(r"[^\w\s-]", "", slug)
slug = re.sub(r"[\s]+", "-", slug)
slug = slug.strip("-")
return slug
def _system_link(sys_id: str, prefix: str = "") -> str:
"""Generate a markdown link to a system page with anchor."""
if sys_id in _system_page_map:
slug, console = _system_page_map[sys_id]
anchor = console.lower().replace(" ", "-").replace("/", "-")
anchor = _slugify_anchor(console)
return f"[{sys_id}]({prefix}systems/{slug}.md#{anchor})"
return sys_id
@@ -239,7 +250,9 @@ def generate_home(
# Classification stats
classifications: dict[str, int] = {}
for p in unique.values():
cls = p.get("core_classification", "unclassified")
cls = p.get("core_classification", "other")
if cls not in CLS_LABELS or cls == "unclassified":
cls = "other"
classifications[cls] = classifications.get(cls, 0) + 1
# Count total systems across all profiles
@@ -893,8 +906,10 @@ def generate_emulator_page(
emu_name = profile.get("emulator", name)
emu_type = profile.get("type", "unknown")
classification = profile.get("core_classification", "")
source = profile.get("source", "")
upstream = profile.get("upstream", "")
source_raw = profile.get("source", "")
source = str(source_raw) if not isinstance(source_raw, dict) else ""
upstream_raw = profile.get("upstream", "")
upstream = str(upstream_raw) if not isinstance(upstream_raw, dict) else ""
version = profile.get("core_version", "unknown")
profile.get("display_name", emu_name)
profiled = profile.get("profiled_date", "unknown")
@@ -920,10 +935,32 @@ def generate_emulator_page(
if classification:
cls_display = CLS_LABELS.get(classification, classification)
lines.append(f"| Classification | {cls_display} |")
if source:
lines.append(f"| Source | [{source}]({source}) |")
if upstream and upstream != source:
lines.append(f"| Upstream | [{upstream}]({upstream}) |")
if isinstance(source_raw, dict):
parts = []
for k, v in source_raw.items():
if isinstance(v, str) and v.startswith("http"):
parts.append(f"[{k}]({v})")
else:
parts.append(f"{k}: {v}")
lines.append(f"| Source | {', '.join(parts)} |")
elif source:
if source.startswith("http"):
lines.append(f"| Source | [{source}]({source}) |")
else:
lines.append(f"| Source | {source} |")
if isinstance(upstream_raw, dict):
parts = []
for k, v in upstream_raw.items():
if isinstance(v, str) and v.startswith("http"):
parts.append(f"[{k}]({v})")
else:
parts.append(f"{k}: {v}")
lines.append(f"| Upstream | {', '.join(parts)} |")
elif upstream and upstream != source:
if upstream.startswith("http"):
lines.append(f"| Upstream | [{upstream}]({upstream}) |")
else:
lines.append(f"| Upstream | {upstream} |")
lines.append(f"| Version | {version} |")
lines.append(f"| Profiled | {profiled} |")
if cores:
@@ -1824,8 +1861,10 @@ def generate_cross_reference(
cls_raw = p.get("core_classification", "-")
cls = CLS_LABELS.get(cls_raw, cls_raw)
p.get("type", "")
upstream = p.get("upstream", "")
source = p.get("source", "")
upstream_raw2 = p.get("upstream", "")
upstream = str(upstream_raw2) if not isinstance(upstream_raw2, dict) else ""
source_raw2 = p.get("source", "")
source = str(source_raw2) if not isinstance(source_raw2, dict) else ""
systems = p.get("systems", [])
files = p.get("files", [])
@@ -1847,12 +1886,16 @@ def generate_cross_reference(
file_str += f" ({', '.join(parts)})"
upstream_display = "-"
if upstream:
if upstream and upstream.startswith("http"):
upstream_short = upstream.replace("https://github.com/", "")
upstream_display = f"[{upstream_short}]({upstream})"
elif source:
elif upstream:
upstream_display = upstream
elif source and source.startswith("http"):
source_short = source.replace("https://github.com/", "")
upstream_display = f"[{source_short}]({source})"
elif source:
upstream_display = source
lines.append(
f" | [{emu_display}](emulators/{emu_name}.md) | {cls} | "
@@ -1874,9 +1917,10 @@ def generate_cross_reference(
# Group profiles by upstream
by_upstream: dict[str, list[str]] = {}
for emu_name, p in sorted(unique.items()):
upstream = p.get("upstream", p.get("source", ""))
if upstream:
by_upstream.setdefault(upstream, []).append(emu_name)
raw_up = p.get("upstream", p.get("source", ""))
up_str = str(raw_up) if not isinstance(raw_up, dict) else ""
if up_str:
by_upstream.setdefault(up_str, []).append(emu_name)
# Build platform membership per core
platform_membership: dict[str, set[str]] = {}
@@ -1910,8 +1954,12 @@ def generate_cross_reference(
plat_str = ", ".join(sorted(all_plats)) if all_plats else "-"
core_links = ", ".join(f"[{c}](emulators/{c}.md)" for c in sorted(cores))
if upstream_url.startswith("http"):
upstream_cell = f"[{upstream_short}]({upstream_url})"
else:
upstream_cell = upstream_short
lines.append(
f"| [{upstream_short}]({upstream_url}) | {core_links} | "
f"| {upstream_cell} | {core_links} | "
f"{cls_str} | {plat_str} |"
)
@@ -1973,6 +2021,7 @@ def generate_wiki_data_model(db: dict, profiles: dict) -> str:
by_name = len(db.get("indexes", {}).get("by_name", {}))
by_crc32 = len(db.get("indexes", {}).get("by_crc32", {}))
by_path = len(db.get("indexes", {}).get("by_path_suffix", {}))
by_sha256 = len(db.get("indexes", {}).get("by_sha256", {}))
lines = [
f"# Data model - {SITE_NAME}",
@@ -2004,6 +2053,7 @@ def generate_wiki_data_model(db: dict, profiles: dict) -> str:
f"| `by_name` | {by_name} | filename to SHA1 list (name-based resolution) |",
f"| `by_crc32` | {by_crc32} | CRC32 to SHA1 lookup |",
f"| `by_path_suffix` | {by_path} | relative path to SHA1 (regional variant disambiguation) |",
f"| `by_sha256` | {by_sha256} | SHA256 to SHA1 lookup (emulator profile validation) |",
"",
"### File resolution order",
"",
@@ -2016,6 +2066,8 @@ def generate_wiki_data_model(db: dict, profiles: dict) -> str:
"5. Name + alias with md5_composite / direct MD5 per candidate",
"6. zippedFile content match via inner ROM MD5 index",
"7. MAME clone fallback (deduped ZIP mapped to canonical name)",
"8. Data directory scan (exact path then case-insensitive basename walk)",
"9. Agnostic fallback (size-constrained match under system path prefix)",
"",
"## Platform YAML",
"",

View File

@@ -236,11 +236,11 @@ user's platform, filter files by hardware target, and download with SHA1 verific
## Tests
5 test files, 249 tests total:
5 test files, 259 tests total:
| File | Tests | Coverage |
|------|-------|----------|
| `test_e2e.py` | 186 | file resolution, verification, severity, cross-reference, aliases, inheritance, shared groups, data dirs, storage tiers, HLE, launchers, platform grouping, core resolution, target filtering, truth/diff, exporters |
| `test_e2e.py` | 196 | file resolution, verification, severity, cross-reference, aliases, inheritance, shared groups, data dirs, storage tiers, HLE, launchers, platform grouping, core resolution, target filtering, truth/diff, exporters |
| `test_pack_integrity.py` | 8 | extract ZIP packs to disk, verify paths + hashes per platform's native mode |
| `test_mame_parser.py` | 22 | BIOS root set detection, ROM block parsing, macro expansion |
| `test_fbneo_parser.py` | 16 | BIOS set detection, ROM info parsing |