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.
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.
The xemu generator writes eeprom.bin and xbox_hdd.qcow2 into
saves/<system> from its own resources and passes both in xemu.toml,
copies chihiro_eeprom.bin between saves/chihiro and the emulator folder,
and points the Chihiro snapshot store at saves/chihiro. The Cxbx
generator runs each build from its emulator folder (chihiro, chihiro-ds,
cxbx-reloaded, else cxbx-r), where it writes settings.ini, writes
EEPROM.bin into cxbx-reloaded for an Xbox, and mounts an .iso with its
own xbox-iso-vfs.exe after checking the Dokan 2 runtime. Nine records,
read at emulatorLauncher ca486005.
A program the launcher runs from its own folder is no launcher read
left to collect. xemu-chihiro lists the two files it generates,
chihiro_eeprom.bin and chihiro_snapshots.qcow2, as unsourceable.
The amiberry and hatarib extractors give a search record and its copy
record one list object, and PyYAML wrote it as &id001 and *id001.
platforms/retrobat.yml, batocera.yml and knulli.yml carried such
anchors. The platform dumper now writes every list out, and the two
files the RetroBat scrape does not rewrite are dumped again through it:
their content is unchanged.
RetroBat writes rom_path and whdboot_path below its amiberry emulator
folder and copies the kickstarts and rom.key it finds in bios into that
ROMs folder. The copies and both folders are launcher records, and the
8.3.0 standalone entries go to the emulators tree where the build reads
them.
The configs root place joins roms and emulator folders in the split
handed directories, and RetroBat's portable folder table keeps both
sides. Batocera, KNULLI and RetroBat records regenerated.
RetroBat passes XRoar -rompath bios/coco for the coco system, and its
es_features offers the CoCo 3 machines there. The per-system record now
carries those machines (machines:), and an entry whose name the
platform list does not declare is launched for the system offering
its own profile system as a machine, by _norm_system_id. coco3.rom and
coco3p.rom move from bios/dragon to bios/coco. RetroBat offers no
MC-10 machine, so the mc10 ROMs keep the default bios/dragon.
Sudachi.Generator.cs:28-30 creates user/ beside sudachi.exe, and
sudachi reads it as PORTABLE_DIR (path_util.cpp:92, fs_paths.h:9) in
place of %APPDATA%. Its keys now go below emulators/sudachi/user/.
Both binding sides kept: roms_place, named handles and environment
variable directories from integ run through the pool and per-system
binding of this branch. Batocera, KNULLI and RetroBat launcher records
regenerated from the merged extractors.
RetroBat's generators create user/ beside yuzu.exe and eden.exe and
portable/ beside Ryujinx.exe, which the emulators read in place of
%APPDATA% (PORTABLE_DIR, Ryujinx AppDataManager.cs:12, 60). Their keys
now go below emulators/<key>/.
XRoar reads a ROM by name from the directories of rompath. The entries
take their file name as path, relative to ~/.xroar/roms or
${prefix}/share/xroar/roms, and rompath and -rompath are declared as
search lists.
Batocera records its rompath line, Recalbox -rompath bios/<system>
(the placeholder its extractor already writes), RetroBat its -rompath
as two records, bios/dragon and bios/coco for coco. An entry whose
name the platform list does not declare follows the launch its
profile system is listed under: Recalbox lists mc10.rom under
trs80coco, so alice.rom is read there.
Batocera ROMs move from the BIOS root to bios/xroar, Recalbox ROMs to
bios/dragon and bios/trs80coco, RetroBat ROMs to bios/dragon and
bios/coco. RetroDECK and RetroPie keep them at the BIOS root.
openMSX reads share/systemroms below OPENMSX_HOME or ~/.openMSX and
every filepool entry by SHA1. The profile paths drop RetroBat's
openmsx/ prefix and declare those directories and the filepool.
Batocera's config_directories reads the filepool lines its generator
writes, KNULLI reuses it. RetroBat records OPENMSX_HOME, RetroPie the
moveConfigDir of ~/.openMSX that its systemroms link lies in, and the
configure --prefix of xroar that its roms link lies in.
Batocera and KNULLI system ROMs move from openmsx/share/systemroms to
openmsx/, beside the files their own lists declare, RetroPie's to
BIOS/openmsx, the folder linked as share/systemroms.
Batocera's 002-adjust-paths.patch rewrites Citron's KeysDir to
/userdata/bios/switch: patched_paths reads it from the patch, and KNULLI
from its batocera submodule at the pinned commit. Batocera and KNULLI
start shadPS4 from /userdata/system/configs/shadps4 (os.chdir), KNULLI
sets suyu's XDG_DATA_HOME to /userdata/saves/switch, and RetroBat creates
the portable user folder beside citron.exe and shadPS4.exe. Each platform
file differs from its scraper's full output by these records only.
A profile names a folder a handle rewrites as "<handle> = <subfolder>",
and a record setting a variable or a working directory a declared folder
is spelled from binds the whole layout below it.
ROCKNIX's start_pico8.sh runs pico8_64 or pico8_dyn from
/storage/roms/pico-8 and RetroBat's Pico8 generator runs pico8.exe from
its pico8 emulator folder. Both are recorded as exec records, read from
the scripts at the revisions the platform files pin.
A copies record names its files under search_dir, the folder the code
copies from, and passes_to is the target, as the schema and RetroPie,
RetroDECK and AmberELEC already write it. KNULLI listed patches.zip
under the BIOS folder it is copied into, and KNULLI and RetroBat wrote
the target as prose with the condition. The condition of a copy now
goes in depends_on_option. Only launcher records change in knulli.yml
and retrobat.yml.
emulatorLauncher 228731e0 lists ten PS2 BIOS in one group: one held file
is enough and Program.cs reports the others OPTIONAL. The scraper keeps
group and optional, verify and the pack check apply the same rule.
MiSTer gains FM-7, Sharp X1 and VideoBrain boot ROMs, RetroArch three
CD-i files, RetroPie fake08, RomM 5.4.1. RetroBat follows emulatorLauncher
ca486005 (FM Towns reduced to the four ROMs Geartowns reads), ROCKNIX
20261101 (AetherSX2 dropped upstream, its PS2 BIOS now under armsx2/).
EmuDeck targets gain the new buildbot cores.
The launcher layer now reads the Saturn emulators whose option replaces
the default path, DeSmuME's pair and firmware, the melonDS DSi files and
NAND region, jzIntv arguments, BlastEm's SetBiosPath, Dolphin, Raine,
GSplus, the DOSBox and capsimg copies, Tsugaru's folder chain, RPCS3,
EKA2L1, BizHawk's GB switches and the folders that MAME, FBNeo, Snes9x,
Flycast, ScummVM, XRoar, XM6 Pro, ArcadeDuck, Demul and B-Syndrome get.
Every line of these generators that names the bios folder must be read
by a record or a stated exception, or the scrape stops.
emulatorLauncher writes a BIOS path into an emulator's configuration
only when the file exists: string x = Path.Combine(bios, "name");
if (File.Exists(x)) ini.WriteValue(section, key, x). The extractor now
records each such write as a fixed_name launcher record, with the
enclosing if and early-return conditions, and a key that receives the
bios folder itself as passes_path. A path reassigned before the check,
or a write under a loop or an else, is not read.
Generators read at 48cdc616: KegaFusion (SCD and 32X keys, GenesisBIOS
given the folder), Jgenesis, MelonDS (DS), Mupen64, Project64, mGBA.
The RetroBat paragraph of the Kega Fusion profile now lives in the
launcher layer.
Six platforms are read from a branch: System.dat, batocera-systems.json, checkBIOS.sh, the MiSTer BiosDB, the RetroPie scriptmodules and the RetroDECK component manifests. Their YAML named the branch, so the native export patched whatever the branch had become since the scrape. Each scraper now resolves the branch head once, reads every file at that commit and writes it into source. The export follows a recorded tarball and a recorded tree as it already followed a raw file URL.
Batocera, RetroBat, Recalbox and ROCKNIX offer some emulators both as a
libretro core and standalone. Filed as standalone only, the libretro
layout was dropped: libretro Dolphin had no dolphin-emu/Sys/GC files.
Platforms now name dual-mode emulators and each gets both layouts.
Thirty platform system ids, such as sufami, pokemini, vsmile, and
Recalbox's comma-joined msx1,msx2, matched no system any profile
names, so no core file was attributed to them and --system missed them.
The scraper maps now carry those names, and a test holds every platform
system to a profile system apart from two named folds.
RetroBat's platform file carried no core list, and a registry list
copied from Batocera stood in with ports RetroBat never runs and none
of its standalone emulators marked as such. The scraper now reads
es_systems.cfg at the release tag: libretro cores, and every other
emulator as standalone.
resolve_platform_cores() links platforms to their cores via
three strategies: all_libretro, explicit list, system ID
fallback. Pack generation always includes core requirements
beyond platform baseline. Case-insensitive dedup prevents
conflicts on Windows/macOS. Data dir strip_components fixes
doubled paths for Dolphin and PPSSPP caches.