feat: add emulator/system pack generation, validation checks, path resolution

add --emulator, --system, --standalone, --list-emulators, --list-systems
to verify.py and generate_pack.py. packs are RTU with data directories,
regional BIOS variants, and archive support.

validation: field per file (size, crc32, md5, sha1) with conflict
detection. by_path_suffix index in database.json for regional variant
resolution via dest_hint. restructure GameCube IPL to regional subdirs.

66 E2E tests, full pipeline verified.
This commit is contained in:
Abdessamad Derraz
2026-03-22 14:02:20 +01:00
parent d2adde9846
commit 1d350f0578
21 changed files with 17218 additions and 150 deletions

View File

@@ -14,6 +14,15 @@ systems: [nintendo-gamecube, nintendo-wii]
# Standalone: User/GC/ and User/Wii/
# Libretro (RetroArch): system/dolphin-emu/GC/ and system/dolphin-emu/Wii/
pack_structure:
libretro: "dolphin-emu"
standalone: ""
data_directories:
- ref: dolphin-sys
destination: "Sys"
source_ref: "Source/Core/Common/CommonPaths.h:128-141"
files:
# -- GameCube IPL (Boot ROM) --
# Region-specific, placed in GC/<region>/IPL.bin

View File

@@ -1,7 +1,9 @@
emulator: gpSP
type: libretro
core_classification: community_fork
source: "https://github.com/libretro/gpsp"
profiled_date: "2026-03-18"
upstream: "https://github.com/BASLQC/gPSP"
profiled_date: "2026-03-21"
core_version: "Git"
display_name: "Nintendo - Game Boy Advance (gpSP)"
cores:
@@ -35,6 +37,9 @@ notes: |
precise SWI behavior or BIOS checksum verification. The built-in BIOS
works for the vast majority of the GBA library.
Upstream (Exophase v0.9) required the official BIOS with no fallback.
The built-in open-source BIOS is a libretro port addition.
files:
# -------------------------------------------------------
# Game Boy Advance - BIOS (optional, built-in fallback)
@@ -44,6 +49,7 @@ files:
required: false
hle_fallback: true
size: 16384 # 16 KB (0x4000)
validation: [size]
note: "Official GBA BIOS. Built-in open-source BIOS used as fallback. Real BIOS needed for full SWI accuracy and boot logo."
source_ref: "libretro/libretro.c:1111"

View File

@@ -1,9 +1,12 @@
emulator: Handy
type: libretro
core_classification: community_fork
source: "https://github.com/libretro/libretro-handy"
profiled_date: "2026-03-18"
profiled_date: "2026-03-21"
core_version: "0.95"
display_name: "Atari - Lynx (Handy)"
cores:
- handy
systems: [atari-lynx]
notes: |
@@ -36,8 +39,7 @@ files:
required: false
hle_fallback: true
size: 512
md5: "fcd403db69f54290b51035d82f835e7b"
sha1: "e4ed47fae31693e016b081c6bda48da5b70d7ccb"
crc32: "0d973c9d"
validation: [size, crc32]
source_ref: "rom.h:48-49 (ROM_SIZE=0x200, ROM_CRC32=0xD973C9D), rom.cpp:76-128 (CRom constructor), libretro.cpp:1231-1258 (bios path + CSystem init)"
notes: "Validated by CRC32 at load time. If invalid or missing, core uses HLE fallback (system.cpp HLE_BIOS_* functions). Games work without it but the real boot ROM provides accurate startup timing."

View File

@@ -1,10 +1,13 @@
emulator: Ishiiruka
type: libretro
core_classification: enhanced_fork
source: "https://github.com/libretro/ishiiruka"
profiled_date: "2026-03-18"
upstream: "https://github.com/Tinob/Ishiiruka"
profiled_date: "2026-03-21"
core_version: "Git"
display_name: "Nintendo - GameCube / Wii (Ishiiruka)"
fork_of: Dolphin
cores:
- ishiiruka
systems: [nintendo-gamecube, nintendo-wii]
# Ishiiruka is a performance-focused Dolphin fork with custom GPU backends.
@@ -19,6 +22,11 @@ systems: [nintendo-gamecube, nintendo-wii]
# Core options use "ishiiruka_" prefix (ishiiruka_dsp_hle, ishiiruka_efb_scale, etc.)
data_directories:
- ref: dolphin-sys
destination: "dolphin-emu/Sys"
source_ref: "Source/Core/Common/CommonPaths.h:115"
files:
# -- GameCube IPL (Boot ROM) --
# Region-specific, placed in GC/<region>/IPL.bin

View File

@@ -1,7 +1,9 @@
emulator: JollyCV
type: libretro
core_classification: official_port
source: "https://github.com/libretro/jollycv"
profiled_date: "2026-03-18"
upstream: "https://gitlab.com/jgemu/jollycv"
profiled_date: "2026-03-21"
core_version: "2.0.0"
display_name: "ColecoVision/CreatiVision/My Vision (JollyCV)"
cores:
@@ -47,11 +49,9 @@ files:
# --- ColecoVision BIOS (required for CV games) ---
- name: "coleco.rom"
system: colecovision
description: "ColecoVision BIOS ROM"
required: true
size: 8192
md5: "2c66f5911e5b42b8ebe113403548eee7"
sha1: "4aa1d9b48f39b68bb17b3d6997b74850c6089dc3"
validation: [size]
source_ref: "libretro/libretro.c:701, src/jcv_coleco.c:402-406"
notes: "Mapped at 0x0000-0x1FFF. Replaced by SGM lower RAM when Super Game Module is active. Must be exactly 8192 bytes."
@@ -61,6 +61,7 @@ files:
description: "VTech CreatiVision BIOS ROM"
required: true
size: 2048
validation: [size]
source_ref: "libretro/libretro.c:711, src/jcv_crvision.c:315-318"
notes: "Mapped at 0xF800-0xFFFF. Must be exactly 2048 bytes."

View File

@@ -40,6 +40,7 @@ files:
md5: "562d5ebf9e030a40d6fabfc2f33139fd"
sha1: "b2e1955d957a475de2411770452eff4ea19f4cee"
crc32: "8016a315"
validation: [size, crc32]
note: "Magnavox Odyssey2 BIOS (G7000 NTSC). Default BIOS, vpp=0."
source_ref: "libretro.c:182-186"
@@ -54,6 +55,7 @@ files:
md5: "f1071cdb0b6b10dde94d3bc8a6146387"
sha1: "a6120aed50831c9c0d95dbdf707820f601d9452e"
crc32: "a318e8d6"
validation: [size, crc32]
note: "Philips Videopac G7000 European BIOS. vpp=0, auto-sets PAL region."
source_ref: "libretro.c:192-197"
@@ -68,6 +70,7 @@ files:
md5: "c500ff71236068e0dc0d0603d265ae76"
sha1: "5130243429b40b01a14e1304d0394b8459a6fbae"
crc32: "e20a9f41"
validation: [size, crc32]
note: "Philips Videopac+ G7400 European BIOS. vpp=1, enables enhanced graphics."
source_ref: "libretro.c:187-191"
@@ -82,6 +85,7 @@ files:
md5: "279008e4a0db2dc5f1c048853b033828"
sha1: "54b8d2c1317628de51a85fc1c424423a986775e4"
crc32: "11647ca5"
validation: [size, crc32]
note: "Philips Videopac+ G7400 French BIOS (JoPac). vpp=1, enables enhanced graphics."
source_ref: "libretro.c:198-203"