No Batocera board turns on BATOCERA_CORES_STILL_COMMERCIALIZED or
BATOCERA_CORES_EXPERIMENTAL (Config.in:109, 1670), so citron, ryujinx,
applewin and eka2l1 are not built, and freej2me, gong, squirreljme, uqm
and vemulator are selected by no Kconfig file at batocera-43.1. Read
with every sourced Kconfig file, the Pi 4 boards gain dxx-rebirth,
sonic2013, soniccd and xroar (mesa3d-rpi4 gives them OpenGL).
KNULLI's es_systems.yml is Batocera's model: it lists every emulator
its configgen knows, and its Config.in selects many of them only on
x86_64 boards, which KNULLI has none of. The platform list now holds
what at least one board selects, read by the targets scraper, plus a
program the launcher runs from the BIOS folder (lexaloffle). 59 cores
and 44 standalone emulators leave the list, with their launcher records.
The targets scraper follows Config.in and every file it sources, so a
select a package declares itself counts (Batocera's mesa3d-rpi4 gives
the Pi 4 OpenGL). A sourced file absent at the pin is named and read as
empty: KNULLI 20260511 sources package/utils/vtree/Config.in, added in
June.
45 fonts from a PS4 firmware 11.00 dump (archive.org item
sony-ps4-system-font), checked against the item's md5 and sha1 and,
for 44 of them, byte for byte against the separate ps4font upload.
Each sits in the folder the console keeps it in: shadPS4 mounts
fonts/font and fonts/font2 as two guest folders (emulator.cpp:640-661),
so the ten font2 fonts move there and the seven font2 files the mount
also serves get entries.
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/.
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>/.
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.
KNULLI's configgen-defaults.yml picks suyu for the Switch, which its
es_systems.yml does not offer and no package of its tree, its batocera
submodule or its buildroot builds: KNULLI does not ship suyu. A default
es_systems.yml does not offer now counts only when a package of the
build's trees has that name, or when its launcher runs a program from
the BIOS folder (Batocera's lexaloffle). Batocera's lists are unchanged
by the rule. suyu leaves KNULLI's cores, and the XDG_DATA_HOME record
that served it goes.
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.