docs: describe other projects by facts only

Profile notes and wiki pages called .info entries phantom or incorrect, and labelled an upstream list a known defect. They now state what each file declares and what the code reads. The wiki claimed Batocera prefix-matches truncated md5s; its script compares the full string (batocera-systems:1088), which the page now says. The gaps column reads "Not read by profiles" and notes that a profile may be incomplete.
This commit is contained in:
Abdessamad Derraz committed 2026-10-20 13:33:53 +02:00
1 parent e9e56f545d
commit 7a3cbc657d
9 files changed
+20 -19

No files matched your search

+3 -3
View File
@@ -26,9 +26,9 @@ notes: |
database (ananke/database/). All DSP1 games use DSP1B filenames via database (ananke/database/). All DSP1 games use DSP1B filenames via
heuristic fallback. The database dsp1.program.rom / dsp1.data.rom names heuristic fallback. The database dsp1.program.rom / dsp1.data.rom names
are only in the standalone build (target-ethos via ananke). are only in the standalone build (target-ethos via ananke).
.info accuracy/balanced: firmware_count=18 (overcounts by 2, includes .info accuracy/balanced: firmware_count=18, which counts the two dsp1.*
phantom dsp1.* from unused database). Performance .info: firmware_count=17 names of the database this build does not use. Performance .info:
(also missing cx4.data.rom). firmware_count=17, without cx4.data.rom.
Upstream v094 source is contained within the libretro repo (sfc/, ananke/). Upstream v094 source is contained within the libretro repo (sfc/, ananke/).
bsnes-emu/bsnes is the modern rewrite (v115+). bsnes-emu/bsnes is the modern rewrite (v115+).
+1 -1
View File
@@ -29,7 +29,7 @@ notes: |
Y-ZOOM ROM (ng-lo.rom / 000-lo.lo) listed in .info but generated Y-ZOOM ROM (ng-lo.rom / 000-lo.lo) listed in .info but generated
algorithmically, never loaded from file (src/memory.cpp:223-253 algorithmically, never loaded from file (src/memory.cpp:223-253
generateYZoomData, CRC32 E09E253C). These are phantom .info entries. generateYZoomData, CRC32 E09E253C), so the core never opens these files.
.info firmware_count=12 but 2 are phantoms (Y-ZOOM), effective count=10. .info firmware_count=12 but 2 are phantoms (Y-ZOOM), effective count=10.
.info lists uni-bioscd.rom as "Universe BIOS 3.2" but SHA1 matches .info lists uni-bioscd.rom as "Universe BIOS 3.2" but SHA1 matches
+1 -1
View File
@@ -40,7 +40,7 @@ systems:
# #
# font.rom divergence: libretro.c:566-571 loads 0x1000 bytes then # font.rom divergence: libretro.c:566-571 loads 0x1000 bytes then
# overwrites the buffer with kanji ROM + built-in graph. The font.rom # overwrites the buffer with kanji ROM + built-in graph. The font.rom
# data is not actually used (bug). Upstream memory.c:427 loads FONT_SZ # data ends up unused. Upstream memory.c:427 loads FONT_SZ
# (2048) and keeps the font data in the first half. # (2048) and keeps the font data in the first half.
# #
# OPNA rhythm samples (2608_BD.WAV etc.): loaded by upstream via # OPNA rhythm samples (2608_BD.WAV etc.): loaded by upstream via
+1 -1
View File
@@ -19,7 +19,7 @@ notes: >
"Boot to BIOS menu" core option allows booting without a disc. "Boot to BIOS menu" core option allows booting without a disc.
Database contains 24 entries (22 good, 2 known-bad rejected) Database contains 24 entries (22 good, 2 known-bad rejected)
covering BIOS versions 1.0 through 4.5. covering BIOS versions 1.0 through 4.5.
.info declares firmware_count=0, which is incorrect. .info declares firmware_count=0, while the core reads the BIOS images this profile lists.
Project abandoned, superseded by rustation-ng. Project abandoned, superseded by rustation-ng.
files: files:
+2 -2
View File
@@ -9,8 +9,8 @@ cores:
systems: [] systems: []
notes: | notes: |
Phantom .info: declared in libretro-core-info since 2017 but no source code, Declared in libretro-core-info since 2017. No source code, build recipe or
build recipe, or compiled binary exists anywhere in the libretro organization. compiled binary for it could be found in the libretro organization.
Not on the buildbot. The .info has empty authors, license, and extensions. Not on the buildbot. The .info has empty authors, license, and extensions.
No system files required. No system files required.
+1 -1
View File
@@ -14,7 +14,7 @@ notes: >
Separate codebase from the newer vice-libretro port. Marked experimental and Separate codebase from the newer vice-libretro port. Marked experimental and
superseded. Unlike the newer port, this core does NOT embed system ROMs: all ROMs superseded. Unlike the newer port, this core does NOT embed system ROMs: all ROMs
must be on disk in <system_dir>/data/C64/ and <system_dir>/data/DRIVES/. must be on disk in <system_dir>/data/C64/ and <system_dir>/data/DRIVES/.
The .info declares firmware_count=0 which is incorrect. No JiffyDOS support. The .info declares firmware_count=0, while the core reads the ROMs this profile lists. No JiffyDOS support.
No save states, no netplay, no cheats. No save states, no netplay, no cheats.
files: files:
+2 -2
View File
@@ -3789,12 +3789,12 @@ def generate_gap_analysis(
"platform contract, and these numbers show where that contract diverges " "platform contract, and these numbers show where that contract diverges "
"from what the code loads.", "from what the code loads.",
"", "",
"| Platform | Missing from list | Phantom | Hash conflict | Required status |", "| Platform | Missing from list | Not read by profiles | Hash conflict | Required status |",
"|----------|------------------:|--------:|--------------:|----------------:|", "|----------|------------------:|--------:|--------------:|----------------:|",
*div_rows, *div_rows,
"", "",
"- **Missing from list**: a profiled emulator loads the file, the platform list does not mention it", "- **Missing from list**: a profiled emulator loads the file, the platform list does not mention it",
"- **Phantom**: on the platform list, loaded by no profiled emulator", "- **Not read by profiles**: on the platform list, loaded by no emulator profiled so far (a profile may still be incomplete)",
"- **Hash conflict**: the platform list and the emulator source expect different hashes", "- **Hash conflict**: the platform list and the emulator source expect different hashes",
"- **Required status**: required/optional differs between list and code", "- **Required status**: required/optional differs between list and code",
"", "",
+1 -1
View File
@@ -209,7 +209,7 @@ System ID consistency matters for cross-platform operations. The same console mu
- Batocera uses 29-character truncated MD5 hashes in some entries. The resolution - Batocera uses 29-character truncated MD5 hashes in some entries. The resolution
layer handles prefix matching, but the scraper should store the hash as-is. layer handles prefix matching, but the scraper should store the hash as-is.
Scraped data reflects what the upstream declares, which may not match reality. The scraper's job is faithful transcription of upstream data, not correction. Corrections happen in the emulator profiles (source-verified) and in `_shared.yml` (curated). If a scraper detects an obviously wrong hash or filename, log a warning but still include the upstream value. The divergence will surface during truth diffing. Scraped data reflects what the upstream declares, which may not match reality. The scraper's job is faithful transcription of upstream data, not correction. Corrections happen in the emulator profiles (source-verified) and in `_shared.yml` (curated). If a scraper meets a hash or filename that differs from the emulator source, log a warning and still include the upstream value. The divergence will surface during truth diffing.
## Creating a target scraper ## Creating a target scraper
+8 -7
View File
@@ -47,12 +47,13 @@ hashed with MD5, and compared case-insensitively against the expected value.
If the `resolve_local_file` step already confirmed the MD5 match (status `md5_exact`), If the `resolve_local_file` step already confirmed the MD5 match (status `md5_exact`),
`verify.py` skips re-hashing and returns OK directly. `verify.py` skips re-hashing and returns OK directly.
### Truncated MD5 (Batocera bug) ### Truncated MD5 (Batocera)
Some entries in Batocera's system data contain 29-character MD5 strings instead of Some entries in Batocera's system data carry 29-character MD5 strings instead of
the standard 32. This is a known upstream bug. `verify.py` handles it by prefix matching: the usual 32. Batocera's script compares the full string (`batocera-systems:1088`), so
if the expected hash is shorter than 32 characters, the actual hash is compared against those entries report the file as untested. `verify.py` compares the prefix instead, to
only its first N characters. find the file the entry designates: if the expected hash is shorter than 32 characters,
the actual hash is compared against only its first N characters.
### md5_composite (Recalbox ZIP verification) ### md5_composite (Recalbox ZIP verification)
@@ -255,8 +256,8 @@ What the pack does with a `hash_mismatch` follows the platform's own mode. An
MD5 or SHA1 platform would reject those bytes, so the file is left out and MD5 or SHA1 platform would reject those bytes, so the file is left out and
counted as an unsafe exclusion, distinct from a file the collection does not counted as an unsafe exclusion, distinct from a file the collection does not
have. An existence platform reads no bytes at all, so the file is packed and have. An existence platform reads no bytes at all, so the file is packed and
the divergence is printed as a discrepancy: an error in an upstream BIOS list the divergence is printed as a discrepancy: a value in an upstream BIOS list that
must not remove a file the frontend would have loaded. differs from the emulator source must not remove a file the frontend would load.
## Discrepancy detection ## Discrepancy detection