An executable is refused unless an emulator profile pins its exact bytes by sha1 or sha256. PICO-8's pico8.exe and SDL2.dll, from the official 0.2.7 archive, are pinned by the lexaloffle profile; md5 and crc32 never vouch for code.
Five test cores moved from type: test to role: test. The page
generator already leaves them out by role, the surface test still read
the old type and counted 653 profiled cores against the page's 648.
The rule's strategies moved from resolve_platform_cores to
_platform_profiles, and the test read the old function. It now reads
both. The page named ROCKNIX among the lists naming retroarch, which
it no longer does since its list names the libretro cores it
installs, and said nothing of installable_cores: a downloadable core
designates libretro builds and counts under --target only on the
boards whose downloader offers it.
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).
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.
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.
The first profile reading a requirement hosts the others' claims,
and two ways of dropping the host dropped them too. DraStic brings its
own usrcheat.dat, and DSPerate, which reads the same file, lost it
wherever DraStic runs. A missing file was recorded for its first
reader alone: NAPALM.GRP named Raze, Data.rsdk Sonic Mania. A list
built for a board without that reader carried what the full list
left out, and install.py --target disagreed with the builder on
ROCKNIX, KNULLI, Batocera and RetroPie boards.
A board's core list names Batocera's standalone amiberry and the
buildbot's amiberry core alike, so install.py --target kept the
amiberry 8.5.0 libretro files on bcm2711, whose RetroArch downloads
nothing. resolve_platform_cores decides that reach, and the install
list now carries its answer as downloaded_cores, read by the
installer's narrowing for a target.
The builder tested only the first installable name of a profile:
Batocera lists higan_sfc_balanced and nside_sfc_balanced, the x86_64
downloader offers the second, and the core left the x86_64 pack with
its Super GameBoy files.
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.
Since ddafc2ff4 a pack's manifest.json holds install_list and
targets, which install.py reads with the pack alone. The pack schema
refused both. It now names them, and validate_schemas.py checks each
against the install and target manifest schemas.
bundled_only.py --strict listed 14 copies in bios/Commodore/Amiga/
.variants that only the per-build amiberry profiles reach, each through
a bundled entry. Four are the AROS ROMs, and those entries say
not_bundled_on: ROCKNIX, AmberELEC and Recalbox package amiberry
without them, so their packs bring them from the collection. The tool
read bundled alone and listed them, and now keeps a copy a
not_bundled_on entry reaches. The ten others (WHDLoad, boot-data.zip,
whdload_db.xml of 5.6.5 to 8.0.0) no platform, profile or manifest
needs: removed. database.json is to be regenerated with the
collection's release assets.
The test's premise was stale, not the profile: openmsx.yml now writes
share/systemroms below openMSX's user folder, the file pool's first
place, and each platform's binding moves it. The test keeps guarding
the same thing: every entry under share/systemroms, and on RetroBat,
which sets OPENMSX_HOME to bios/openmsx, placed in the
openMSX/share/systemroms folder its own list declares.
AHashScanLabelNamesNoOtherDump read openmsx-libretro's rs232.rom as
fmsx's name for another dump: share/extensions/rs232.xml:18-22 names
it, so it joins CODE_NAMED. test_standalone_links called unittest.main()
before the amiberry classes, which a direct run skipped.
Since the groups model, load_emulator_profiles marks every member of a
required set required, and the page counted each one: DuckStation,
which needs one BIOS of the game's region among the 105 images of its
ps-bios set, read "105 required, 0 optional". The site counts a
required set once and says one file fills it, and a set whose members
the code picks by region reads as one choice. The tests were not keyed
by a count but by the profile's name, through raw YAML that no longer
carries the derived requirement: they now read the profile as the site
does, take the count from the set, and keep their guard against a
get-all-of-them reading. Fourteen other profiles with required sets
(kronos, pom2, picodrive...) were overcounted the same way.
Phase 0 files snk-neogeo-pocket and neo-geo-pocket-color under snk-ngp and snk-ngpc. The No-Intro catalogs, their importer map and the campaign list now use those ids, the games index is regenerated, and the site's name table drops the eleven entries the new aliases leave unread.
2048 and gong (game), radio and video_processor (utility) and the test
cores (test) are libretro builds, but their role sat in type:, which
resolve_platform_cores filters on: all_libretro left them out, so no
platform resolved them and RetroArch's manifest named none, the
--installed-cores gap of issue 87. The role moves to role:, and type
stays libretro: type keeps saying how a profile is built and run, which
the resolver reads, while teaching the resolver that three role values
mean libretro would make type a classification again. The site and
coverage leave test cores out by role. fluidsynth, a library and no
libretro core, keeps type utility. A test keeps every buildbot core
named by RetroArch's resolution.
The 8.5.0 source builds a standalone Amiberry and the libretro core, so
the profile is standalone + libretro again. A standalone name a build the
platform compiles itself answers to keeps meaning that build: RetroBat's
standalone amiberry is 8.3.0, and 8.5.0 runs there as the core only.
Batocera's x86_64 RetroArch downloads the amiberry, cemu and xemu cores
although the image builds standalone emulators of those names. They now
stay in installable_cores, run both ways, and reach only the boards whose
downloader offers them.
EmuELEC v4.8 ships no RigelEngine: rigelengine is a dependency of
emuelec-ports, which no package, options file or Makefile of an image
pulls in. The guard now reads advanced_drastic, which KNULLI alone
ships, and still refuses a bump until the profile says why its pin
moves.
installable_cores removed every buildbot name the image builds, so a
libretro core sharing its name with a standalone package was lost:
Batocera runs amiberry standalone and its x86_64 boards fetch
amiberry_libretro. A name now compares within its build mode, and the
resolver and the layouts treat such a core as the emulator's libretro
build, run both ways. Batocera gains amiberry, azahar, cannonball, cemu,
dosbox, ecwolf, eduke32, fsuae, openmsx, rpcs3, supermodel, vita3k, xemu
and ymir as installable, KNULLI cannonball.
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.
A platform that builds Amiberry itself runs that revision under the name,
on every board it builds: RetroPie 5.7.2 and 6.3.3, Recalbox 8.2.2,
Batocera 7.1.1-332, KNULLI 7.1.1. The 8.5.0 profile is the buildbot
libretro core. It now names the ROM table's own file names and hashes
the keyboard MCU images.
KNULLI's RetroArch is Batocera's build with its core downloader on.
Its armv7 hard-float boards (atm7039, r16, rk3128) fetch from buildbot
linux/armhf: atm7039's shipped retroarch.cfg hides the menu entry but
leaves the URL, and Settings offers the entry back. Its aarch64 boards
get no buildbot URL. ecwolf, squirreljme, stella2014 and vemulator come
back as installable cores, and openmsx, which no buildbot list carries,
stays out.
Batocera builds RetroArch with its core downloader (configure defaults,
qb/config.params.sh:149-150), shown in the menu since it is no Lakka
build (config.def.h:743-745), and configgen sets no URL, so the compiled
one applies: buildbot linux/x86_64 or linux/armhf, none on aarch64
(config.def.h:1855-1861). The targets scraper names that list per board
(downloads, an armv7-A CPU read from arch/Config.in.arm), the builder
and the published target lists add it, and the platform names the union
as installable_cores. applewin, gong, squirreljme and vemulator come
back that way. A build option that compiles the downloader out, or a
shipped retroarch.cfg that blanks its URL, turns it off.
ROCKNIX listed retroarch, which stood for every libretro profile (351
resolved), while its devices build 124 libretro packages. The platform
list now names the cores those packages install on at least one device.
The targets scraper read a package's name as its core: vice-lr installs
vice_x128, vice_x64, vice_xpet, vice_xplus4 and vice_xvic, which reached
no device. It now reads each package's makeinstall_target, the file
copied to ${INSTALL}/usr/lib/libretro under its target name, through
TARGET_ARCH and ENABLE_32BIT (pcsx_rearmed-lr, desmume-lr). 155
profiles resolve, each built by a device, and no device loses one.
The 29 port engines depend on emuelec-ports, which no package of a
released image depends on, and flycast-dojo is in no device list: the
targets scraper already says so (UNBUILT). The platform list and the
launcher records now hold what at least one device image carries. Each
system keeps the list es_systems.json gives it, which says whose files
its entries ask for: VVVVVV's data.zip is still never served xrick's.
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.
A long checkout path wraps "BIOS folder:" after the label, and the
test joined the lines without the space it dropped. It now compares
without spaces, which holds for either wrap point.
EmuELEC 4.8 builds amiberry 452783a (CMakeLists.txt declares 8.0.0).
Same paths as 7.1.1, a ROM database with the PPC flash images, which
the scan hashes with their config bytes cleared, so no file hash is
declared for them. Tests check that ROCKNIX, AmberELEC and EmuELEC
resolve their own build, the other platforms the 8.5.0 profile, and
that ROCKNIX places its kickstarts at the BIOS root.
ROCKNIX builds amiberry 5c54536 (target.h declares 5.6.5). Every file
it reads lies below its start path, the working directory: the ROM
database dumps, aros-ext.bin, aros-rom.bin and rom.key in kickstarts/,
the WHDLoad booter files in whdboot/. Profiled from that revision,
pin_frozen with pin_build on ROCKNIX's package.mk.
The ROCKNIX scraper records the folder its start script enters and the
kickstarts link it carries there by copying /usr/config/amiberry, so
<cwd>/kickstarts binds to the BIOS root. A standalone + libretro profile
under a name the platform's own build answers to no longer resolves
there: ROCKNIX's amiberry is 5.6.5, not 8.5.0.
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.
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/.