Commit Graph
5267 Commits
Author SHA1 Message Date
Abdessamad Derraz e0dab00304 fix: cite Voxatron 0.3.5b code for its files
Refs rested on string addresses. They now name the functions in vox
and vox_dyn that open each file. libHoloPlayCore.so is kept for the
Batocera generator that puts it on LD_LIBRARY_PATH, neither binary
loads it.
2026-11-10 13:38:45 +01:00
Abdessamad Derraz dd5d9a6671 fix: cite PICO-8 0.2.7 code for its data files
Data file refs rested on string addresses and the manual. They now
name the loader functions in the shipped pico8, pico8_64 and pico8.exe.
config.txt is read from the home folder first.
2026-11-10 13:38:45 +01:00
Abdessamad Derraz 81e98d69b0 docs: cite the ScummVM readers of its data files
Theme and engine data entries named only scummvm.rc or an engine_data makefile. They now cite bundle_datafiles.sh, which builds the libretro bundle from those lists, the themepath or extrapath the core sets, and the code that opens each file: the theme lookup, the icon, shader, translation and font archives, and each engine's loader.
2026-11-10 13:37:14 +01:00
Abdessamad Derraz 2b750c2ff2 chore: merge origin/main 2026-11-10 13:36:51 +01:00
Abdessamad Derraz 7f945574cd fix: give SUPER ZSNES DSP refs their addresses
The DSP refs named IL2CPP methods only. They now carry the addresses
the v0.320 Windows GameAssembly.dll gives DSP1..ctor and
DSP1Core.LoadROM, with the CRC32 constant and the 8 KB buffer sites.
2026-11-10 13:35:17 +01:00
Abdessamad Derraz 6cbfca1197 fix: read QEMU firmware from its loaders
Entries that cited only pc-bios/meson.build now cite the code that opens them.

bios-256k.bin is the firmware of the pc and q35 machines (pc_piix.c:466, pc_q35.c:349) and pc is the machine the core starts for an .iso, so it is required, and a missing image exits in x86_bios_rom_init. bios.bin is read only by the ISA PC or when the firmware option is cleared, so it is optional. qboot.rom is microvm's firmware with ACPI off. The pxe-*.rom images and efi-eepro100.rom are read through a romfile= option, the EDK2 code images through -bios.

