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.
MAME 0.289 reads intv.zip (exec.bin, src/mame/mattel/intv.cpp:549-552)
and videopac.zip (o2bios.rom, src/mame/philips/odyssey2.cpp:902-905).
The collection held both ROMs loose, INTV_EROM.bin and o2rom.bin, with
the crc32 and sha1 MAME declares. The two archives are built from them
with build_torrentzip and filed beside them: bios/Mattel/Intellivision/
and bios/Philips/Videopac/.
odyssey2 is a clone of videopac declaring the same o2bios.rom, which a
ROM search along the parent chain finds in videopac.zip. Its archive
would be a byte-identical copy, so the profile entry is dropped and the
videopac entry says so.
database.json gains the two archives (the name index also follows the
profiles' current aliases), and recipes/archives.json their recipes,
both rebuild: exact, sources profile:mame and collection.
Manifests: intv.zip and videopac.zip reach mame/bios on every platform
running MAME, and roms/intellivision and roms/videopac on EmuDeck and
RetroDECK. Each platform has 2 to 6 fewer omissions.
"e.java line 72" escaped profile_sync, which tracks path:line only.
Written "jadx e.java:72", each citation reads as one in a project the
profile does not declare, as decompiled output is. The jadx version
moves to the notes.
The three builds the platforms ship are 5f301c8 (Recalbox), 6a34ec0
(EmuELEC) and 0f6a767 (AmberELEC): 5f301c8 is an ancestor of 6a34ec0,
itself an ancestor of 0f6a767. 0f6a767 is no longer on the rewritten
branch and is fetched by its sha. The profile was held at 799060b,
which none of them builds, so EveryBuildReferenceNamesThePin failed.
At 0f6a767 and its two ancestors the same 26 BIOS roots are registered
with the same contents. aleck64, atarisy1, cedmag and coh1002v are not
among them and leave the profile with the Aleck64 and Cedar Magnet
systems, and hng64 (src/drivers/hng64.c:1425-1431, 1718) joins it.
Every ref is moved with the pin and read again. Each cited line holds
the same text at 6a34ec0 and 5f301c8, except advance/osd/video.c:1787,
1795: Recalbox's 5f301c8 compiles those tables from blitmax.h and
startup.h, now said in the notes. The doc/advmame.d citations, worded
otherwise in the older builds, give way to the code that does it
(advance/linux/file.c:87-99, src/romload.c:167-204), and the artwork
refs to src/artwork.c, the loader of this revision.
Manifests: AmberELEC and Recalbox gain hng64.zip and lose aleck64.zip,
cedmag.zip and coh1002v.zip at their BIOS root. EmuELEC loses
cedmag.zip from arcade and mame, its other three stay for MAME 2010
and 2003-Plus, and hng64.zip takes the copy holding the advancemame
members. profile_sync: 0 to review, config_reads BUILD_OK at 6a34ec0.
ES-DE starts eleven machines whose sets the mame profile did not list.
Read at mame0289 (the upstream pin, f34f025) and its -listxml:
- apple2e, a7800, channelf, intv and videopac are parents, required
- fmtownshr (of fmtowns) and odyssey2 (of videopac) are clones
- the devices they load (a2diskiing, d2fdc, votrsc01a, stic, i8244,
i8245) are already profiled
- arcadia, megaduck, pv1000 and svision declare no ROM, in their
machine or in a device, and run from the cartridge alone
The systems list gains the ten machines' systems.
Manifests: apple2e, a7800, channelf and fmtownshr reach mame/bios on
every platform running the core, and the ES-DE folders of EmuDeck and
RetroDECK (apple2, atari7800, channelf, fmtowns). intv, videopac and
odyssey2 are omitted: the collection holds exec.bin and o2bios.rom
loose only (INTV_EROM.bin, o2rom.bin). verify --all keeps its severity
and status counts. profile_sync: 0 to review.
RetroPie clones amadvance/advancemame at the branch tip with no
revision (scriptmodules/emulators/advmame.sh:16, 39-41 at 427e762), so
advmame is profiled at 96237a5 (v5.0-484), built_by retropie and held
by pin_follows. RetroPie's advmame now resolves to it, advancemame
keeping EmuELEC, AmberELEC and Recalbox.
The MAME workflow at 96237a5: 28 BIOS roots registered in
mame/mamedriv.c (macs2bios is not), the eight ZN roots under their MAME
names (coh1000c, coh3002c, coh1002m, coh1000t, coh1002e, coh1001l,
coh1000w, coh1000a), modern Neo Geo members, coh1000w's CAT702, and 15
device archives that BIOS_LOAD reads first (atarisy1, coh3002t, m1comm,
midssio, namcoc65/68/69/71/74, s_smp, saa5050, sente6vb, sns_dsp1bleg,
t5182, v4bios). bctvidbs declares no ROM of its own. Three laserdisc
player programs are opened by name outside any ROM list, with a fatal
length, CRC32 and SHA1 check: pr8210, 22vp931 and simutrek.
pin_build accepts pin_follows in the schema, and bump_commit advances a
built_by profile that follows the tip.
Manifests: RetroPie gains 24 archives at its BIOS root, the ZN ones
under their new names, and nss.zip moves to the copy holding
nss-c.dat and nss-ic14.02. The other platforms do not change.
verify --all keeps its counts. profile_sync: 0 to review.
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.
RetroDECK carries GZDoom g4.14.2 in its components and installs LRPS2
14d19f8 from the buildbot's stable 1.22.2 cores. EmuDeck runs the
Flathub ares, v148. Each gets its own config_reads entry, and an entry
read at the pin no longer stands for a platform another entry names.
At v148 ares reads NeoGeoAES/Firmware/BIOS.World, so that EmuDeck record
holds. It names MSX2 firmware MAIN and SUB, and PC Engine CD and
SuperGrafx CD firmware by card: EmuDeck's BIOS.* keys for those three
are never read and stay unproven.
A line cited in a config_reads condition is read as prose at the
profile's pin, not at the build the entry describes. The lines move
into the key's source_ref, which is read at that build.
amadvance/advancemame rewrote the tip of master: e291032 is no ancestor
of the branch any more, and 799060b replaces it (same parent abfc3c8,
same message). The two differ in makefiles and the removed jedutil
sources only, none of the files the profile cites, so the refs keep
their lines at 799060b (v5.0-453-g799060b).
From e1a9aad5 the branch renames the Sony ZN BIOS archives after MAME
(cpzn1 becomes coh1000c, zn.c BIOS() at 4801) and loads firmware with
BIOS_LOAD. EmuELEC (6a34ec0), AmberELEC (0f6a767) and Recalbox
(5f301c8) build earlier revisions that read the names the profile
lists, so the pin is held with pin_frozen and the two other builds join
pin_build. RetroPie builds the branch tip (advmame.sh:16, 39-41).
profile_sync: 0 to review. Manifests do not change.
AmberELEC and ROCKNIX install a retroarch.cfg whose system_directory
points every core at the BIOS folder. retroarch.yml (type utility, no
file, no system) reads that key, and ROCKNIX's systemfiles_in_content_dir,
at the RetroArch each one compiles: v1.22.2 and bdba046f. all_libretro
never picks a utility profile, and lists naming retroarch gain no file.
A libretro core option a frontend record writes stays the core's to
read: RetroDECK's pcsx2_bios keeps lrps2 as its reader.
RetroBat installs its stable archives, so each config_reads entry is
read at the build the binary names: Hatari 2.4.1, hatariB 0.3,
Hatari2014 at ab55c3e from the buildbot, Kronos 2.7.0 and Ymir 0.3.3.
SSF ships PreviewVer R28 and YabaSanshiro 1.20.32 has no public
source: binary_sha256 names the file their address refs are read in.
The seven RetroBat records citing an option list now hold.
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.
EmuELEC builds AdvanceMAME at 6a34ec0 (package.mk PKG_VERSION, v4.8).
At that build advmame.rc is read from the home, host and data folders
(advance/osd/emu.c:754-757, 779-791) and the dir_* keys set each search
folder (advance/osd/fileio.c:72-86, 798-815). With the config_reads the
launcher evidence rule asks for, EmuELEC's advmame.sh dir_rom records
bind again: its manifest gets back the 29 sets in roms/arcade and the
29 in roms/mame.
Where each shipped build finds the config a platform installs and reads
every key it opens a file from, read at the build the platform ships:
duckstation (EmuELEC, ROCKNIX, RetroBat), xemu, armsx2, hatari, melonDS,
dsperate, NanoBoyAdvance, mednafen (ROCKNIX's sydarn fork) and ares,
gzdoom, xroar, lrps2 and the amiberry builds at their pins. pin_build
names the builds ROCKNIX, EmuELEC and AmberELEC compile, revision the
ones RetroBat and Flathub install unpinned.
tests/test_launcher_evidence.py covers the rule, the extractor helpers,
the invariants and the chains that move placements.
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.
Readme claims give way to the boot routine of SSF.exe R38: the Saturn
BIOS must read 0x80000 bytes, a failed read or NoBIOS falls back to the
embedded boot ROM, so the BIOS is optional with an HLE fallback, and
ST-V reads its EPROM whatever NoBIOS says.
The -home, -palette, DEFAULT.Z80 and Sam Coupe claims now cite the
option table and loaders of the Speccy 5.9 desktop binary. Quotes with
no code behind them are gone.
Notes now cite code for the fpRam directory, the registry keys and the
Tables path, and drop the manual, installer and Batocera changelog
wording. The code spells the directory fpRam.
The four camera plugins link OpenCV statically. Refs now cite the
CascadeClassifier::load call, its path built from the plugin directory
and the three-entry table, and the empty detector that follows a
failed load.
The step from the frame's create handler down to Memory::Init was
inferred from the error message. Refs now give the chain through
AfxWinMain, InitInstance, the message map, VM::Init and the device
vtable, and the notes say where the SRAM machine index is set.
The media board ROM ref now cites the XBE directory build, the boot.id
exists test that makes the system Chihiro and the gate that skips the
ROM checks in TeknoParrot's cxbxr-emu.dll.
Each built-in ROM resource of Caprice.exe 26.4 is listed with the sha1
of its bytes and the dump it equals in this and other profiles. The
release date taken from History.txt is gone.
The flag, star, FAQ and notice assets cited format strings only. They
now name the decompiled methods that build each asset path and open it
through the AssetManager or a WebView, in all three builds.
Import and .rdata citations now name the loader, LoadLibrary, cascade
and SQLite call sites in BAM.dll and its plugins. TrackIR.dll keeps the
NPClient.dll Future Pinball loads, Kinect10.dll is imported by the two
Kinect plugins only, and the PostFX, iCom and OpenVR configs gain
entries.
Import directory lines and manual pages gave way to the IAT ranges and
the calls that use each library in Future Pinball.exe 1.9.1.20101231.
fpLatestTables.xml is written by the program, not by libcurl.
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.
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.