mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-04-13 12:22:33 -05:00
Add TRS-80, RX-78, Sega AI entries; refactor tools
Add many MAME/MESS BIOS entries (TRS-80 family, Bandai RX-78, Sega AI) and update docs/navigation counts (README, mkdocs). Remove empty supplemental file references from database.json and update generated timestamps and totals. Harden and refactor tooling: add MAX_RESPONSE_SIZE limited reader in base_scraper, make target scrapers an abstract base, narrow exception handling in the Batocera targets parser, and switch generate_pack.py and verify.py to use build_target_cores_cache (simplifies target config loading and error handling). verify.py also loads supplemental cross-reference names and accepts them through verify_platform. Update tests to import from updated modules (validation/truth). Misc: small bugfix for case-insensitive path conflict check.
This commit is contained in:
10
README.md
10
README.md
@@ -2,7 +2,7 @@
|
||||
|
||||
Complete BIOS and firmware packs for Batocera, BizHawk, EmuDeck, Lakka, Recalbox, RetroArch, RetroBat, RetroDECK, RetroPie, and RomM.
|
||||
|
||||
**7,245** verified files across **357** systems, ready to extract into your emulator's BIOS directory.
|
||||
**7,244** verified files across **387** systems, ready to extract into your emulator's BIOS directory.
|
||||
|
||||
## Quick Install
|
||||
|
||||
@@ -45,13 +45,13 @@ Each file is checked against the emulator's source code to match what the code a
|
||||
|
||||
- **10 platforms** supported with platform-specific verification
|
||||
- **328 emulators** profiled from source (RetroArch cores + standalone)
|
||||
- **357 systems** covered (NES, SNES, PlayStation, Saturn, Dreamcast, ...)
|
||||
- **7,245 files** verified with MD5, SHA1, CRC32 checksums
|
||||
- **387 systems** covered (NES, SNES, PlayStation, Saturn, Dreamcast, ...)
|
||||
- **7,244 files** verified with MD5, SHA1, CRC32 checksums
|
||||
- **9266 MB** total collection size
|
||||
|
||||
## Supported systems
|
||||
|
||||
NES, SNES, Nintendo 64, GameCube, Wii, Game Boy, Game Boy Advance, Nintendo DS, Nintendo 3DS, Switch, PlayStation, PlayStation 2, PlayStation 3, PSP, PS Vita, Mega Drive, Saturn, Dreamcast, Game Gear, Master System, Neo Geo, Atari 2600, Atari 7800, Atari Lynx, Atari ST, MSX, PC Engine, TurboGrafx-16, ColecoVision, Intellivision, Commodore 64, Amiga, ZX Spectrum, Arcade (MAME), and 323+ more.
|
||||
NES, SNES, Nintendo 64, GameCube, Wii, Game Boy, Game Boy Advance, Nintendo DS, Nintendo 3DS, Switch, PlayStation, PlayStation 2, PlayStation 3, PSP, PS Vita, Mega Drive, Saturn, Dreamcast, Game Gear, Master System, Neo Geo, Atari 2600, Atari 7800, Atari Lynx, Atari ST, MSX, PC Engine, TurboGrafx-16, ColecoVision, Intellivision, Commodore 64, Amiga, ZX Spectrum, Arcade (MAME), and 353+ more.
|
||||
|
||||
Full list with per-file details: **[https://abdess.github.io/retrobios/](https://abdess.github.io/retrobios/)**
|
||||
|
||||
@@ -130,4 +130,4 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
||||
|
||||
This repository provides BIOS files for personal backup and archival purposes.
|
||||
|
||||
*Auto-generated on 2026-03-29T14:15:30Z*
|
||||
*Auto-generated on 2026-03-29T21:00:40Z*
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"generated_at": "2026-03-29T20:52:06Z",
|
||||
"total_files": 7245,
|
||||
"generated_at": "2026-03-29T21:04:08Z",
|
||||
"total_files": 7244,
|
||||
"total_size": 9715681216,
|
||||
"files": {
|
||||
"520d3d1b5897800af47f92efd2444a26b7a7dead": {
|
||||
@@ -36133,16 +36133,6 @@
|
||||
"crc32": "c1815325",
|
||||
"adler32": "c48a690f"
|
||||
},
|
||||
"da39a3ee5e6b4b0d3255bfef95601890afd80709": {
|
||||
"path": "bios/NEC/PC-98/key.txt",
|
||||
"name": "key.txt",
|
||||
"size": 0,
|
||||
"sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
|
||||
"md5": "d41d8cd98f00b204e9800998ecf8427e",
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"crc32": "00000000",
|
||||
"adler32": "00000001"
|
||||
},
|
||||
"3518193b8207bdebf22c1380c2db8c554baff329": {
|
||||
"path": "bios/NEC/PC-98/n88.rom",
|
||||
"name": "n88.rom",
|
||||
@@ -76069,7 +76059,6 @@
|
||||
"38d32748ae49d1815b0614970849fd40": "78ba9960f135372825ab7244b5e4e73a810002ff",
|
||||
"8b52de9032ea62153dc783151306595f": "0877ffb4b4d1c18283468be3579b72ed8c22e3ac",
|
||||
"72ea51443070f0e9212bfc9b793ee28e": "a2fb11c000ed7c976520622cfb7940ed6ddc904e",
|
||||
"d41d8cd98f00b204e9800998ecf8427e": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
|
||||
"22be239bc0c4298bc0561252eed98633": "3518193b8207bdebf22c1380c2db8c554baff329",
|
||||
"e28fe3f520bea594350ea8fb00395370": "d1ae642aed4f0584eeb81ff50180db694e5101d4",
|
||||
"a8e298da7ac947669bcb1ff25cee0a83": "4ae4d37409ff99411a623da9f6a44192170a854e",
|
||||
@@ -89999,9 +89988,6 @@
|
||||
"ide.rom": [
|
||||
"0877ffb4b4d1c18283468be3579b72ed8c22e3ac"
|
||||
],
|
||||
"key.txt": [
|
||||
"da39a3ee5e6b4b0d3255bfef95601890afd80709"
|
||||
],
|
||||
"n88_1.rom": [
|
||||
"4ae4d37409ff99411a623da9f6a44192170a854e"
|
||||
],
|
||||
@@ -102454,9 +102440,6 @@
|
||||
"custom0.sf2": [
|
||||
"286b2e1fb21cc79851da01666db6c0b0e88f25e3"
|
||||
],
|
||||
"Custom.dat": [
|
||||
"da39a3ee5e6b4b0d3255bfef95601890afd80709"
|
||||
],
|
||||
"tos106de.img": [
|
||||
"3b8cf5ffa41b252eb67f8824f94608fa4005d6dd"
|
||||
],
|
||||
@@ -107087,7 +107070,6 @@
|
||||
"456d9fc7": "78ba9960f135372825ab7244b5e4e73a810002ff",
|
||||
"d402842f": "0877ffb4b4d1c18283468be3579b72ed8c22e3ac",
|
||||
"c1815325": "a2fb11c000ed7c976520622cfb7940ed6ddc904e",
|
||||
"00000000": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
|
||||
"ffd68be0": "3518193b8207bdebf22c1380c2db8c554baff329",
|
||||
"61984bab": "d1ae642aed4f0584eeb81ff50180db694e5101d4",
|
||||
"7ad5d943": "4ae4d37409ff99411a623da9f6a44192170a854e",
|
||||
@@ -127186,9 +127168,6 @@
|
||||
"zc210/sf2/custom0.sf2": [
|
||||
"286b2e1fb21cc79851da01666db6c0b0e88f25e3"
|
||||
],
|
||||
"zc210/sfx/Custom.dat": [
|
||||
"da39a3ee5e6b4b0d3255bfef95601890afd80709"
|
||||
],
|
||||
"zc210/zcdata.dat": [
|
||||
"33b50cec88bc1569431a7885c0cc2692fddb004b"
|
||||
]
|
||||
|
||||
@@ -49,7 +49,9 @@ systems:
|
||||
- coleco-adam
|
||||
- crvision
|
||||
- entex-advision
|
||||
- sega-ai
|
||||
- sega-beena
|
||||
- bandai-rx78
|
||||
- camplynx
|
||||
- tiger-game-com
|
||||
- gamepark-gp32
|
||||
@@ -63,10 +65,11 @@ systems:
|
||||
- casio-pv2000
|
||||
- pegasus
|
||||
- pcw
|
||||
- trs80
|
||||
|
||||
notes: |
|
||||
Rolling release tracking mamedev/mame upstream (currently 0.286).
|
||||
80 BIOS root sets + 19 system ROM sets (apple2gs, astrocade, adam, advision, apfm1000, beena, camplynx, casloopy, crvision, fm7, gamate, gamecom, gamepock, gmaster, gp32, laser310, pcw, pegasus, pv2000). romload.cpp
|
||||
80 BIOS root sets + 22 system ROM sets (apple2gs, astrocade, adam, advision, apfm1000, beena, camplynx, casloopy, crvision, fm7, gamate, gamecom, gamepock, gmaster, gp32, laser310, pcw, pegasus, pv2000, rx78, segaai, trs80). romload.cpp
|
||||
unmodified. No hiscore support.
|
||||
Paths under system_dir/mame/ (artwork, cheat, hash, ini, plugins,
|
||||
samples, crosshair). ROM search: content_dir + system_dir/mame/bios +
|
||||
@@ -780,6 +783,59 @@ files:
|
||||
size: 32768
|
||||
crc32: ed336d29
|
||||
|
||||
# Bandai RX-78
|
||||
- name: rx78.zip
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: bandai-rx78
|
||||
source_ref: "src/mame/bandai/rx78.cpp:559"
|
||||
note: "MACHINE_NOT_WORKING."
|
||||
contents:
|
||||
- name: ipl.rom
|
||||
description: "IPL boot ROM"
|
||||
size: 8192
|
||||
crc32: a194ea53
|
||||
|
||||
# Sega AI Computer
|
||||
- name: segaai.zip
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: sega-ai
|
||||
source_ref: "src/mame/sega/segaai.cpp:730-739"
|
||||
contents:
|
||||
- name: mpr-7689.ic5
|
||||
description: "OS ROM with SEGA PROLOG (128KB)"
|
||||
size: 131072
|
||||
crc32: 62402ac9
|
||||
- name: e000 8_24.ic3
|
||||
description: "EPROM bank E000"
|
||||
size: 65536
|
||||
crc32: c8b6a539
|
||||
- name: f000 7_21.ic4
|
||||
description: "EPROM bank F000"
|
||||
size: 65536
|
||||
crc32: 64d6cd8c
|
||||
- name: mpr-7619.ic14
|
||||
description: "UPD7759 speech ROM bank 0"
|
||||
size: 131072
|
||||
crc32: d1aea002
|
||||
- name: mpr-7620.ic15
|
||||
description: "UPD7759 speech ROM bank 1"
|
||||
size: 131072
|
||||
crc32: e042754b
|
||||
|
||||
- name: segaai_soundbox.zip
|
||||
required: false
|
||||
category: bios_zip
|
||||
system: sega-ai
|
||||
source_ref: "src/devices/bus/segaai/soundbox.cpp:152-155"
|
||||
note: "Sound Box expansion (AI-2002) with YM2151 FM + music keyboard"
|
||||
contents:
|
||||
- name: ai-snd-2002-cecb.bin
|
||||
description: "Sound Box expansion ROM"
|
||||
size: 65536
|
||||
crc32: ef2dabc0
|
||||
|
||||
# Camputers Lynx 48K
|
||||
- name: lynx48k.zip
|
||||
required: true
|
||||
@@ -1171,3 +1227,260 @@ files:
|
||||
size: 8192
|
||||
crc32: a64d450a
|
||||
|
||||
# Tandy TRS-80 family
|
||||
# Model I (trs80.cpp): trs80 (Level I, parent, WORKING), trs80l2 (Level II, parent),
|
||||
# eg3003 (EACA Video Genie, parent), sys80/sys80p (clones), ht1080z/ht1080z2/ht108064 (clones).
|
||||
# Model III/4/4P (trs80m3.cpp): trs80m3 (parent), trs80m4/trs80m4p/cp500 (clones).
|
||||
# Z80-based home computers (1977-1983). Only trs80 (Level I) is MACHINE_SUPPORTS_SAVE;
|
||||
# all others MACHINE_NOT_WORKING. Software lists: trs80_cass, trs80_flop, trs80_quik.
|
||||
- name: trs80.zip
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: trs80
|
||||
source_ref: "src/mame/trs/trs80.cpp:567-584"
|
||||
note: "TRS-80 Model I Level I Basic (1977). Only fully working TRS-80 machine in MAME."
|
||||
contents:
|
||||
- name: level1.rom
|
||||
description: "Level I BASIC ROM (4KB)"
|
||||
size: 4096
|
||||
crc32: 70d06dff
|
||||
- name: mcm6670p.z29
|
||||
description: "MCM6670P character generator ROM"
|
||||
size: 1024
|
||||
crc32: 0033f2b9
|
||||
|
||||
- name: trs80l2.zip
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: trs80
|
||||
source_ref: "src/mame/trs/trs80.cpp:587-603"
|
||||
note: |
|
||||
TRS-80 Model I Level II Basic (1978). Separate parent machine from trs80 (Level I).
|
||||
2 BIOS variants: Radio Shack Level II and R/S L2 (alternate dumps).
|
||||
MACHINE_NOT_WORKING.
|
||||
contents:
|
||||
- name: rom-a.z1
|
||||
description: "Level II ROM A (default)"
|
||||
size: 4096
|
||||
crc32: 37c59db2
|
||||
- name: rom-b.z2
|
||||
description: "Level II ROM B (default)"
|
||||
size: 4096
|
||||
crc32: "05818718"
|
||||
- name: rom-c.z3
|
||||
description: "Level II ROM C (default)"
|
||||
size: 4096
|
||||
crc32: 306e5d66
|
||||
- name: rom-a_alt.z1
|
||||
description: "Level II ROM A (alternate dump)"
|
||||
size: 4096
|
||||
crc32: be46faf5
|
||||
- name: rom-b_alt.z2
|
||||
description: "Level II ROM B (alternate dump)"
|
||||
size: 4096
|
||||
crc32: 6c791c2d
|
||||
- name: rom-c_alt.z3
|
||||
description: "Level II ROM C (alternate dump)"
|
||||
size: 4096
|
||||
crc32: 55b3ad13
|
||||
- name: mcm6670p.z29
|
||||
description: "MCM6670P character generator ROM"
|
||||
size: 1024
|
||||
crc32: 0033f2b9
|
||||
|
||||
- name: eg3003.zip
|
||||
required: false
|
||||
category: bios_zip
|
||||
system: trs80
|
||||
source_ref: "src/mame/trs/trs80.cpp:608-617"
|
||||
note: |
|
||||
EACA Video Genie EG3003 (1980). TRS-80 Level II compatible clone.
|
||||
Parent for sys80/sys80p/ht1080z/ht1080z2/ht108064 clones.
|
||||
MACHINE_NOT_WORKING.
|
||||
contents:
|
||||
- name: 3001.z10
|
||||
description: "ROM A (BASIC part 1)"
|
||||
size: 4096
|
||||
crc32: 8f5214de
|
||||
- name: 3002.z11
|
||||
description: "ROM B (BASIC part 2)"
|
||||
size: 4096
|
||||
crc32: 46e88fbf
|
||||
- name: 3003.z12
|
||||
description: "ROM C (BASIC part 3)"
|
||||
size: 4096
|
||||
crc32: 306e5d66
|
||||
- name: tcs-ext.z13
|
||||
description: "TCS extension ROM"
|
||||
size: 2048
|
||||
crc32: 8f2ac112
|
||||
- name: tcs-ext.z25
|
||||
description: "TCS character generator ROM"
|
||||
size: 2048
|
||||
crc32: 150c5f1f
|
||||
|
||||
- name: sys80.zip
|
||||
required: false
|
||||
category: bios_zip
|
||||
system: trs80
|
||||
source_ref: "src/mame/trs/trs80.cpp:620-632"
|
||||
note: "EACA System-80 (1980). Clone of eg3003 with different extension ROM. sys80p (50 Hz) shares ROMs."
|
||||
contents:
|
||||
- name: sys80.z13
|
||||
description: "System-80 extension ROM"
|
||||
size: 2048
|
||||
crc32: 2a851e33
|
||||
- name: 2513.z25
|
||||
description: "Character generator ROM"
|
||||
size: 1024
|
||||
crc32: 0033f2b9
|
||||
|
||||
- name: ht1080z.zip
|
||||
required: false
|
||||
category: bios_zip
|
||||
system: trs80
|
||||
source_ref: "src/mame/trs/trs80.cpp:637-646"
|
||||
note: "Hiradastechnika HT-1080Z Series I (1983). Hungarian clone of eg3003."
|
||||
contents:
|
||||
- name: ht1080z.z25
|
||||
description: "HT-1080Z character generator ROM"
|
||||
size: 2048
|
||||
crc32: e8c59d4f
|
||||
|
||||
- name: ht1080z2.zip
|
||||
required: false
|
||||
category: bios_zip
|
||||
system: trs80
|
||||
source_ref: "src/mame/trs/trs80.cpp:649-658"
|
||||
note: "Hiradastechnika HT-1080Z Series II (1984). Clone of eg3003."
|
||||
contents:
|
||||
- name: ht1080z2.z13
|
||||
description: "HT-1080Z II extension ROM"
|
||||
size: 2048
|
||||
crc32: "07415ac6"
|
||||
- name: ht1080z2.z25
|
||||
description: "HT-1080Z II character generator ROM"
|
||||
size: 2048
|
||||
crc32: 6728f0ab
|
||||
|
||||
- name: ht108064.zip
|
||||
required: false
|
||||
category: bios_zip
|
||||
system: trs80
|
||||
source_ref: "src/mame/trs/trs80.cpp:661-670"
|
||||
note: "Hiradastechnika HT-1080Z/64 (1985). 64-column clone of eg3003."
|
||||
contents:
|
||||
- name: 3001_64.z10
|
||||
description: "ROM A (64-col BASIC part 1)"
|
||||
size: 4096
|
||||
crc32: 59ec132e
|
||||
- name: 3002_64.z11
|
||||
description: "ROM B (64-col BASIC part 2)"
|
||||
size: 4096
|
||||
crc32: a7a73e8c
|
||||
- name: ht108064.z13
|
||||
description: "HT-1080Z/64 extension ROM"
|
||||
size: 2048
|
||||
crc32: fc12bd28
|
||||
- name: ht108064.z25
|
||||
description: "HT-1080Z/64 character generator ROM"
|
||||
size: 2048
|
||||
crc32: e76b73a4
|
||||
|
||||
- name: trs80m3.zip
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: trs80
|
||||
source_ref: "src/mame/trs/trs80m3.cpp:483-519"
|
||||
note: |
|
||||
TRS-80 Model III (1980). Parent for trs80m4/trs80m4p/cp500 clones.
|
||||
4 BIOS variants: Level 2 ROM C Rev C (default), Rev B, Network III v2 (student),
|
||||
Level 1. MACHINE_NOT_WORKING.
|
||||
contents:
|
||||
- name: 8041364.u104
|
||||
description: "Level 2 ROM A"
|
||||
size: 8192
|
||||
crc32: ec0c6daa
|
||||
- name: 8040332.u105
|
||||
description: "Level 2 ROM B"
|
||||
size: 4096
|
||||
crc32: ed4ee921
|
||||
- name: 8040316c.u106
|
||||
description: "Level 2 ROM C Rev C (default)"
|
||||
size: 2048
|
||||
crc32: c8f79433
|
||||
- name: 8040316b.u106
|
||||
description: "Level 2 ROM C Rev B"
|
||||
size: 2048
|
||||
crc32: 84a5702d
|
||||
- name: 276a.u106
|
||||
description: "Network III v2 ROM C"
|
||||
size: 2048
|
||||
crc32: 7d38720a
|
||||
- name: 8040032.u104
|
||||
description: "Level 1 BIOS"
|
||||
size: 4096
|
||||
crc32: 6418d641
|
||||
- name: 8044316a.u36
|
||||
description: "Character generator ROM (rev A)"
|
||||
size: 2048
|
||||
crc32: 444c8b60
|
||||
|
||||
- name: trs80m4.zip
|
||||
required: false
|
||||
category: bios_zip
|
||||
system: trs80
|
||||
source_ref: "src/mame/trs/trs80m3.cpp:522-528"
|
||||
note: |
|
||||
TRS-80 Model 4 (1980). Clone of trs80m3. BAD_DUMP combined ROM
|
||||
(should be split into 3 like trs80m3). MACHINE_NOT_WORKING.
|
||||
contents:
|
||||
- name: trs80m4.rom
|
||||
description: "Combined system ROM (BAD_DUMP)"
|
||||
size: 14336
|
||||
crc32: 1a92d54d
|
||||
- name: 8044316a.u36
|
||||
description: "Character generator ROM"
|
||||
size: 2048
|
||||
crc32: 444c8b60
|
||||
|
||||
- name: trs80m4p.zip
|
||||
required: false
|
||||
category: bios_zip
|
||||
system: trs80
|
||||
source_ref: "src/mame/trs/trs80m3.cpp:530-539"
|
||||
note: |
|
||||
TRS-80 Model 4P (1983). Clone of trs80m3. Completely different memory map;
|
||||
Model III ROMs loaded from boot disk, only a bootloader ROM on board.
|
||||
2 BIOS variants: gate array (default) and disk loader hack.
|
||||
MACHINE_NOT_WORKING.
|
||||
contents:
|
||||
- name: 8075332.u69
|
||||
description: "Bootloader ROM"
|
||||
size: 4096
|
||||
crc32: 3a738aa9
|
||||
- name: trs80m4p_loader_hack.rom
|
||||
description: "Disk loader hack ROM"
|
||||
size: 504
|
||||
crc32: 7ff336f4
|
||||
- name: 8049007.u103
|
||||
description: "Character generator ROM"
|
||||
size: 2048
|
||||
crc32: 1ac44bea
|
||||
|
||||
- name: cp500.zip
|
||||
required: false
|
||||
category: bios_zip
|
||||
system: trs80
|
||||
source_ref: "src/mame/trs/trs80m3.cpp:541-550"
|
||||
note: "Prologica CP-500 (1982). Brazilian TRS-80 Model III clone. MACHINE_NOT_WORKING."
|
||||
contents:
|
||||
- name: s_8407_cn62516n_cp500a_prologica_83.ci111
|
||||
description: "Combined system + boot ROM"
|
||||
size: 16384
|
||||
crc32: c2fc1b92
|
||||
- name: 100.105.ci36
|
||||
description: "Character generator ROM"
|
||||
size: 2048
|
||||
crc32: 1765931e
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ systems:
|
||||
- coleco-adam
|
||||
- crvision
|
||||
- entex-advision
|
||||
- bandai-rx78
|
||||
- mattel-aquarius
|
||||
- camplynx
|
||||
- cgenie
|
||||
@@ -38,6 +39,7 @@ systems:
|
||||
- mz80k
|
||||
- pegasus
|
||||
- supracan
|
||||
- trs80
|
||||
|
||||
notes: |
|
||||
SUBTARGET=mess build from libretro/mame. Same source, same CORE_NAME ("mame"),
|
||||
@@ -60,9 +62,9 @@ notes: |
|
||||
Astrocade, Casio Loopy, Casio PV-2000, Coleco Adam, VTech CreatiVision, Entex
|
||||
Adventure Vision, EACA Colour Genie, Acorn Atom, Tiger game.com,
|
||||
Bit Corporation Gamate, Epoch Game Pocket Computer, Hartung Game
|
||||
Master, Funtech Super A'Can, Technosys Aamber Pegasus and VTech
|
||||
Laser 310 system ROMs required for software loading (not IS_BIOS_ROOT
|
||||
but functionally BIOS).
|
||||
Master, Funtech Super A'Can, Technosys Aamber Pegasus, VTech
|
||||
Laser 310 and TRS-80 family system ROMs required for software loading
|
||||
(not IS_BIOS_ROOT but functionally BIOS).
|
||||
|
||||
Apple II: 4 machine ROM sets (apple2, apple2p, apple2e, apple2ee) plus
|
||||
5 peripheral device ROM sets (disk controllers, CompactFlash, speech).
|
||||
@@ -698,6 +700,19 @@ files:
|
||||
size: 512
|
||||
crc32: 81e95975
|
||||
|
||||
# Bandai RX-78
|
||||
- name: rx78.zip
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: bandai-rx78
|
||||
source_ref: "src/mame/bandai/rx78.cpp:559"
|
||||
note: "MACHINE_NOT_WORKING."
|
||||
contents:
|
||||
- name: ipl.rom
|
||||
description: "IPL boot ROM"
|
||||
size: 8192
|
||||
crc32: a194ea53
|
||||
|
||||
# VTech CreatiVision
|
||||
- name: crvision.zip
|
||||
required: true
|
||||
@@ -1593,3 +1608,260 @@ files:
|
||||
description: "Lockout chip ROM key"
|
||||
size: 16
|
||||
crc32: 0ba78597
|
||||
|
||||
# Tandy TRS-80 family
|
||||
# Model I (trs80.cpp): trs80 (Level I, parent, WORKING), trs80l2 (Level II, parent),
|
||||
# eg3003 (EACA Video Genie, parent), sys80/sys80p (clones), ht1080z/ht1080z2/ht108064 (clones).
|
||||
# Model III/4/4P (trs80m3.cpp): trs80m3 (parent), trs80m4/trs80m4p/cp500 (clones).
|
||||
# Z80-based home computers (1977-1983). Only trs80 (Level I) is MACHINE_SUPPORTS_SAVE;
|
||||
# all others MACHINE_NOT_WORKING. Software lists: trs80_cass, trs80_flop, trs80_quik.
|
||||
- name: trs80.zip
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: trs80
|
||||
source_ref: "src/mame/trs/trs80.cpp:567-584"
|
||||
note: "TRS-80 Model I Level I Basic (1977). Only fully working TRS-80 machine in MAME."
|
||||
contents:
|
||||
- name: level1.rom
|
||||
description: "Level I BASIC ROM (4KB)"
|
||||
size: 4096
|
||||
crc32: 70d06dff
|
||||
- name: mcm6670p.z29
|
||||
description: "MCM6670P character generator ROM"
|
||||
size: 1024
|
||||
crc32: 0033f2b9
|
||||
|
||||
- name: trs80l2.zip
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: trs80
|
||||
source_ref: "src/mame/trs/trs80.cpp:587-603"
|
||||
note: |
|
||||
TRS-80 Model I Level II Basic (1978). Separate parent machine from trs80 (Level I).
|
||||
2 BIOS variants: Radio Shack Level II and R/S L2 (alternate dumps).
|
||||
MACHINE_NOT_WORKING.
|
||||
contents:
|
||||
- name: rom-a.z1
|
||||
description: "Level II ROM A (default)"
|
||||
size: 4096
|
||||
crc32: 37c59db2
|
||||
- name: rom-b.z2
|
||||
description: "Level II ROM B (default)"
|
||||
size: 4096
|
||||
crc32: "05818718"
|
||||
- name: rom-c.z3
|
||||
description: "Level II ROM C (default)"
|
||||
size: 4096
|
||||
crc32: 306e5d66
|
||||
- name: rom-a_alt.z1
|
||||
description: "Level II ROM A (alternate dump)"
|
||||
size: 4096
|
||||
crc32: be46faf5
|
||||
- name: rom-b_alt.z2
|
||||
description: "Level II ROM B (alternate dump)"
|
||||
size: 4096
|
||||
crc32: 6c791c2d
|
||||
- name: rom-c_alt.z3
|
||||
description: "Level II ROM C (alternate dump)"
|
||||
size: 4096
|
||||
crc32: 55b3ad13
|
||||
- name: mcm6670p.z29
|
||||
description: "MCM6670P character generator ROM"
|
||||
size: 1024
|
||||
crc32: 0033f2b9
|
||||
|
||||
- name: eg3003.zip
|
||||
required: false
|
||||
category: bios_zip
|
||||
system: trs80
|
||||
source_ref: "src/mame/trs/trs80.cpp:608-617"
|
||||
note: |
|
||||
EACA Video Genie EG3003 (1980). TRS-80 Level II compatible clone.
|
||||
Parent for sys80/sys80p/ht1080z/ht1080z2/ht108064 clones.
|
||||
MACHINE_NOT_WORKING.
|
||||
contents:
|
||||
- name: 3001.z10
|
||||
description: "ROM A (BASIC part 1)"
|
||||
size: 4096
|
||||
crc32: 8f5214de
|
||||
- name: 3002.z11
|
||||
description: "ROM B (BASIC part 2)"
|
||||
size: 4096
|
||||
crc32: 46e88fbf
|
||||
- name: 3003.z12
|
||||
description: "ROM C (BASIC part 3)"
|
||||
size: 4096
|
||||
crc32: 306e5d66
|
||||
- name: tcs-ext.z13
|
||||
description: "TCS extension ROM"
|
||||
size: 2048
|
||||
crc32: 8f2ac112
|
||||
- name: tcs-ext.z25
|
||||
description: "TCS character generator ROM"
|
||||
size: 2048
|
||||
crc32: 150c5f1f
|
||||
|
||||
- name: sys80.zip
|
||||
required: false
|
||||
category: bios_zip
|
||||
system: trs80
|
||||
source_ref: "src/mame/trs/trs80.cpp:620-632"
|
||||
note: "EACA System-80 (1980). Clone of eg3003 with different extension ROM. sys80p (50 Hz) shares ROMs."
|
||||
contents:
|
||||
- name: sys80.z13
|
||||
description: "System-80 extension ROM"
|
||||
size: 2048
|
||||
crc32: 2a851e33
|
||||
- name: 2513.z25
|
||||
description: "Character generator ROM"
|
||||
size: 1024
|
||||
crc32: 0033f2b9
|
||||
|
||||
- name: ht1080z.zip
|
||||
required: false
|
||||
category: bios_zip
|
||||
system: trs80
|
||||
source_ref: "src/mame/trs/trs80.cpp:637-646"
|
||||
note: "Hiradastechnika HT-1080Z Series I (1983). Hungarian clone of eg3003."
|
||||
contents:
|
||||
- name: ht1080z.z25
|
||||
description: "HT-1080Z character generator ROM"
|
||||
size: 2048
|
||||
crc32: e8c59d4f
|
||||
|
||||
- name: ht1080z2.zip
|
||||
required: false
|
||||
category: bios_zip
|
||||
system: trs80
|
||||
source_ref: "src/mame/trs/trs80.cpp:649-658"
|
||||
note: "Hiradastechnika HT-1080Z Series II (1984). Clone of eg3003."
|
||||
contents:
|
||||
- name: ht1080z2.z13
|
||||
description: "HT-1080Z II extension ROM"
|
||||
size: 2048
|
||||
crc32: "07415ac6"
|
||||
- name: ht1080z2.z25
|
||||
description: "HT-1080Z II character generator ROM"
|
||||
size: 2048
|
||||
crc32: 6728f0ab
|
||||
|
||||
- name: ht108064.zip
|
||||
required: false
|
||||
category: bios_zip
|
||||
system: trs80
|
||||
source_ref: "src/mame/trs/trs80.cpp:661-670"
|
||||
note: "Hiradastechnika HT-1080Z/64 (1985). 64-column clone of eg3003."
|
||||
contents:
|
||||
- name: 3001_64.z10
|
||||
description: "ROM A (64-col BASIC part 1)"
|
||||
size: 4096
|
||||
crc32: 59ec132e
|
||||
- name: 3002_64.z11
|
||||
description: "ROM B (64-col BASIC part 2)"
|
||||
size: 4096
|
||||
crc32: a7a73e8c
|
||||
- name: ht108064.z13
|
||||
description: "HT-1080Z/64 extension ROM"
|
||||
size: 2048
|
||||
crc32: fc12bd28
|
||||
- name: ht108064.z25
|
||||
description: "HT-1080Z/64 character generator ROM"
|
||||
size: 2048
|
||||
crc32: e76b73a4
|
||||
|
||||
- name: trs80m3.zip
|
||||
required: true
|
||||
category: bios_zip
|
||||
system: trs80
|
||||
source_ref: "src/mame/trs/trs80m3.cpp:483-519"
|
||||
note: |
|
||||
TRS-80 Model III (1980). Parent for trs80m4/trs80m4p/cp500 clones.
|
||||
4 BIOS variants: Level 2 ROM C Rev C (default), Rev B, Network III v2 (student),
|
||||
Level 1. MACHINE_NOT_WORKING.
|
||||
contents:
|
||||
- name: 8041364.u104
|
||||
description: "Level 2 ROM A"
|
||||
size: 8192
|
||||
crc32: ec0c6daa
|
||||
- name: 8040332.u105
|
||||
description: "Level 2 ROM B"
|
||||
size: 4096
|
||||
crc32: ed4ee921
|
||||
- name: 8040316c.u106
|
||||
description: "Level 2 ROM C Rev C (default)"
|
||||
size: 2048
|
||||
crc32: c8f79433
|
||||
- name: 8040316b.u106
|
||||
description: "Level 2 ROM C Rev B"
|
||||
size: 2048
|
||||
crc32: 84a5702d
|
||||
- name: 276a.u106
|
||||
description: "Network III v2 ROM C"
|
||||
size: 2048
|
||||
crc32: 7d38720a
|
||||
- name: 8040032.u104
|
||||
description: "Level 1 BIOS"
|
||||
size: 4096
|
||||
crc32: 6418d641
|
||||
- name: 8044316a.u36
|
||||
description: "Character generator ROM (rev A)"
|
||||
size: 2048
|
||||
crc32: 444c8b60
|
||||
|
||||
- name: trs80m4.zip
|
||||
required: false
|
||||
category: bios_zip
|
||||
system: trs80
|
||||
source_ref: "src/mame/trs/trs80m3.cpp:522-528"
|
||||
note: |
|
||||
TRS-80 Model 4 (1980). Clone of trs80m3. BAD_DUMP combined ROM
|
||||
(should be split into 3 like trs80m3). MACHINE_NOT_WORKING.
|
||||
contents:
|
||||
- name: trs80m4.rom
|
||||
description: "Combined system ROM (BAD_DUMP)"
|
||||
size: 14336
|
||||
crc32: 1a92d54d
|
||||
- name: 8044316a.u36
|
||||
description: "Character generator ROM"
|
||||
size: 2048
|
||||
crc32: 444c8b60
|
||||
|
||||
- name: trs80m4p.zip
|
||||
required: false
|
||||
category: bios_zip
|
||||
system: trs80
|
||||
source_ref: "src/mame/trs/trs80m3.cpp:530-539"
|
||||
note: |
|
||||
TRS-80 Model 4P (1983). Clone of trs80m3. Completely different memory map;
|
||||
Model III ROMs loaded from boot disk, only a bootloader ROM on board.
|
||||
2 BIOS variants: gate array (default) and disk loader hack.
|
||||
MACHINE_NOT_WORKING.
|
||||
contents:
|
||||
- name: 8075332.u69
|
||||
description: "Bootloader ROM"
|
||||
size: 4096
|
||||
crc32: 3a738aa9
|
||||
- name: trs80m4p_loader_hack.rom
|
||||
description: "Disk loader hack ROM"
|
||||
size: 504
|
||||
crc32: 7ff336f4
|
||||
- name: 8049007.u103
|
||||
description: "Character generator ROM"
|
||||
size: 2048
|
||||
crc32: 1ac44bea
|
||||
|
||||
- name: cp500.zip
|
||||
required: false
|
||||
category: bios_zip
|
||||
system: trs80
|
||||
source_ref: "src/mame/trs/trs80m3.cpp:541-550"
|
||||
note: "Prologica CP-500 (1982). Brazilian TRS-80 Model III clone. MACHINE_NOT_WORKING."
|
||||
contents:
|
||||
- name: s_8407_cn62516n_cp500a_prologica_83.ci111
|
||||
description: "Combined system + boot ROM"
|
||||
size: 16384
|
||||
crc32: c2fc1b92
|
||||
- name: 100.105.ci36
|
||||
description: "Character generator ROM"
|
||||
size: 2048
|
||||
crc32: 1765931e
|
||||
|
||||
@@ -194,7 +194,7 @@ nav:
|
||||
- vitaQuakeII: emulators/vitaquake2.md
|
||||
- yabasanshiro: emulators/yabasanshiro.md
|
||||
- Yuzu: emulators/yuzu.md
|
||||
- Community forks (108):
|
||||
- Community forks (109):
|
||||
- EightyOne: emulators/81.md
|
||||
- a5200: emulators/a5200.md
|
||||
- Anarch: emulators/anarch.md
|
||||
@@ -236,6 +236,7 @@ nav:
|
||||
- Gambatte: emulators/gambatte.md
|
||||
- Genesis Plus GX: emulators/genesis_plus_gx.md
|
||||
- gpSP: emulators/gpsp.md
|
||||
- GSplus: emulators/gsplus.md
|
||||
- Handy: emulators/handy.md
|
||||
- higan (SFC Accuracy): emulators/higan_sfc.md
|
||||
- LRPS2: emulators/lrps2.md
|
||||
@@ -427,7 +428,7 @@ nav:
|
||||
- PCSX-ReARMed: emulators/pcsx_rearmed.md
|
||||
- Launchers (1):
|
||||
- Dolphin Launcher: emulators/dolphin_launcher.md
|
||||
- Other (25):
|
||||
- Other (24):
|
||||
- ares: emulators/ares.md
|
||||
- Beetle GBA (Mednafen): emulators/beetle_gba.md
|
||||
- BigPEmu: emulators/bigpemu.md
|
||||
@@ -436,7 +437,6 @@ nav:
|
||||
- Demul: emulators/demul.md
|
||||
- eka2l1: emulators/eka2l1.md
|
||||
- ep128emu-core: emulators/ep128emu.md
|
||||
- GSplus: emulators/gsplus.md
|
||||
- Lexaloffle: emulators/lexaloffle.md
|
||||
- Model 2 Emulator: emulators/model2.md
|
||||
- openMSX: emulators/openmsx.md
|
||||
|
||||
@@ -27,9 +27,9 @@ from pathlib import Path
|
||||
sys.path.insert(0, os.path.dirname(__file__))
|
||||
from common import (
|
||||
MANUFACTURER_PREFIXES,
|
||||
build_zip_contents_index, check_inside_zip, compute_hashes,
|
||||
fetch_large_file, group_identical_platforms, list_emulator_profiles,
|
||||
list_platform_system_ids, list_registered_platforms,
|
||||
build_target_cores_cache, build_zip_contents_index, check_inside_zip,
|
||||
compute_hashes, fetch_large_file, group_identical_platforms,
|
||||
list_emulator_profiles, list_platform_system_ids, list_registered_platforms,
|
||||
filter_systems_by_target, list_system_ids, load_database,
|
||||
load_data_dir_registry, load_emulator_profiles, load_platform_config,
|
||||
md5_composite, require_yaml, resolve_local_file,
|
||||
@@ -950,7 +950,7 @@ def generate_pack(
|
||||
src = os.path.join(root, fname)
|
||||
rel = os.path.relpath(src, local_path)
|
||||
full = f"{dd_prefix}/{rel}"
|
||||
if full in seen_destinations or full.lower() in seen_lower and case_insensitive:
|
||||
if full in seen_destinations or (full.lower() in seen_lower and case_insensitive):
|
||||
continue
|
||||
if _has_path_conflict(full, seen_destinations, seen_parents):
|
||||
continue
|
||||
@@ -1913,25 +1913,13 @@ def main():
|
||||
|
||||
target_cores_cache: dict[str, set[str] | None] = {}
|
||||
if args.target:
|
||||
from common import load_target_config
|
||||
skip = []
|
||||
for p in platforms:
|
||||
try:
|
||||
target_cores_cache[p] = load_target_config(p, args.target, args.platforms_dir)
|
||||
except FileNotFoundError:
|
||||
if args.all:
|
||||
target_cores_cache[p] = None
|
||||
else:
|
||||
print(f"ERROR: No target config for platform '{p}'", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
except ValueError as e:
|
||||
if args.all:
|
||||
print(f"INFO: Skipping {p}: {e}")
|
||||
skip.append(p)
|
||||
else:
|
||||
print(f"ERROR: {e}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
platforms = [p for p in platforms if p not in skip]
|
||||
try:
|
||||
target_cores_cache, platforms = build_target_cores_cache(
|
||||
platforms, args.target, args.platforms_dir, is_all=args.all,
|
||||
)
|
||||
except (FileNotFoundError, ValueError) as e:
|
||||
print(f"ERROR: {e}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
groups = group_identical_platforms(platforms, args.platforms_dir,
|
||||
target_cores_cache if args.target else None)
|
||||
|
||||
@@ -47,6 +47,24 @@ class ChangeSet:
|
||||
return ", ".join(parts) if parts else "no changes"
|
||||
|
||||
|
||||
MAX_RESPONSE_SIZE = 50 * 1024 * 1024 # 50 MB
|
||||
|
||||
|
||||
def _read_limited(resp: object, max_bytes: int = MAX_RESPONSE_SIZE) -> bytes:
|
||||
"""Read an HTTP response with a size limit to prevent OOM."""
|
||||
chunks: list[bytes] = []
|
||||
total = 0
|
||||
while True:
|
||||
chunk = resp.read(65536) # type: ignore[union-attr]
|
||||
if not chunk:
|
||||
break
|
||||
total += len(chunk)
|
||||
if total > max_bytes:
|
||||
raise ValueError(f"Response exceeds {max_bytes} byte limit")
|
||||
chunks.append(chunk)
|
||||
return b"".join(chunks)
|
||||
|
||||
|
||||
class BaseScraper(ABC):
|
||||
"""Abstract base class for platform BIOS requirement scrapers."""
|
||||
|
||||
@@ -63,7 +81,7 @@ class BaseScraper(ABC):
|
||||
try:
|
||||
req = urllib.request.Request(self.url, headers={"User-Agent": "retrobios-scraper/1.0"})
|
||||
with urllib.request.urlopen(req, timeout=30) as resp:
|
||||
self._raw_data = resp.read().decode("utf-8")
|
||||
self._raw_data = _read_limited(resp).decode("utf-8")
|
||||
return self._raw_data
|
||||
except urllib.error.URLError as e:
|
||||
raise ConnectionError(f"Failed to fetch {self.url}: {e}") from e
|
||||
|
||||
@@ -6,18 +6,20 @@ from __future__ import annotations
|
||||
|
||||
import importlib
|
||||
import pkgutil
|
||||
from abc import ABC, abstractmethod
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
class BaseTargetScraper:
|
||||
class BaseTargetScraper(ABC):
|
||||
"""Base class for target scrapers."""
|
||||
|
||||
def __init__(self, url: str = ""):
|
||||
self.url = url
|
||||
|
||||
@abstractmethod
|
||||
def fetch_targets(self) -> dict:
|
||||
"""Fetch targets and their core lists. Returns dict matching target YAML format."""
|
||||
raise NotImplementedError
|
||||
...
|
||||
|
||||
def write_output(self, data: dict, output_path: str) -> None:
|
||||
"""Write target data to YAML file."""
|
||||
|
||||
@@ -152,7 +152,7 @@ def _condition_holds(condition: str, active: frozenset[str]) -> bool:
|
||||
try:
|
||||
result, _ = _check_condition(tokens, 0, active)
|
||||
return result
|
||||
except Exception:
|
||||
except (IndexError, ValueError, TypeError):
|
||||
return True # conservative: include on parse failure
|
||||
|
||||
|
||||
|
||||
@@ -30,11 +30,11 @@ from pathlib import Path
|
||||
|
||||
sys.path.insert(0, os.path.dirname(__file__))
|
||||
from common import (
|
||||
build_zip_contents_index, check_inside_zip, compute_hashes,
|
||||
filter_systems_by_target, group_identical_platforms, list_emulator_profiles,
|
||||
list_system_ids, load_data_dir_registry, load_emulator_profiles,
|
||||
load_platform_config, md5sum, md5_composite, require_yaml, resolve_local_file,
|
||||
resolve_platform_cores,
|
||||
build_target_cores_cache, build_zip_contents_index, check_inside_zip,
|
||||
compute_hashes, filter_systems_by_target, group_identical_platforms,
|
||||
list_emulator_profiles, list_system_ids, load_data_dir_registry,
|
||||
load_emulator_profiles, load_platform_config, md5sum, md5_composite,
|
||||
require_yaml, resolve_local_file, resolve_platform_cores,
|
||||
)
|
||||
|
||||
yaml = require_yaml()
|
||||
@@ -504,6 +504,7 @@ def verify_platform(
|
||||
emu_profiles: dict | None = None,
|
||||
target_cores: set[str] | None = None,
|
||||
data_dir_registry: dict | None = None,
|
||||
supplemental_names: set[str] | None = None,
|
||||
) -> dict:
|
||||
"""Verify all BIOS files for a platform, including cross-reference gaps."""
|
||||
mode = config.get("verification_mode", "existence")
|
||||
@@ -601,10 +602,11 @@ def verify_platform(
|
||||
status_counts[s] = status_counts.get(s, 0) + 1
|
||||
|
||||
# Cross-reference undeclared files
|
||||
from cross_reference import _build_supplemental_index
|
||||
data_names = _build_supplemental_index()
|
||||
if supplemental_names is None:
|
||||
from cross_reference import _build_supplemental_index
|
||||
supplemental_names = _build_supplemental_index()
|
||||
undeclared = find_undeclared_files(config, emulators_dir, db, emu_profiles,
|
||||
target_cores=target_cores, data_names=data_names)
|
||||
target_cores=target_cores, data_names=supplemental_names)
|
||||
exclusions = find_exclusion_notes(config, emulators_dir, emu_profiles, target_cores=target_cores)
|
||||
|
||||
# Ground truth coverage
|
||||
@@ -1260,29 +1262,20 @@ def main():
|
||||
|
||||
target_cores_cache: dict[str, set[str] | None] = {}
|
||||
if args.target:
|
||||
from common import load_target_config
|
||||
skip = []
|
||||
for p in platforms:
|
||||
try:
|
||||
target_cores_cache[p] = load_target_config(p, args.target, args.platforms_dir)
|
||||
except FileNotFoundError:
|
||||
if args.all:
|
||||
target_cores_cache[p] = None
|
||||
else:
|
||||
print(f"ERROR: No target config for platform '{p}'", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
except ValueError as e:
|
||||
if args.all:
|
||||
print(f"INFO: Skipping {p}: {e}")
|
||||
skip.append(p)
|
||||
else:
|
||||
print(f"ERROR: {e}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
platforms = [p for p in platforms if p not in skip]
|
||||
try:
|
||||
target_cores_cache, platforms = build_target_cores_cache(
|
||||
platforms, args.target, args.platforms_dir, is_all=args.all,
|
||||
)
|
||||
except (FileNotFoundError, ValueError) as e:
|
||||
print(f"ERROR: {e}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
# Group identical platforms (same function as generate_pack)
|
||||
groups = group_identical_platforms(platforms, args.platforms_dir,
|
||||
target_cores_cache if args.target else None)
|
||||
from cross_reference import _build_supplemental_index
|
||||
suppl_names = _build_supplemental_index()
|
||||
|
||||
all_results = {}
|
||||
group_results: list[tuple[dict, list[str]]] = []
|
||||
for group_platforms, representative in groups:
|
||||
@@ -1291,6 +1284,7 @@ def main():
|
||||
result = verify_platform(
|
||||
config, db, args.emulators_dir, emu_profiles,
|
||||
target_cores=tc, data_dir_registry=data_registry,
|
||||
supplemental_names=suppl_names,
|
||||
)
|
||||
names = [load_platform_config(p, args.platforms_dir).get("platform", p) for p in group_platforms]
|
||||
group_results.append((result, names))
|
||||
|
||||
@@ -1494,7 +1494,7 @@ class TestE2E(unittest.TestCase):
|
||||
|
||||
def test_112_build_ground_truth(self):
|
||||
"""build_ground_truth returns per-emulator detail for a filename."""
|
||||
from common import build_ground_truth
|
||||
from validation import build_ground_truth
|
||||
profiles = load_emulator_profiles(self.emulators_dir)
|
||||
index = _build_validation_index(profiles)
|
||||
gt = build_ground_truth("present_req.bin", index)
|
||||
@@ -1510,7 +1510,7 @@ class TestE2E(unittest.TestCase):
|
||||
|
||||
def test_113_build_ground_truth_empty(self):
|
||||
"""build_ground_truth returns [] for unknown filename."""
|
||||
from common import build_ground_truth
|
||||
from validation import build_ground_truth
|
||||
profiles = load_emulator_profiles(self.emulators_dir)
|
||||
index = _build_validation_index(profiles)
|
||||
gt = build_ground_truth("nonexistent.bin", index)
|
||||
@@ -3010,7 +3010,7 @@ class TestE2E(unittest.TestCase):
|
||||
|
||||
def test_104_diff_truth_normalized_system_ids(self):
|
||||
"""Diff matches systems with different ID formats via normalization."""
|
||||
from common import diff_platform_truth
|
||||
from truth import diff_platform_truth
|
||||
|
||||
truth = {
|
||||
"systems": {
|
||||
|
||||
Reference in New Issue
Block a user