The three EDK2 variable store templates and vof-nvram.bin are removed: no code resolves them through the data directory, a pflash drive is opened by path and the core runs from the content folder (ui/libretro.c:697).
2026-11-10 13:34:25 +01:00
Abdessamad Derraz fff8cb5d23 fix: cite CPCemu 3.0.2 ROM loader code
Refs cited cpcemu0.cfg lines, the help file and strace runs. Each now
names the loader, the config parser, the M4 board setup or the layout
dialog in cpcemu_portable.exe 3.0.2. The loader never checks length, so
size leaves validation, and NMIROM.BIN gains its own entry.
2026-11-10 13:34:09 +01:00
Abdessamad Derraz 4d376e9727 docs: write the release notes without pronouns
The release page is public text like the site. render() said "finds
your setup", "file for your system" and "your BIOS folder". The
pronoun test now renders the notes from release.json, once more with
a pack in parts, and fails on any pronoun the script writes.
2026-11-10 13:34:05 +01:00
Abdessamad Derraz 695b999fa3 fix: name the DREAMM code behind its ROM tables
File refs cited the manifest and set records by data address only.
Each now names the code that reads them in DREAMM 4.0 linux-x64: the
name, size and CRC32 match, the reverse lookup and the set picker.
Notes no longer rest on strace.
2026-11-10 13:33:19 +01:00
Abdessamad Derraz 69545f6247 chore: merge origin main into the integration 2026-11-10 13:30:51 +01:00
Abdessamad Derraz 0a9d898d90 fix: cite ACE-DL loaders from its binary
Refs were prose. Each now names the function and offsets in the
2026/10/16 Linux AceDL that builds the path, reads the file and fails.
The firmware names the SNA loader opens without the .rom suffix become
aliases, and the plugin ROMs take a minimum size.
2026-11-10 13:30:29 +01:00
Abdessamad Derraz 26c71d03dc docs: cite the fMSX ROM loader in the profile
ROM, font and CARTS.SHA entries cited the copy in fMSX/ROMs, a file and not a reader. They now cite the system directory taken as ProgDir, the chdir to it, the LoadROM, LoadCart or LoadFNT call that names each file, and the function that opens it.
2026-11-10 13:29:40 +01:00
Abdessamad Derraz 29eb53f083 docs: cite the hardware config reader in openMSX
System ROM entries named only a machine or extension XML. They now cite the rule that ships share (install.py for openMSX, libretro_share.py and installShare for the libretro core), HardwareConfig loading machines/ or extensions/, and Rom.cc resolving the rom by filename then by sha1 in the file pool.
2026-11-10 13:28:49 +01:00
Abdessamad Derraz d39bb4b65a docs: drop a pronoun from the handheld section
12daa6698 wrote "the file for your system" on the installer page, and
test_site_pronouns failed Validation on it. The line above already
names the file for the system: "Download that file".
2026-11-10 13:27:30 +01:00
Abdessamad Derraz c62515a782 docs: cite the machine reader in blueMSX
Machine ROM entries named only a config.ini, most with no line. Each now gives the config.ini line that names the ROM, then libretro.c building the Machines path and calling machineCreate, readMachine parsing the Slots section, and romLoad opening each slot file.
2026-11-10 13:26:07 +01:00
Abdessamad Derraz 69d593eb6d docs: cite the base set reader in OpenTTD
The original game files named only their .obg, .obs or .obm line. They now cite the CMake rules that configure and install the base set metadata, FindSets and AddFile that scan for it, FillSetDetails that reads its files and md5s groups, and the startup call per set type.
2026-11-10 13:25:00 +01:00
Abdessamad Derraz 34b619b6fe fix: cite ZiNc's BIOS loader code
Driver records were cited by data address only. Refs now name the
game loader in ZiNc.exe 1.1 and its fatal paths. The table holds 71
records, so glpracr, glpracr2, btchamp, mgcldate and sfchamp are not
reachable and leave the BIOS notes.
2026-11-10 13:24:47 +01:00
Abdessamad Derraz a943569445 docs: cite the gameflow reader in TR1X and TR2X
Level, FMV and sound entries named only their gameflow.json5 line. They now cite the release packaging that ships data/trx/ship, the startup load of the mod's gameflow, the reader of the path or sfx_path key, the path patterns it resolves against, and the open of the level file.
2026-11-10 13:24:01 +01:00
Abdessamad Derraz e19308b68d docs: cite the grpinfo reader in the Raze profile
The GRP entries named only their grpinfo.txt blocks. They now cite the add_pk3 rule that packs engine/grpinfo.txt into raze.pk3, ParseAllGrpInfos that reads it from ENGINERES_FILE, ParseGrpInfo, and the size and CRC match of GrpScan (the mustcontain pass for blocks without a CRC).
2026-11-10 13:21:48 +01:00
Abdessamad Derraz 9f674dd849 docs: cite the IWADINFO reader in Doom profiles
Each IWAD entry named only its iwadinfo.txt lines. It now also cites the add_pk3 rule that packs the file into game_support.pk3, the FIWadManager constructor that reads the IWADINFO lump, the Names parser and the directory scan. Load files cite the Load parser and the loader beside the IWAD, and square.pk3 the -iwad branch.
2026-11-10 13:20:42 +01:00
Abdessamad Derraz c69b31cfc0 chore: merge the launcher search paths 2026-11-10 13:12:22 +01:00
Abdessamad Derraz 8eaffcfead fix: place AdvanceMAME's sets in EmuELEC's dir_rom
AdvanceMAME reads its sets from dir_rom, a list of folders
(advance/osd/fileio.c:74, doc/advmame.d:680,699-701). EmuELEC's
advmame.rc sets dir_rom /storage/roms/mame (advmame.rc:11), and
advmame.sh rewrites /roms/mame to /roms/arcade when it is started for
the arcade system (advmame.sh:26-30). The extractor kept the keys under
the BIOS root alone: it now records those under the roms root too, and
a key the script rewrites gives one record for arcade and one for every
other system. A configgen record carries the systems it is written for.

The profile lays its 29 sets out at the top of dir_rom. On EmuELEC they
land in roms/mame. The 12 root archives AdvanceMAME alone claimed there
now hold the copies of the cores that also declare them (mame, geolith),
none of them lost.

