diff --git a/emulators/bsnes_cplusplus98.yml b/emulators/bsnes_cplusplus98.yml index c62ab2fd..02b427ca 100644 --- a/emulators/bsnes_cplusplus98.yml +++ b/emulators/bsnes_cplusplus98.yml @@ -29,7 +29,7 @@ notes: | Core continues without DSP firmware but coprocessor games won't function. exclusion_note: > - firmware_count=0 in .info is correct. DSP firmware (NEC uPD7725/uPD96050, + The .info declares firmware_count=0. DSP firmware (NEC uPD7725/uPD96050, Hitachi CX4) is loaded from the ROM directory via game XML markup, not from system_dir. RetroArch cannot pre-populate firmware in the ROM directory. Upstream byuu.org is defunct, and this libretro port is the preserved v085 code. diff --git a/emulators/fbalpha2012_neogeo.yml b/emulators/fbalpha2012_neogeo.yml index 1a8ab1ef..e760d3c0 100644 --- a/emulators/fbalpha2012_neogeo.yml +++ b/emulators/fbalpha2012_neogeo.yml @@ -52,8 +52,8 @@ notes: | neogeo.zip is a parent ROM set, loaded from g_rom_dir alongside game ZIPs. g_system_dir is set (src/burner/libretro/libretro.cpp:3016) but never used for file loading. - The .info note "BIOS files must be inside the ROM directory" is accurate here: - neogeo.zip must be in the same directory as game ROM ZIPs. + neogeo.zip is read from the same directory as the game ROM ZIPs, as the .info + note "BIOS files must be inside the ROM directory" states. files: [] diff --git a/emulators/openlara.yml b/emulators/openlara.yml index 7946ae9f..85d1b26e 100644 --- a/emulators/openlara.yml +++ b/emulators/openlara.yml @@ -26,6 +26,6 @@ notes: > subdirectories as .ogg/.mp3/.wav files or cdaudio.wad (src/gameflow.h:1272-1356). System directory used only for shader cache at {system_dir}/openlara/cache/ (src/platform/libretro/main.cpp:177-197). No BIOS, firmware, or engine data files required in - system directory. .info omits sat from supported_extensions (code declares it). + system directory. The code declares the sat extension, which the .info supported_extensions does not list. files: [] diff --git a/emulators/prosystem.yml b/emulators/prosystem.yml index 5f4ee4c6..20095165 100644 --- a/emulators/prosystem.yml +++ b/emulators/prosystem.yml @@ -29,7 +29,8 @@ notes: | directory, it is loaded automatically. No hash or size validation is performed on the BIOS file. - The .info declares firmware_count=1 (U only), missing the PAL BIOS. + The .info declares one firmware, the U BIOS. The code also opens the E BIOS + for PAL cartridges (core/libretro.c:581-582). files: - name: "7800 BIOS (U).rom" diff --git a/emulators/retrodream.yml b/emulators/retrodream.yml index 3ac394cf..3154bfe2 100644 --- a/emulators/retrodream.yml +++ b/emulators/retrodream.yml @@ -20,8 +20,8 @@ notes: | The fork sets appdir to the RetroArch system directory root (retro_host.c:216-217), unlike the upstream which appends /dc - (upstream retro_host.c:196-198). The .info still declares dc/ prefix paths - matching the upstream, not this fork. + (upstream retro_host.c:196-198). The .info declares dc/ prefix paths, the + layout the upstream reads. boot.bin is validated against four known MD5 hashes (boot.c:25-30). Validation failure logs a warning but the core continues via HLE. diff --git a/emulators/rvvm.yml b/emulators/rvvm.yml index 43fa07c6..465326f3 100644 --- a/emulators/rvvm.yml +++ b/emulators/rvvm.yml @@ -76,5 +76,5 @@ notes: OpenSBI: https://github.com/riscv-software-src/opensbi/releases. Pre-built images for RVVM: https://github.com/LekKit/RVVM/wiki/Running info_firmware_count: > - .info declares 0 firmware. Correct: the core loads firmware via + .info declares 0 firmware. The core loads firmware via user-specified paths in the .rvvm config, not from system_dir. diff --git a/emulators/skyemu.yml b/emulators/skyemu.yml index 4b4bd378..a6e0e972 100644 --- a/emulators/skyemu.yml +++ b/emulators/skyemu.yml @@ -23,7 +23,7 @@ notes: | stub firmware (NDS), and HLE boot skip (GB/GBC). BIOS loading controlled by core options (default: on). Files loaded from system_dir/SkyEmu/ subdirectory. Standalone validates exact BIOS file size, while libretro only rejects files exceeding buffer. - .info missing gb_bios.bin (gb.h:1603). + The .info does not list gb_bios.bin, which the code reads (gb.h:1603). files: - name: cgb_boot.bin diff --git a/emulators/squirreljme.yml b/emulators/squirreljme.yml index 6afddb4f..3cb49e82 100644 --- a/emulators/squirreljme.yml +++ b/emulators/squirreljme.yml @@ -17,7 +17,7 @@ notes: | All entries are optional: without a class library, the core runs a built-in modeless stars demo but cannot execute J2ME software. The .info declares firmware_count=8 but the code defines 10 search names - (squirreljme-{version}-test.jar and squirreljme-test.jar are missing from .info). + (the two not in the .info are squirreljme-{version}-test.jar and squirreljme-test.jar). files: - name: "squirreljme-0.3.0-fast.jar" diff --git a/emulators/uw8.yml b/emulators/uw8.yml index e7ad6e8c..fec80a14 100644 --- a/emulators/uw8.yml +++ b/emulators/uw8.yml @@ -14,4 +14,4 @@ notes: > WebAssembly-based fantasy console. 320x240 screen, 32-color palette, 256KB memory. The WASM runtime (platform + loader modules) is compiled to C via wasm2c and embedded in the binary. No external files required. - firmware_count=0 in .info is correct. + The .info declares firmware_count=0. diff --git a/emulators/vice_x64dtv.yml b/emulators/vice_x64dtv.yml index 9c8453d9..6df7689e 100644 --- a/emulators/vice_x64dtv.yml +++ b/emulators/vice_x64dtv.yml @@ -17,7 +17,7 @@ notes: > DTV has its own color system (viciidtv-color.c), and external palette loading is disabled. JiffyDOS is not supported (excluded from build conditionals). The .info declares 4 JiffyDOS firmware (firmware_count=4) but the code - never loads them for this core. The .info also omits dtvrom.bin. + never loads them for this core. The .info does not list dtvrom.bin. files: - name: "dtvrom.bin" diff --git a/tests/test_prose_style.py b/tests/test_prose_style.py index 6893f5fb..1451ba62 100644 --- a/tests/test_prose_style.py +++ b/tests/test_prose_style.py @@ -225,6 +225,18 @@ class ProfilesStateFactsAboutOtherProjects(unittest.TestCase): re.IGNORECASE, ) + # A line that names another project's file grades it when it calls the + # file correct or accurate, says it still declares something, or that an + # entry is missing from it or omitted. prosystem, retrodream, + # fbalpha2012_neogeo and seven more profiles wrote it that way. + OTHER_FILE = re.compile(r"(\.info\b|core-info|System\.dat)", re.IGNORECASE) + GRADES = re.compile( + r"\b(?:is (?:correct|accurate|inaccurate|outdated|stale)|accurate here|" + r"correct:|still (?:declares|lists)|omits|missing (?:the|from))|" + r"\.info missing", + re.IGNORECASE, + ) + def test_profile_prose_and_comments(self): offenders = [ f"{path.relative_to(ROOT)}: {line.strip()[:100]}" @@ -234,6 +246,15 @@ class ProfilesStateFactsAboutOtherProjects(unittest.TestCase): ] self.assertEqual(offenders, [], "\n".join(offenders[:40])) + def test_no_grade_on_another_projects_file(self): + offenders = [ + f"{path.relative_to(ROOT)}: {line.strip()[:100]}" + for path in sorted((ROOT / "emulators").glob("*.yml")) + for line in path.read_text(encoding="utf-8").splitlines() + if self.OTHER_FILE.search(line) and self.GRADES.search(line) + ] + self.assertEqual(offenders, [], "\n".join(offenders[:40])) + class NoClauseSemicolons(unittest.TestCase): def _check(self, files: list[Path], extract) -> None: diff --git a/wiki/testing-guide.md b/wiki/testing-guide.md index da47320f..8376d164 100644 --- a/wiki/testing-guide.md +++ b/wiki/testing-guide.md @@ -266,8 +266,10 @@ to the way the project writes: number with its criterion says more. - Headings in sentence case, never repeating the site name. - In emulator profiles, no verdict on another project's file: "phantom", - "misleading", "bogus", "typo", "has errors", "incorrectly says". The note - states what that file declares and what the code reads. + "misleading", "bogus", "typo", "has errors", "incorrectly says", and on a + line naming a .info, core-info or System.dat no "is correct", "is + accurate", "still declares", "omits" or "missing". The note states what + that file declares and what the code reads. Formatting stays: bold labels, lists, tables and admonitions make a page easier to use. When markup shows raw on the site, the rendering is fixed and