MAME's search path for a set is the set and every ancestor
(src/emu/driver.cpp:31-38, src/emu/romload.cpp:67-84 at mame0289), so
a clone reads the ROMs it shares with its parent from the parent's
archive. games/arcade/<profile>.json now records, under parents, each
parent game set with ROMs and the clones whose romof chain reaches it
before any BIOS set, and rom_search_sets adds them to what a command
reads. The installer's index leaves them out, as it does the sources.
arcade_parent_importer --all is re-run: every profile gains parents,
and mame0258, mame0278, mame2010, mame2015, mame2016 and fbneo also
gain the sources their committed files lacked.
Manifests, EmuDeck and RetroDECK only: videopac.zip reaches
roms/odyssey2 beside i8244.zip, electron.zip roms/electron, and the 35 parent
sets the profile holds (a7800, apple2e, intv, videopac and others)
reach arcade, consolearcade and mame, the folders whose command starts
any machine. verify --all keeps its severity and status counts.
RetroPie writes dir_rom $romdir/mame-advmame:$romdir/arcade into the
rc of each AdvanceMAME build (advmame.sh:100, configure_advmame being
called by the 1.4 and 0.94 modules too). _search_list_in_roms split
every list on ';', so the line was dropped and the sets landed at the
BIOS root, where no build reads them.
Each program's separator is now read from its own code: AdvanceMAME
strtoks dir_rom on file_dir_separator(), ':' on Linux, in the three
builds RetroPie ships (advance/linux/file.c:138-141, advance/osd/
fileio.c:696-699 at 96237a5, 685-688 at advancemame-1.4, 640-643 in
advancemame-0.94.0). MAME splits on ';' (src/emu/fileio.cpp:56, 64,
112 at mame0289). RetroPie is rescraped at 427e762: the three
passes_path records are its only change.
advmame, advmame-1.4 and advmame-0.94 carry a retropie config_reads
for dir_rom, read at the build RetroPie installs (96237a5, the tag
advancemame-1.4 its tarball matches, the 0.94.0 tarball). The 1.4 and
0.94 profiles gain the dir_rom pool and a path for each set, and 0.94
a pin_build on rp_module_repo.
Manifests: on RetroPie 55 sets of the three builds move from the BIOS
root to roms/mame-advmame, the first folder of the list, which every
game started from either folder reads. Seven archives other cores
share stay at the root for them. No other platform changes. verify
--all keeps its severity and status counts.
AdvanceMameOnEmuELEC counted the 29 sets of 799060b. At 0f6a767 the
profile has 26 (aleck64, atarisy1, cedmag and coh1002v leave, hng64
joins), placed in roms/mame and roms/arcade: 52 entries.
The lone-dash check read MAME's -rompath and -samplepath, QUASI88's
-romdir and RetroBat's -hash and -sp as half a dash glued to a word.
Quoted as code they read as flags. A C loop quoted in romdir.py and a
docstring in test_agnostic_scope no longer read as clause semicolons.
ROCKNIX writes some add_emu_core calls under a case on DEVICE, and the
rom folders file keeps that branch as the offer's `when` (uae4arm for
amiga, emulators/package.mk:188). A board's core list names such a core
when another folder offers it there, so --target placed its files in a
folder the board does not offer it for.
offer_boards() reads `when` and board_defaults against the platform's
targets, aliases included. A board build (generate_pack and generate
--manifest with --target, verify --target) carries the board in the
config (TARGET_KEY), and content_folder_tags leaves out the pairs the
board is not offered. A manifest for every board lists in
offered_boards each profile placed in such a folder, and install.py
--target drops its files there on the other boards.
Manifests: no file moves. The cores ROCKNIX offers under a device case
read no file beside the game today, so no manifest carries
offered_boards yet.
The rom folders files kept the default core of each folder only, so a
core the user picks in the frontend's menu was not known to read its
sets there. Each folder now lists its offers: every <core> of every
<emulator> in AmberELEC's es_systems.cfg (arcade:
packages/ui/emulationstation/config/es_systems.cfg:116-150), every core
of EmuELEC's es_systems.json, every add_emu_core of ROCKNIX's emulators
package.mk with the device case it is written under (arcade: 218-229),
and the emulator of every ES-DE <command>. A core written under every
branch of a case is offered unconditionally. The ES-XML, ES-JSON,
ELEC-conf and ES-DE setups are rescraped at their pins: archr, arkos,
chaos, darkos, jelos, kolos, pan4elec, retrobat and unofficialos gain
the same records and nothing else.
A libretro core offered for a folder reads the sets it loads beside the
game there, as the default one does.
Manifests, roms folders gaining sets read beside the game:
- AmberELEC: +215 (293.1 MB) in fbneo, arcade and mame, for MAME 2010,
2015, 2016 and 2003-Plus. 1 omission leaves.
- EmuELEC: +291 (232.0 MB) in cps1, cps2, cps3, mame, fbneo and
arcade, for MAME 2010 and 2003-Plus. 47 omissions leave.
- ROCKNIX: +501 (538.7 MB) in fbneo, neogeo, cps1, cps2, cps3, arcade
and mame, for MAME 2010, 2015 and 2003-Plus. 120 omissions leave.
- EmuDeck: +306 (251.2 MB) in cps, cps1, cps2, cps3, arcade and mame,
for MAME 2000, 2003, 2003-Plus and 2010. 92 omissions leave.
Each omission that leaves was a set named as read outside the BIOS
folder. RetroDECK and the other platforms do not change. No file
leaves, and verify --all keeps its severity and status counts.
A pack writes one file per path, and the second pass of core extras
gave a path read by several cores to the first profile in name order:
EmuELEC's arcade/neogeo.zip took AdvanceMAME's copy although the folder
starts MAME 2003-Plus by default (es_systems.json:82), and RetroDECK's
cps folders took MAME 2000's neogeo.zip and MAME 2003's nss.zip, which
lack members MAME 2003-Plus requires there.
The copies cores ask for at one path are now gathered first. The copy
of the core the roms folder starts by default goes first, then the one
holding every required member of the most claims, then profile order.
The others stay alternatives in the manifest.
Manifests: EmuELEC arcade/neogeo.zip becomes neogeo.zip.74df3258
(MAME 2003-Plus, AdvanceMAME's 4ccf6682 an alternative). RetroDECK
roms/cps, cps1, cps2 and cps3 get neogeo.zip.74df3258 and
nss.zip.cba0bd8c. No file is added or removed. verify --all keeps its
counts.
EmuDeck writes mame.ini rompath ${romsPath}/arcade;${biosPath};
${biosPath}/mame (emuDeckMAME.sh:66-68). Steam ROM Manager starts MAME
through tools/launchers/mame.sh with the game alone, so that list is
read there. Every standalone MAME command of ES-DE v3.5.0, which EmuDeck
installs, passes -rompath %GAMEDIR%\;%ROMPATH%/<system>, and the command
line outranks mame.ini. A set the mame.ini record places keeps that
place and also goes to each folder a command passes for a machine that
reads it.
The Model 3 folder, live in EmuDeck's list and commented out in
RetroDECK's, holds the machines of sega/model3.cpp.
Manifests: EmuDeck gains 1483 files (466.7 MB) below roms/, 480 each in
arcade, consolearcade and mame, the others in adam, daphne, laserdisc,
macintosh and 15 more. The pack ZIP does not change, roms/ being
written by the installer. No file leaves.
ES-DE starts the libretro MAME core with a command line as its content
in 22 commands across 21 systems ("apple2e -rompath \"%GAMEDIRRAW%;
%ROMPATH%/apple2\" -flop1 ...", resources/systems/linux/es_systems.xml
at RetroDECK's 15e1b236 and EmuDeck's ES-DE v3.5.0), run through the
shell by popen (es-core/src/utils/PlatformUtil.cpp:231, 257).
At 5f5a0774 the core reads content that is no file as a command line
(retro_init.cpp:966-1008). Set_Path_Option passes its own -rompath
<content dir>;<system>/mame/bios;<system>/mame/roms (580-597), then
every word of the command line follows, -rompath included, only -rp
being dropped when mame_paths_enable is off (902-940, 914-919). MAME
keeps the later value of an option given twice at one priority
(src/lib/util/options.cpp:260-276, clifront.cpp:243). Those commands
read their sets in the folders they name, and mame/bios stays read by
every command that passes none.
The ES-DE parser records these commands in searched_by with their core,
the mame profile declares libretro_pools (-rompath and -rp stand for
mame/bios), and a set there also goes to each folder a command names
for a machine that reads it.
Manifests: EmuDeck gains 16 files below roms/ (apple2, apple2gs,
astrocde, crvision, gamate, gamecom, gmaster, intellivision, odyssey2,
scv, supracan, vectrex, videopac, vsmile). RetroDECK does not change:
its standalone MAME commands already put the same sets at the same
paths. No file leaves.
KNULLI 20260511 ships libretro/mame lrmame0278 and GroovyMAME
gm0277sr221e (the batocera submodule's libretro-mame.mk and mame.mk).
mameGenerator.py and libretroMAMEConfig.py pass the Macintosh boot disk
as -hard. MAME names the option of a machine's one hard disk image by its
brief type name: harddriv.h:43 returns "hard", update_names keeps it
without an index (diimage.cpp:1131-1165) and the option entries are
registered under it (emuopts.cpp:389-404, 680-694), the LC III holding
one harddisk at scsi:0 (maclc3.cpp:266). GroovyMAME's diimage.cpp,
harddriv.h and maclc3.cpp equal mamedev mame0277.
The mame profile carries that read as config_reads with KNULLI's two
builds in pin_build, and both -hard records bind. The manifest does not
change: KNULLI's own list already puts mac608, mac701 and mac755.chd in
/userdata/bios, the folder the records search.
ES-DE starts standalone MAME with -rompath %GAMEDIR%\;%ROMPATH%/<system>
in 78 live commands across 54 systems (resources/systems/linux/
es_systems.xml at retrodeck-main-20261103-162710, 15e1b236; two more
are commented out). The command line outranks mame.ini, so RetroDECK's
MAME reads its sets in the roms folder each command names and in no
BIOS folder. The ES-DE rom folders parser now records, per folder, the
folders a standalone command passes as its ROM search path and the
machines it starts, or that the game is the machine (%BASENAME%).
Rescraped at the pinned revisions: retrodeck, emudeck and
emudeck-windows gain these records and nothing else.
A command reads the sets its machines load: the machine's own set, the
BIOS sets on its romof chain and the device sets with ROMs it
instantiates, from games/arcade/mame.json (mame0289 -listxml). That
index now also lists the game and device sets of each driver source
file, so a %BASENAME% folder reads for its board: neogeo and stv by
their BIOS root, cps1-3 and model2 by source file, daphne and laserdisc
by the laserdisc player devices, gameandwatch and lcdgames by the
handheld sources, any other (arcade, mame, consolearcade) for every
machine. The published installer copy of the index leaves the sources
out.
Manifests: RetroDECK gains 1399 files, 378.2 MB, below roms/. Of the 219
sets named as read outside the BIOS folder, 58 reach 146 files (25.9 MB),
161 stay named, no command's machine reading them. 441 sets RetroDECK's
list also declares at bios/ reach 1253 files (352.3 MB), 429 each in
arcade and mame and 480 in consolearcade. No other platform changes.
MAME 2000, 2003, 2003-Plus, 2009, 2010, 2014, 2015, 2016 and UME 2015
search the folder of the loaded game for their sets and never the system
folder: osd_get_path gives FILETYPE_ROM the content path (mame2003 and
mame2003-plus src/fileio.c:217-220), -rompath is MgamePath (mame2009
retromain.c:432-434, mame2014 retromain.c:1851-1856, mame2015 and
ume2015 retromain.c:1980-2042, mame2016 retromain.cpp:1364-1402), ROMs
open with libretro_content_directory (mame2010 romload.c:667-685) or
IMAMEBASEPATH (mame2000 libretro.c:1044-1053, 1247). Their 421 sets are
load_from: content_dir. Samples, artwork, cheats and the data files read
from the system folder keep their paths.
A set read beside the game goes to the roms folder of each system the
platform launches the core for: libretro_systems, the default core of a
rom folder, the cores a system offers under its own name, the systems a
RetroPie package registers (the lr-mess packages build SUBTARGET=mess,
lr-mess2016.sh:31, and read none of these arcade sets). A roms root in
the install tree takes a plain dest, as a standalone entry placed there.
A platform with no folder per system, or none it can place (RetroArch,
Lakka, RetroBat, EmuDeck, MyMinUI), names the set as read outside the
BIOS folder. EmulatorJS writes the BIOS and the game to one folder
(emulator.js:845, 990, 1054): RomM keeps its firmware entries. Game data
read beside the content is left to the game.
Manifests: roms folders gain 408 files on RetroDECK, 182 on RetroPie,
179 on Recalbox, 140 on AmberELEC, 134 on KNULLI, 52 on Batocera and
ROCKNIX, 39 on EmuELEC. BIOS root copies no other core reads leave: 80
on RetroArch, Lakka and ROCKNIX, 61 on EmuELEC, 60 on Recalbox, 59 on
AmberELEC, 57 on RetroPie, 26 on MyMinUI, 20 on RetroDECK, 19 on
Batocera and EmuDeck, 16 on KNULLI, 13 on RetroBat. verify --all keeps
its severity and status counts.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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/.
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.
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.
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.
-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.
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.
xemu loads wpcap.dll with a plain LoadLibrary (winpcap-loader/loader.c),
and it works only with the Npcap driver, whose installer puts it on the
DLL search path. The schema has no marker for a file a separate system
install provides, so the entry is unsourceable with that reason. The
copy at the BIOS root of RetroBat, RetroDECK and eight other platform
lists, which no search order reaches, leaves them.
Each Cxbx build reads its data from the folder its settings.ini sits
in, which RetroBat writes beside the binary: the three profiles name
Settings::GetDataLocation, so keys.bin, EmuDisk and EmuMediaBoard go to
emulators/<folder> on RetroBat instead of the BIOS root. RetroBat writes
cxbx-reloaded's EEPROM.bin and xemu's eeprom.bin and xbox_hdd.qcow2
itself (installed_on), and mounts an .iso with its own tool, so Cxbx's
dokan2.dll is never loaded there (unread_on).
RetroPie lists KS 1.3 as kick34005.A500, and its fs-uae launcher
passes $biosdir/kick13.rom. The listed copy settles fs-uae's entry by
content, so the launcher layer never offered it, and kick13.rom
reached the pack only as a copy of UAE4All2's amiga/kick13.rom: the
x86 boards, without UAE4All2, lost it. An entry the list settles under
another name now answers the launcher's place by its own name.
RetroPie builds amiberry 5.7.2 and 6.3.3, one per board, both in
$md_inst of its amiberry package. Each build recorded roms/kick.rom
and whdboot/AmiQuit in the emulator's folder apart, and
install/retropie.json listed both destinations twice. A file read
outside the BIOS tree is now keyed by the folder the platform installs
the listed name into, and one omission names every core reading it.
Batocera and KNULLI start shadPS4 from CONFIGS/shadps4, so its user
folder sits below /userdata/system/configs. The scrapers read that root
from batoceraPaths and write configs_root with its source_ref. The
manifest names it configs_directory, and install.py honours it through
the same checks as roms_directory: character rules, at most two ups,
the ancestor match and the lexical bound.
platforms/romfolders/<platform>.yml records the roms root from the OS's
own source (roms_root path and from_bios), the same fact the registry's
roms_directory restated for ROCKNIX alone. The manifest's roms_directory
now carries from_bios, which the installer follows from a BIOS folder of
the platform's name, and the registry key is gone. A list that installs
above its BIOS folder (AmberELEC) holds its roms root in the install
tree: a file a launcher runs from there is a plain dest. emulators_directory
stays in the registry: no rom folders file names emulator folders.
RetroBat's Pico8 generator runs pico8.exe from AppConfig.GetFullPath:
the emulatorLauncher.cfg key, else the first existing of four folders of
the RetroBat install. The registry describes that search
(emulators_directory) and the manifest writes such a file as
root: emulators. The installer places it only when the BIOS folder sits
beside RetroBat's launcher config and the config does not move the
folder, and names it no_emulators_directory otherwise. Packs skip it as
they skip root: roms.
The PICO-8 0.2.7 Windows build (pico8.exe, SDL2.dll) is collected from
the archive.org copy of pico-8_0.2.7_windows.zip, its pico8.dat being
the 0.2.7 one already held.
lexaloffle documented two programs, so every platform naming PICO-8
received Voxatron's files: ROCKNIX, RetroDECK and RetroBat run PICO-8
only. Voxatron is its own profile, named vox_official. A platform also
runs the emulators its standalone_cores list names: Batocera and KNULLI
list lexaloffle there and nowhere else.
A platform that binds part of a standalone layout leaves the entries no
binding covers in a folder outside the BIOS tree: they are no longer
packed at the BIOS root, and the manifest names them (root: emulator,
outside_bios_folder). A launcher that executes a profile's file binds
the program folder: in the BIOS tree, below the roms directory a registry
entry names (root: roms, installed into the folder holding the BIOS
folder), or nowhere a pack reaches. A moved entry resolves by its own
path as well as by its destination.
uae4all gains kick.rom and rom.key in its working directory and loses a
not_bundled_on that named Recalbox, which runs uae4all-rpi. lexaloffle
declares that its programs read beside their executable, lists the
Windows build RetroBat runs and the pico8_dyn ROCKNIX runs on x86_64.
standalone_bindings maps each subfolder of a standalone layout to the
folder of the BIOS tree a platform's links and passed directories give
it, followed through a working directory. platform_layouts applies it,
so the pack, the manifest, verify and slots read one destination.
uae4all paths are now what the emulator reads, kickstarts/<name> below
its working directory, and RetroPie still receives them in amiga/.