A destination outside the BIOS tree is no proof of content: the moved
entry resolves by its layout path alone. roms/mame/konamigv.zip took
bios/Arcade/MAME/konamigv.zip, MAME 0.289's set, by that tail.
2026-11-10 13:07:12 +01:00
Abdessamad Derraz 4a5c693b66 fix: place GZDoom's IWADs in RetroDECK's roms/doom
GZDoom collects its IWAD candidates from [IWADSearch.Directories], reads
the support WAD there and the Load files from the IWAD's own folder
(src/d_iwad.cpp:456-476, 593-624, 862-901). RetroDECK lists
RETRODECKROMSDIR/doom there (gzdoom/rd_assets/rd_config/gzdoom.ini:9),
which component_prepare.sh:27 rewrites to $roms_path/doom. The extractor
read only the BIOS placeholder of a preset: it now records every line
naming the BIOS or the roms folder the script rewrites, with that sed
line in its source. $roms_path, whose default is the roms root
(config/retrodeck/retrodeck.json:5), is read as that root.

The profile names IWADSearch.Directories as a pool and lays its IWADs
and their support and Load files out at its top. On RetroDECK the 20
held IWADs land in roms/doom, the 23 others are named missing there.
The root copies stay for prboom and uzdoom, which claim them. No other
platform hands GZDoom that list, so none changes.
2026-11-10 13:06:35 +01:00
Abdessamad Derraz 6947df629a fix: read MAME's sets through its search paths
MAME splits rompath, samplepath, hashpath and pluginspath on semicolons
and tries each directory in turn (src/emu/fileio.cpp:53-58, 330-392,
src/emu/emuopts.cpp:44-46, 53). The launcher records spell those lists
with the game's own folder in them, which handed_directories skipped:

- RetroBat passes -rp bios;<rom directory> (Mame64.Generator.cs:93-96)
  and -rompath bios/psxmame/bios;<rom directory> to pSxMAME
  (PSXMame.Generator.cs:38-48).
- KNULLI passes -rompath <romDirname>;/userdata/bios/mame;/userdata/bios
  (mameGenerator.py:116-122).
- RetroPie writes rompath $romdir/mame;$romdir/arcade;$biosdir/mame
  (mame.sh:133).

A semicolon list now gives each directory but the game's folder. A pool
that already lists the folder the files take keeps them there, and a
pool standing for the whole layout holds its files, never its folders.
The MAME profile names its sets at the top of the rompath and its
search settings as pools, pSxMAME its sets and rompath.

