Commit Graph
5135 Commits
Author SHA1 Message Date
Abdessamad Derraz f950482567 feat: cite option lists as choices_from
RetroBat's es_features.cfg and KNULLI's es_features.yml list the values
a menu offers. They move out of source_ref into choices_from, beside the
generator that writes the choice. RetroBat's xemu flashrom record holds
outside a Chihiro launch (Xemu.Generator.cs:48, 284), and KNULLI's
libretro boot disk records name the one core es_features offers them
for. Rescraped at the pinned revisions.
2026-11-11 11:04:08 +01:00
Abdessamad Derraz c5d3e85bac feat: record config installs in shell extractors
ROCKNIX, EmuELEC, AmberELEC, EmuDeck and RetroDECK records citing a
config now carry the code installing it, whether that keeps a file
already there, and the launch code rewriting its keys. Rescraped at the
pinned revisions.

Records the shipped code never reads are no longer written: EmuELEC's
mame.ini folders (MAME.opt turns paths off), AmberELEC's atari800.cfg
(read only under an option that is off), the six RetroDECK XRoar ROM
lists no machine looks up, and the ROCKNIX melonDS DSi BIOS keys
(DSiExternalBIOSEnable is set by no shipped ini).

Conditions added: ROCKNIX and AmberELEC amiberry kickstarts hold only
outside a WHDLoad --autoload boot, ROCKNIX NanoBoyAdvance exits without
its BIOS, the EmuELEC scummvm.ini copy runs from an action no launch
passes, and the EmuDeck melonDS.toml keys need ExternalBIOSEnable (DS)
or ConsoleType 1 (DSi).
2026-11-11 11:04:02 +01:00
Abdessamad Derraz 3129eaf10c feat: bind config launcher records on evidence
A launcher record citing a config, option or feature file binds only
when the platform's code installs the file (installs), its launch code
was read for what replaces it (overrides), and the emulator's profile
shows where the shipped build loads it and reads each key
(config_reads, read at pin_build). Unproven records place no file and
hand no directory. verify, cross_reference and the platform page list
them apart, outside severity and --strict.
2026-11-11 11:03:47 +01:00
Abdessamad Derraz 4f5951e2fb chore: merge the MAME search paths 2026-11-10 14:06:37 +01:00
Abdessamad Derraz 409578e20e feat: read Batocera's MAME search paths
Batocera starts MAME with -rompath <romDirname>;/userdata/bios/mame;
/userdata/bios, /userdata/roms/mame and the softlist folder added for
MESS systems, and -samplepath, -artpath and -crosshairpath below
/userdata/bios/mame (generators/mame/mameGenerator.py:129-143, 189 at
batocera-43.1, MAME_BIOS in mamePaths.py). No extractor read that
generator. It now goes through the generic reader KNULLI uses for its fork
of the same file, keeping the command line search settings: the
Macintosh boot disk the command names is a file.

Rescraped at batocera-43.1: the six records are the only change.

Manifests: Batocera drops samples/bbc.zip at the BIOS root, read by
neither build. mame/samples/bbc.zip, which its list declares, serves both.
The sets stay at the BIOS root, which the rompath lists.
2026-11-10 14:05:10 +01:00
Abdessamad Derraz 83e901a5d4 feat: read RetroPie search lists below $romdir
RetroPie writes MAME's mame.ini with samplepath $romdir/mame/samples;
$romdir/arcade/samples and artpath the same way (scriptmodules/emulators/
mame.sh:135-136), and MAME4ALL's mame.cfg with rompath and samplepath
below $romdir (mame4all.sh:78-79). The extractor kept the lines naming
$biosdir only. An iniSet whose value lists folders below $romdir is now a
search path, one folder alone being where the program writes
(cfg_directory and the others). $romdir is read as RetroPie's roms root
(retropie_packages.sh:47-49).

Rescraped at the pinned revision 427e7621: the four records are the only
change.

Manifests: RetroPie's standalone MAME reads bbc.zip in roms/mame/samples,
no longer named as read outside the BIOS folder, and its 19 floppy
samples there.
2026-11-10 14:05:03 +01:00
Abdessamad Derraz bd8cf8ed2c fix: deliver MAME trees a search setting moves
A tree installed with MAME sits where its search setting points by
default. When a launcher passes the setting, MAME reads the folder it is
given and never the installed copy: RetroBat passes -hash bios/mame/hash
and -sp bios/mame/samples (Mame64.Generator.cs:30, 101, 106-107, 172,
177-178), KNULLI -samplepath /userdata/bios/mame/samples
(mameGenerator.py:129), RetroDECK samplepath $bios_path/mame-sa/samples
(mame/component_prepare.sh:94, 117). A bundled entry whose layout folder a
passed search setting (standalone_pools) binds is now delivered there.

