diff --git a/emulators/ardens.yml b/emulators/ardens.yml index 3fb3eb951..4471e18b5 100644 --- a/emulators/ardens.yml +++ b/emulators/ardens.yml @@ -67,6 +67,6 @@ platform_details: size: 1536 note: | Empty flashcart header written to the first 1536 bytes of the - W25Q128 flash image during initialization. This is not a BIOS - file -- it is the default flash content the Arduboy FX expects - at the start of external storage. + W25Q128 flash image during initialization. It is the default flash + content the Arduboy FX expects at the start of external storage, + not a BIOS file. diff --git a/emulators/atari800.yml b/emulators/atari800.yml index cc18f11af..85a78c4c4 100644 --- a/emulators/atari800.yml +++ b/emulators/atari800.yml @@ -16,7 +16,7 @@ cores: [atari800] systems: [atari-400-800, atari-5200, xegs] # Atari800 emulates the Atari 8-bit family (400/800/XL/XE) and the 5200 console. -# All BIOS files are optional -- the core ships built-in Altirra OS replacements +# All BIOS files are optional. The core ships built-in Altirra OS replacements # (altirraos_800, altirraos_xl, altirra_5200_os, altirra_basic) compiled into the # binary. If real ROM files are found in the system directory they take priority. # @@ -121,9 +121,8 @@ files: note: > Atari 400/800 OS Rev B (NTSC). CRC32 0x0e86d61d matches sysrom.c SYSROM_B_NTSC. Preferred over Rev A for 400/800 mode. - Note: .info lists md5 a3e8d617c95d08031fe1b20d541434b2 which is a - different dump (crc32 3e28a1fe) -- both in repo, the CRC32-matched - version is the one sysrom.c auto-detects. + The .info lists md5 a3e8d617c95d08031fe1b20d541434b2, a different + dump (crc32 3e28a1fe). sysrom.c detects the CRC32-matched one. source_ref: "source atari800/src/sysrom.c:91, source atari800/src/sysrom.c:286" # -- Atari XL/XE OS -- @@ -165,7 +164,7 @@ files: # -- XEGS Missile Command built-in game -- # The XEGS had Missile Command in ROM (8 KB), CRC32: 0xbdca01fb - # No filename auto-match -- must be set via config or detected by CRC. + # No filename auto-match. It must be set via config or detected by CRC. - name: "XEGAME.ROM" path: "XEGAME.ROM" diff --git a/emulators/cruzes.yml b/emulators/cruzes.yml index eea7783c2..2c70bae54 100644 --- a/emulators/cruzes.yml +++ b/emulators/cruzes.yml @@ -17,7 +17,7 @@ systems: notes: | Unfinished Picross puzzle game, part of the libretro-samples repository. - No separate upstream -- written directly for the libretro API. + The libretro API is its only target, with no separate upstream. supports_no_game true (tests/cruzes/cruzes.c:772), valid_extensions "" (tests/cruzes/cruzes.c:749). Puzzle grid hardcoded in retro_init (tests/cruzes/cruzes.c:706-717) via load_challenge. diff --git a/emulators/emux_chip8.yml b/emulators/emux_chip8.yml index 34027feb2..1ef84b7fa 100644 --- a/emulators/emux_chip8.yml +++ b/emulators/emux_chip8.yml @@ -51,4 +51,3 @@ platform_details: note: | No external BIOS. The 80-byte character font is compiled into the binary as char_mem[] and memcpy'd into RAM[0x000] on every reset. - This is standard CHIP-8 behavior -- all interpreters embed the font. diff --git a/emulators/fake08.yml b/emulators/fake08.yml index a6a62586a..40f4c102c 100644 --- a/emulators/fake08.yml +++ b/emulators/fake08.yml @@ -30,8 +30,8 @@ notes: | binary as string constants (p8GlobalLuaFunctions.h, DefaultCart.h). When no ROM is passed (supports_no_game = true), the core queues its - built-in BIOS cart "__FAKE08-BIOS.p8" (platform/libretro/libretro.cpp:751). This is not - an external file -- it is generated internally by the VM. + built-in BIOS cart "__FAKE08-BIOS.p8" (platform/libretro/libretro.cpp:751). The VM + generates it internally, so no external file is read. The core accepts .p8 (text) and .png (cartridge-as-image) formats (platform/libretro/libretro.cpp:258). Content is loaded either via the libretro data buffer diff --git a/emulators/freechaf.yml b/emulators/freechaf.yml index a45926c2b..527674410 100644 --- a/emulators/freechaf.yml +++ b/emulators/freechaf.yml @@ -35,7 +35,7 @@ notes: | hle_state.psu1_hle and hle_state.psu2_hle (src/channelf_hle.c). The .info file declares all three firmware files as required (opt=false), - but the core does not abort on missing BIOS -- it falls back to HLE. + but the core does not abort on a missing BIOS. It falls back to HLE. files: - name: "sl31253.bin" diff --git a/emulators/galaksija.yml b/emulators/galaksija.yml index 746d1f918..12fe25ba0 100644 --- a/emulators/galaksija.yml +++ b/emulators/galaksija.yml @@ -20,7 +20,7 @@ systems: # Z80-based at 3.072 MHz, PAL 50fps, character-mode display (32x16 chars, 256x208 px). # # The core embeds all three firmware files compressed in rom.c (LoadCHRGENBIN, -# LoadROM1BIN, LoadROM2BIN). External files are optional overrides -- if ANY of +# LoadROM1BIN, LoadROM2BIN). External files are optional overrides. If ANY of # CHRGEN.BIN or ROM1.BIN is missing from /galaksija/, the core sets # firmware_ignore=true and loads all ROMs from the embedded copies instead. # @@ -73,7 +73,7 @@ files: note: > Math extension ROM. Mapped at 0x1000-0x1FFF. Adds floating-point math functions (SIN, COS, TG, SQR, LN, EXP, POW, etc). Optional even when - loading from disk -- missing ROM2 only triggers a warning. Embedded in + loading from disk, where a missing ROM2 only triggers a warning. Embedded in rom.c as fallback. source_ref: "source src/rom.h:11, source src/libretro.c:107-110, source src/external/galaksija-emulator/src/init.c:83-92" diff --git a/emulators/mesen.yml b/emulators/mesen.yml index 54eb463e8..2114a0332 100644 --- a/emulators/mesen.yml +++ b/emulators/mesen.yml @@ -42,7 +42,7 @@ notes: | File path construction: retro_load_game() sets FolderUtilities::SetHomeFolder(systemFolder). All BIOS lookups use - CombinePath(GetHomeFolder(), filename) -- flat, no subdirectories. + CombinePath(GetHomeFolder(), filename), flat, with no subdirectories. No functional divergence between upstream and libretro for BIOS loading. diff --git a/emulators/mgba.yml b/emulators/mgba.yml index 30663a7fd..2f8be12e7 100644 --- a/emulators/mgba.yml +++ b/emulators/mgba.yml @@ -30,7 +30,7 @@ notes: | All BIOS files are optional. mGBA ships a built-in HLE BIOS for GBA (src/gba/hle-bios.c) that covers most software. The real BIOS improves accuracy (startup logo, some edge-case SWI behavior). There is no HLE - BIOS for GB/GBC/SGB -- those rely on GBSkipBIOS() if no file is found. + BIOS for GB/GBC/SGB, which rely on GBSkipBIOS() if no file is found. BIOS loading is controlled by two core options: mgba_use_bios (default ON) - whether to look for BIOS files at all diff --git a/emulators/pokemini.yml b/emulators/pokemini.yml index 76efaa28c..12900eb5e 100644 --- a/emulators/pokemini.yml +++ b/emulators/pokemini.yml @@ -21,8 +21,8 @@ notes: | The core has an embedded FreeBIOS (open-source replacement) compiled directly into the binary from freebios/freebios.c. This means the - real BIOS is never strictly required -- games will run with FreeBIOS - alone, though compatibility may differ from the original firmware. + real BIOS is never strictly required. Games run with FreeBIOS alone, + though compatibility may differ from the original firmware. BIOS loading sequence in the libretro port: diff --git a/emulators/px68k.yml b/emulators/px68k.yml index 479d774b6..5d73c2efe 100644 --- a/emulators/px68k.yml +++ b/emulators/px68k.yml @@ -23,7 +23,7 @@ systems: # 1. Base path set to /keropi/ via file_setcd(winx68k_dir) at line 969 # 2. IPL ROM: iterates BIOSFILE[] = {iplrom.dat, iplrom30.dat, iplromco.dat, iplromxv.dat} # and opens the first file found. Reads 0x20000 bytes (128 KB) into IPL buffer. -# Returns 0 (failure) if none found -- core will not start. +# Returns 0 (failure) if none found, and the core does not start. # 3. SCSI check (WinX68k_SCSICheck): if IPL contains SCSI vectors at offset 0x30600-0x30c00, # patches a fake SCSI BIOS stub at $fc0000 with "Human68k" signature. # 4. Byte-swaps IPL in 16-bit pairs (big-endian ROM on little-endian host). @@ -32,7 +32,7 @@ systems: # # SRAM (x68k/sram.c:50-73): # sram.dat is 16 KB of battery-backed SRAM, loaded on init and saved on cleanup. -# Not a BIOS -- runtime state. Created automatically if missing. +# Not a BIOS but runtime state. Created automatically if missing. # # Directory layout expected: # /keropi/iplrom.dat (or iplrom30.dat, iplromco.dat, iplromxv.dat) @@ -41,7 +41,7 @@ systems: # /keropi/config (auto-created, core settings) files: - # IPL ROM -- the main system BIOS. The core tries four filenames in order and + # IPL ROM, the main system BIOS. The core tries four filenames in order and # uses the first one found. Only one is needed. iplrom.dat is the original X68000, # iplrom30.dat is X68030, iplromco.dat is X68000 Compact, iplromxv.dat is X68000 XVI. @@ -87,7 +87,7 @@ files: Only used if the three other IPL variants are not found. source_ref: "source libretro.c:985" - # Font ROM -- character generator ROM for text rendering. + # Font ROM, the character generator ROM for text rendering. - name: "cgrom.dat" installed_on: [recalbox] diff --git a/emulators/retrodream.yml b/emulators/retrodream.yml index 0d0c76fba..a99dd0bdf 100644 --- a/emulators/retrodream.yml +++ b/emulators/retrodream.yml @@ -18,7 +18,7 @@ systems: notes: | Fork of the last GPLv3 release of redream (inolen) before it went closed-source. - The core has HLE bootstrap -- when boot.bin is missing, bios_invalid_instr() + The core has an HLE bootstrap. When boot.bin is missing, bios_invalid_instr() traps at PC=0x0 and calls bios_boot(), which loads IP.BIN and 1ST_READ.BIN directly from disc, sets up syscall vectors, and starts execution at 0xac008300. diff --git a/tests/test_prose_style.py b/tests/test_prose_style.py index d089e9f45..1d6e1c584 100644 --- a/tests/test_prose_style.py +++ b/tests/test_prose_style.py @@ -155,6 +155,17 @@ class NoGeneratedTypography(unittest.TestCase): offenders.append(f"{path.relative_to(ROOT)}:{number}: {line.strip()[:100]}") self.assertEqual(offenders, [], "\n".join(offenders[:40])) + def test_no_double_hyphen_dash_in_profiles(self): + """GLYPHS sees U+2014, not its ASCII spelling: "No separate upstream -- + written directly for the libretro API" reached the cruzes page as is.""" + dash = re.compile(r"[A-Za-z0-9)] -- [A-Za-z0-9(]") + offenders = [] + for path in sorted((ROOT / "emulators").glob("*.yml")): + for number, line in enumerate(path.read_text(encoding="utf-8").splitlines(), 1): + if dash.search(BACKTICKS.sub("", line)): + offenders.append(f"{path.relative_to(ROOT)}:{number}: {line.strip()[:100]}") + self.assertEqual(offenders, [], "\n".join(offenders)) + class NoMarketingVocabulary(unittest.TestCase): """The project bans these words in published text, and nothing checked