RetroBat's -sp and -hash records split on `bool hbmame = emulator ==
"hbmame"` (Mame64.Generator.cs:30): bios/mame/samples for mame64,
bios/hbmame/samples for hbmame.

Manifests: RetroBat gains the 12 pSxMAME sets in psxmame/bios and drops
samples/bbc.zip, read by nobody, which mame/samples/bbc.zip already
serves. KNULLI drops the same copy. RetroPie gains the 1427 MAME sets
in BIOS/mame, the root copies staying for the libretro cores. EmuDeck
names samples/bbc.zip as read outside the BIOS folder. RetroDECK's
samplepath is $bios_path/mame-sa/samples (mame/component_prepare.sh:94,
117): bbc.zip moves there from bios/samples/. Its MAME runs with the
-rompath ES-DE passes, %GAMEDIR%;%ROMPATH%/<system>, so the standalone
sets are named as read outside the BIOS folder and the root copies stay
for the libretro core. The 1427 sets
of RetroBat, KNULLI and EmuDeck stay at the BIOS root, listed in their
rompath. No file of any manifest is lost.
2026-11-10 13:05:59 +01:00
Abdessamad Derraz 8b02ac7db5 feat: map xemu flash images by 64 KiB granule
xbox_flash_init maps any image whose size is a positive multiple of
65536 bytes (hw/xbox/xbox.c:75-81), not three listed sizes.
2026-11-10 12:52:46 +01:00
Abdessamad Derraz ac3fb2c2d2 feat: name amiberry flash images by masked sha1
getromdatabydata clears bytes 0x10-0x2f and hashes the first 0x1c000
bytes, and 0x50000 too for a 512 KB file. The table SHA-1 of each
CyberStorm and Blizzard PPC image is now declared with that transform.
2026-11-10 12:52:46 +01:00
Abdessamad Derraz 45db717db9 feat: check PS2 BIOS images by their romdir
Each PCSX2 fork declares how its LoadBiosVersion reads the table:
the strncmp length on RESET, the NUL test on names, EXTINFO, and what a
read past the end does, from the source at the pin or the shipped
libemucore.so for NetherSX2 and its Turnip builds. The Recalbox libretro
PCSX2 and PCEE2 check no size, so their 4 to 8 MB bounds are gone, and
the PCEE2 and ARMSX2 arcade images require the COH-H zone.
2026-11-10 12:52:46 +01:00
Abdessamad Derraz ec9fe03673 feat: run content checks profiles declare
validation: [romdir] walks a PS2 ROM directory the way the profile's
fork reads it, masked_sha1 hashes a file with a byte range cleared, and
size_multiple bounds a size to a granule. The resolver name steps, the
pack and manifest scans, the emulator expansion and verify call the same
content_fits. A PCSX2 companion is taken only beside an image that
passes, and a companion placeholder no longer seeds a scan of its own.
2026-11-10 12:52:28 +01:00
Abdessamad Derraz 5e13f11e3f docs: say what GZDoom's FileSearch serves
RetroDECK writes bios/gzdoom into [FileSearch.Directories]
(gzdoom/rd_assets/rd_config/gzdoom.ini:19). BaseFileSearch reads that
list after the program directory for the engine pk3s, and for -file,
-deh, -bex and zvox.wad (src/common/utility/findfile.cpp:224-296).
IWADs come from IWADSearch.Directories and their Load files from the
IWAD's folder (src/d_iwad.cpp:456-476, 613-624, 877-901), so no entry
of the profile is read from bios/gzdoom and nothing is bound.
2026-11-10 12:21:10 +01:00
Abdessamad Derraz 2fc3df50c6 fix: place Dolphin's User folder a platform sets
Dolphin reads its User folder at $XDG_DATA_HOME/dolphin-emu, else
~/.local/share/dolphin-emu (Source/Core/UICommon/UICommon.cpp:449-477).
The profile names both, so a launcher handing that folder places the
layout:

- EmuELEC starts Dolphin with XDG_DATA_HOME=/storage/roms/dolphin
  (dolphinSA/scripts/dolphin.sh:28): its 30 files move from the BIOS
  root to dolphin/dolphin-emu/ of the install tree.
- RetroDECK links User/Triforce to bios/Triforce
  (dolphin/component_prepare.sh:30, 49), where its list already puts
  segaboot.gcm. The rest of the User folder sits in the Flatpak's data
  directory and is named as read outside the BIOS folder.

An entry only the standalone build reads, path and no standalone_path,
now takes that path as its layout path (Load/Firmware/rtl_bt/), and
the pass copying a name the platform declares elsewhere reaches an
unprefixed path: gba_bios.bin lands in dolphin/dolphin-emu/GBA/.
2026-11-10 12:21:05 +01:00
Abdessamad Derraz 74ef0a37d5 fix: place Cemu's MLC where RetroDECK sets it
RetroDECK sets mlc_path to $bios_path/cemu (cemu/component_prepare.sh:14,
29), which replaces the MLC Cemu reads under its user data directory
(src/config/CemuConfig.cpp:25-26, ActiveSettings.cpp:295-320). The
profile names that key, so the layout's mlc01/ folder is placed in
bios/cemu. Two readers kept the binding from reaching the manifest:

- a moved entry kept its standalone load_from, data_dir, and the gap
  report set the MLC aside as read outside the system directory. The
  platform's folder now replaces the build's own root.
- an entry read outside the BIOS tree was no longer offered to the
  launcher layer, so RetroDECK's link of keys.txt to bios/cemu/keys.txt
  went unserved. It is offered again, fills no destination by its own
  path, and a launcher place it fills settles it.

The RetroDECK manifest gains the 55 MLC files under bios/cemu/. It
drops the root copies of keys.txt, otp.bin, seeprom.bin,
shareddata.bin, cafeLibs/ and resources/sharedFonts/, which standalone
Cemu reads in the Flatpak's $XDG_DATA_HOME/Cemu and names them as read
outside the BIOS folder. The libretro copies under bios/Cemu/ stay.
2026-11-10 12:20:55 +01:00
Abdessamad Derraz 0e0e24d905 feat: name the data-storage key of EKA2L1
EKA2L1 keeps its devices under the data-storage folder, data by
default and relative to the working directory
(src/emu/config/include/config/options.inl:45). RetroBat writes
data-storage = bios/eka2l1/data (Eka2l1.Generator.cs:153, 156), so the
layout's data/ folder is placed there.

The SYM.ROM extra at data/roms/nem-4/ of the BIOS root, read by
nobody, leaves the RetroBat manifest: RetroBat declares the file at
eka2l1/data/roms/NEM-4/SYM.ROM, the same slot on its case-folding
filesystem. The files shipped beside the executable are named as read
in the emulator folder.
2026-11-10 12:20:40 +01:00
Abdessamad Derraz 87f364bb7a chore: merge the install record 2026-11-10 12:17:49 +01:00
Abdessamad Derraz 5f3f4cff38 fix: check the install record before using it
A record's choice holds only the options of the choice and their
values, or the whole record is said once and ignored: it no longer reaches
the commands printed for the user. A recorded games folder is kept only
under the folder that holds the BIOS folder. A recorded option the list
can no longer apply is left out in one line, never refused. The record is
read only when it is a regular file of at most 16 MiB, its day is unknown
when no clock can show it, one a newer installer wrote is left as it is,
and a setup that cannot be used is dropped alone. The plan opened on the
one setup found keeps that screen's notes under Details.
2026-11-10 12:17:08 +01:00
Abdessamad Derraz 51e5fd0dbd chore: merge the launcher folder placement 2026-11-10 12:03:30 +01:00
Abdessamad Derraz fba9a0b511 chore: merge the launchers served by the site 2026-11-10 12:03:29 +01:00
Abdessamad Derraz a42f60ef50 chore: merge the PS2 BIOS placement work 2026-11-10 12:03:29 +01:00
Abdessamad Derraz 94ad951875 chore: record the pack probes of the release 2026-11-10 12:03:20 +01:00
Abdessamad Derraz 5255716273 fix: read EmuELEC's home in launcher paths
EmuELEC links /storage/.local/share/flycast to /storage/roms/bios/dc
(flycast.sh:11-14 at v4.8), and Flycast reads
$HOME/.local/share/flycast. Root's home there is /storage
(packages/sysutils/busybox/package.mk:168, profile.d/98-busybox.conf:4,
sourced by flycast.sh:7), which nothing recorded, so the link bound
nothing and flycastsa's files went to the BIOS root.

The registry's home_directory now spells that directory as ~ in the
handles and directories of launcher records. flycastsa's ten files
land in bios/dc, where the libretro build already reads them. The
manifest drops dc_boot.bin and dc_nvmem.bin from the BIOS root, which
no emulator reads there, and six arcade archives at the root go back
to the MAME sets the mame cores claim.
2026-11-10 12:02:36 +01:00
Abdessamad Derraz f3f125d945 feat: profile Recalbox's libretro PCSX2
Recalbox 10.1.1 builds the wxWidgets-era libretro PCSX2 for x86_64 at
408e3b2 with 0003-bios-path.patch, which moves the BIOS scan from
pcsx2/bios to ps2, and lists it as the libretro core pcsx2 of the ps2
system. Since lrps2-9485a53 took the ps2 name no profile described it.
pcsx2-libretro-408e3b2 is built_by recalbox under the name pcsx2, beside
standalone PCSX2 and LRPS2. It reads <bios>.rom1, rom2, erom, nvm and
mec beside the selected image. GameIndex.yaml and the patch archives are
compiled in.
2026-11-10 12:02:27 +01:00
Abdessamad Derraz 8fff4d6909 fix: pack companions beside a shared BIOS image
Two filename-agnostic cores reading one BIOS folder each scan the same
images. The second scan stopped at an image the first had placed, so a
companion only the second core opens never reached the pack: Recalbox's
libretro PCSX2 reads <bios>.erom beside the images LRPS2 placed in ps2/.
2026-11-10 12:02:27 +01:00
Abdessamad Derraz f4446ab313 docs: shorten the no-pack line of the notes 2026-11-10 11:51:42 +01:00
Abdessamad Derraz d5c2ba266f docs: lead the release notes with the command
The notes open on the command and the handheld app, then the full packs
for a device without internet, the setups the command alone serves, what
changed, everyone who helped since the start (read with gh, --thanks FILE
for a checked list) in a folded block, and the full changelog from the
previous release's record commit.
2026-11-10 11:50:39 +01:00
Abdessamad Derraz 962f18ac3f chore: keep the launchers off the release
check_release reports a launcher in the checksum list as unrecorded and
one attached as extra, as it does for install.py. The release steps no
longer run build_port, and the checksum and upload globs name the packs
(*_BIOS_Pack*.zip) so a launcher left in dist/ is never caught.
2026-11-10 11:50:39 +01:00
Abdessamad Derraz adac87ec32 feat: name the ROM folder option of QUASI88kai
-romdir replaces the ROM directory (src/getconf.cpp:282-290, 529),
and RetroPie writes -romdir $biosdir/pc88 into quasi88.ini
(scriptmodules/emulators/quasi88.sh:67). Its 19 ROMs move from rom/
to pc88/ in the RetroPie pack, manifest and verify.
2026-11-10 11:50:38 +01:00
Abdessamad Derraz d7bd89d42b feat: serve the handheld launchers from the site
build_port's four archives carry install.py pinned by SHA-256, so they
change with the installer, not with the packs. The site now builds them
from its own commit and serves them under get/handheld/. Each get/ page
of Batocera, KNULLI, ROCKNIX and AmberELEC names its file, size, hash,
folder and menu, and get/linux-handhelds/ does the same for muOS, ArkOS,
dArkOS and JELOS. The installer's handheld section opens on a download
table, both tables written from sitehandheld.LAUNCHERS.
2026-11-10 11:50:29 +01:00
Abdessamad Derraz 8f2018e7c2 feat: remember the install and open on the plan
An install writes retrobios-backup/<folder>.install.json beside the BIOS
folder: each file it placed with its sha1, size and source, and the choice
it made. The next run for the same setup and folder takes that choice when
the command line chose nothing, in line mode and on the full screen, and
says so. A record that cannot be read is said once and ignored. A record
event reports it.

With one setup found, the full screen opens on its plan, Change where one
row away. The plan's Install row says the size its headline says.
2026-11-10 11:46:57 +01:00
Abdessamad Derraz ddc947c85d fix: place files in a folder a launcher sets
KNULLI sets AetherSX2's [Folders] Bios to bios/ps2
(aethersx2Generator.py:219), yet its 112 PS2 BIOS files went to the
BIOS root. Three causes:

- a record's passes_to was split into words, so "[Folders] Bios"
  could not be told from "[Filenames] BIOS". ini_keys() adds the
  section-qualified key a profile names in standalone_directories.
- scans_dir records hand a folder too (ROCKNIX's bios/armsx2,
  EmuDeck's PCSX2 and ARMSX2) and were not read as handed.
- the agnostic scan looked its seeds up by the id of the profile's
  entries, while it walks the copies platform_layouts makes: any
  bound layout scanned nothing. Copies map back to the profile's
  entries by position.

An agnostic profile's entry the layout reads outside the BIOS tree
is now named by the gap report (outside_bios_folder) instead of
dropped: ARMSX2's arcade/proverb.zip on ROCKNIX and EmuDeck.
2026-11-10 11:46:57 +01:00
Abdessamad Derraz 62278e1d4e feat: name the BIOS folder key of two PS2 forks
AetherSX2 and ARMSX2 resolve their BIOS folder from PCSX2.ini
[Folders] Bios against the data root, bios by default
(aethersx2/pcsx2/Pcsx2Config.cpp:935-946,
pcsx2/Pcsx2Config.cpp:2617-2627 in ARMSX2). standalone_directories
now names that key, so a launcher that writes it places the layout's
bios/ folder: KNULLI sets bios/ps2, ROCKNIX bios/armsx2.
2026-11-10 11:46:03 +01:00
Abdessamad Derraz 3d53a6744c feat: list the DEV9 eeprom.dat of lrps2
DEV9init opens eeprom.dat from the working directory and maps 64 bytes over the compiled-in image (pcsx2/DEV9/DEV9.cpp:159-176). The profile did not list it.
2026-11-10 11:38:07 +01:00