A moved directory entry is found by its layout path and laid out below
the platform's folder, the folder proving nothing about content. A layout
tail two trees answer (MAME's hash/) falls back on the platform's tail. A
file the profile names itself only shadows a tree member of the same build
below the same root.

Manifests: RetroDECK gains the 19 floppy samples in bios/mame-sa/samples/
floppy. RetroBat's hash/ and samples/floppy and KNULLI's samples/floppy
reach the folders the libretro layout already fills, with the same files.
2026-11-10 14:04:54 +01:00
Abdessamad Derraz 6c41ff95ea fix: give AdvanceMAME's sets both dir_rom folders
EmuELEC starts AdvanceMAME for arcade, mame and cps1-3 (es_systems.json).
advmame.sh sets dir_rom to /storage/roms/arcade for arcade and keeps
/storage/roms/mame for every other system (advmame.sh:26-30, 80), so an
arcade set is read in both. A binding gave each entry one place: an entry
launched both for a system a record names and for one it does not now
takes the place of each, in the pack, the manifest and verify. A system
the platform's list or machines put the entry under stands for the
entry's own ids, so XRoar's coco3.rom stays in RetroBat's bios/coco alone.

The AdvanceMAME sets are filed under arcade as well as their board.

A second-pass copy outside the BIOS tree now carries its layout path and
resolves by it, as the first pass does: EmuELEC's roms/mame/stvbios.zip
took bios/Arcade/MAME's set by that tail, roms/arcade/stvbios.zip the
Arcade/Arcade one.

Manifests: EmuELEC gains the 29 sets in roms/arcade, each the file
roms/mame holds. roms/mame/stvbios.zip changes from bios/Arcade/MAME to
bios/Arcade/Arcade/stvbios.zip, the copy the entry resolves to. Nothing
else moves.
2026-11-10 14:04:44 +01:00
Abdessamad Derraz 1b711b96f5 fix: read libretro MAME sets in mame/bios
libretro/mame hands MAME the rompath <content folder>;<system>/mame/bios;
<system>/mame/roms (src/osd/libretro/libretro-internal/retro_init.cpp:580-597
at 5f5a0774, 573-579 at dc1a9653 for 0.258, 582-588 at fba50741 for 0.278,
CORE_NAME "mame" in libretro_shared.h). The system folder itself is never
searched, and every pack put the sets there. The mame, mame0258, mame0278,
mamearcade and mamemess profiles now lay their sets out in mame/bios, the
standalone build keeping the top of its rompath. The release profile writer
and the device and set merge write the same paths on new entries.

RetroBat offers MAME as the libretro core mame and as the standalone mame64
(es_systems.cfg), two names of one profile, and laid out only the
standalone build. A libretro name whose profile the platform also runs
standalone under another name now makes the profile dual mode.

Manifests: mame/bios gains 1453 sets on RetroArch, Lakka, RetroPie,
EmuDeck and RetroDECK, 1427 on Batocera, KNULLI, RetroBat, ROCKNIX,
AmberELEC and EmuELEC, 78 on Recalbox. Root copies only these cores
claimed leave: 1373 on RetroArch and Lakka, 1372 on RetroPie, 1349 on
ROCKNIX, 1347 on AmberELEC, 1365 on EmuELEC, 240 on RetroDECK, 26 on
EmuDeck, 9 on Recalbox. Batocera, KNULLI and RetroBat keep theirs for the
standalone rompath. RetroBat gains the libretro layout: mame/hash (725),
mame/samples/floppy (19) and mame/plugins (71). The root copies other cores
still claim now hold the copy those cores resolve (38 on RetroArch).
Recalbox drops three Arcade/Arcade copies (coh3002t, pumpitup, naomi2)
that only the root claim reached, mame/bios holding the copies with every
member the 0.258 and 0.278 sets list. No set is lost.
2026-11-10 14:03:41 +01:00
Abdessamad Derraz 87aa74e09e chore: merge the code refs of data files 2026-11-10 14:02:10 +01:00
Abdessamad Derraz e32cdf9154 fix: keep only the EDK2 images -bios can start
Each EDK2 code image was run through a .qemu_cmd_line with -bios in the buildbot qemu_libretro.so (linux x86_64, 2026-07-27, 06ad814b) under scripts/core_probe.py, every pc-bios file staged in system/qemu.

edk2-aarch64-code.fd and edk2-arm-code.fd reach the TianoCore boot screen on -M virt with ramfb. edk2-x86_64-code.fd makes QEMU exit at once, as bios-256k.bin on the same command line does not: the x86 images are 3653632 bytes, not a multiple of 64 KiB, and x86_bios_rom_init refuses them (hw/i386/x86-common.c:1000-1002), the i386 and secure images included. edk2-riscv-code.fd leaves a black screen: it is S-mode code for pflash0 (docs/system/riscv/virt.rst:59-70).

The x86 and RISC-V images are read only as pflash drives, opened by path from the content folder, so the five entries are removed.
2026-11-10 14:00:49 +01:00
Abdessamad Derraz 57ff75682c docs: note the A7800 release ships hash/
The v5.2 release assets a7800-linux-v5.2.tgz, a7800-osx-v5.2.tgz and a7800-win-v5.2.zip each carry hash/a7800.xml, equal to the file at the pin apart from line endings, and a7800.ini sets hashpath to hash. The pin is an ancestor of the v5.2 tag.
2026-11-10 13:54:08 +01:00
Abdessamad Derraz 3d99fb765f docs: give UZDoom libretro refs their own lines
The IWAD entries cited one set of lines for both builds, read from the standalone tree. The libretro tree's d_iwad.cpp, d_main.cpp and iwadinfo.txt differ (its Names block lists doomxbox.wad and doom2xbox.wad once, not twice), so each entry now carries a standalone and a libretro ref, the second mapped line by line on the libretro pin. The libretro ref also cites the embedded game_support.pk3 and the -iwad the core passes for the content.
2026-11-10 13:52:56 +01:00
Abdessamad Derraz bd292ba2f9 fix: drop QEMU targets the core does not build
The core is built by libretro-gitlab-build.sh (Makefile.libretro-gitlab, the MAKEFILE of .gitlab-ci.yml) with a --target-list of 17 softmmu targets, and neither hppa-softmmu nor microblaze-softmmu is among them. hw/hppa/machine.c and hw/microblaze/ are not compiled, so nothing reads hppa-firmware.img, hppa-firmware64.img or the two Petalogix device trees. The four entries and the hppa system are removed.
2026-11-10 13:51:27 +01:00
Abdessamad Derraz 611dd0fa55 feat: refuse source_refs that cite only data
validate_schemas now refuses a files[] source_ref whose parts are all data or build files (a table, a makefile, meson.build, the file itself). A ref passes when one part names a source file or a binary with an address. The closed-source profiles whose refs are still prose about the shipped binary are listed in DATA_ONLY_REF_EXCEPTIONS with a reason each.
2026-11-10 13:49:45 +01:00
Abdessamad Derraz ccd819ac97 chore: merge the install record from main 2026-11-10 13:49:24 +01:00
Abdessamad Derraz 0c2b718c5e docs: cite the ROM config reader in BeebEm
Four Torch ROM entries named only their Roms_Torch.cfg line. They now cite BeebEmTorch.vbs passing -Roms Roms_Torch.cfg, BeebWin taking that file from the user data folder, RomConfigFile::Load, and BeebReadRoms opening each paged ROM.
2026-11-10 13:44:57 +01:00
Abdessamad Derraz 565da616d9 docs: cite the ArcadeFlashWeb page load
background.jpg cited flash.html and qml.qrc only. It now cites the main.qml lines that open flash.html from the application folder, and the QML image that reads the compiled copy.
2026-11-10 13:44:19 +01:00
Abdessamad Derraz b597944c50 fix: read defaults.prp from the Abuse code
defaults.prp cited abuse.lsp, which does not name it. dev_init opens it at every start through property_manager::load, which skips a missing file, so it is optional. It holds the level editor window positions and is written back after an -edit session. english.lsp now cites the abuse.lsp load the engine runs and the install rule.
2026-11-10 13:43:45 +01:00
Abdessamad Derraz 851c7a9bc5 docs: cite the software list loader in A7800
hiscore.zip and xm.zip named only their hash/a7800.xml entries. They now cite the cart_list software list of the driver, the hash path that holds the XML, its open in softlist_dev.cpp, and the ROM search by list and set name in romload.cpp.
2026-11-10 13:42:53 +01:00
Abdessamad Derraz 2e02c55102 fix: keep the first steps under their ceiling
The record's page text took first-install.md 31 words over its 400. It now says only that one setup opens on Install. RETROBIOS_TUI_RECORDED is an internal marker of the full screen's own runs, like RETROBIOS_TUI_LIST.
2026-11-10 13:42:41 +01:00
Abdessamad Derraz cc0f628a12 fix: drop gs104.rom from the ZEsarUX profile
The entry cited only the configure line that packs every *.rom into the release. The General Sound loader opens GS_ROM_NAME, fixed to gs105a.rom (src/soundchips/gs.h:34), and no code names gs104.rom, so ZEsarUX never reads it under its name.
2026-11-10 13:41:43 +01:00
Abdessamad Derraz 3add162a37 docs: cite the C64DTV ROM loaders in VICE
The three C64DTV ROM entries named only their file in vice/data. They now cite the BasicName, KernalName and ChargenName resources that name them, the c64rom loaders those resources call, and the embedded table that answers the names in the libretro build.
2026-11-10 13:41:13 +01:00
Abdessamad Derraz c75d38fbe0 fix: drop cbios.txt from the MSX.emu profile
The entry cited only the bundled file and its note said no code reads it. No source file of MSX.emu names cbios.txt at the pin, so it is not a file the emulator loads.
2026-11-10 13:40:28 +01:00
Abdessamad Derraz e0e0e0e314 docs: cite how EightyOne reaches four ROMs
Four entries cited only their file in Source/ROMs. tk90.rom, tk95.rom and spectrum48.arabic.rom are in no ROM list and are read when picked with the Browse button. interface1.edition1.rom is listed for ZX Interface 1, but ConfigureFDCRom has no Interface 1 branch, so it is read only when the configuration file sets ROMINTERFACE1.
2026-11-10 13:39:49 +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 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 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 69545f6247 chore: merge origin main into the integration 2026-11-10 13:30:51 +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 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