The PlayStation section opened on psxonpsp660.bin under 'every
region': since sets carry the requirement, ARMSX1's region-free member
of its required BIOS set counts as required, and the world line came
first, above the scph files most emulators read, and its card first.
A file read for every region is a stand-in for each region's BIOS, so
that line now follows the territories.
The Apple II start now leads on BizHawk's and Mednafen's files, a tie
of two readers with CLK's and POM2's apple2e.rom. The test named that
one file. It now checks that every start file is a link, its intent.
The parity test cut each MISSING line at the first space. openMSX's
ROM names hold spaces (Japanese MSX-Write (1986) (Ascii) (J).rom), so
the msx pack's list read 'Japanese' where verify named the file. Both
sides now name the same 81 files.
The amiberry profiles written today name the A2000 keyboard MCU ROM
by the hashes amiberry's ROM table gives (crc32 c23d280e, sha1
b5c4b8c3, rommgr.cpp:141-142), and openmsx-libretro names
nms8245_disk.rom by the two sha1 openMSX's machine file accepts. The
collection holds neither: its D8039HLC.rom is crc32 fb92a773 and its
nms8245_disk.rom is sha1 c3f3ca45. Both are real gaps, recorded with
their reason.
ROCKNIX's folder rows naming yabadabadoo now resolve to its profile,
since the platform lists the libretro cores it installs and yabadabadoo
is a build it makes. The reason recorded for it outlived its row.
Batocera and KNULLI now resolve the dinothawr core, and Batocera the
dirksimple core, as cores their RetroArch downloads from the buildbot.
Neither image builds them, so nothing installs the trees they read:
the two entries name those platforms.
A release asset absent from the checkout is omitted from the install
list. That omission named only the first core reading it: harm1.wad,
action2.wad and delaweare.wad named gzdoom, so install.py --target
rpi1, where lzdoom runs, kept nothing the builder's list for rpi1
omits. The omission now names the cores of the claims folded onto the
entry too.
test_install loads its own install module. Its free-space test ran
main() in process without naming the OS, so on a WSL host main()
entered WSL mode and left _WSL active in that module, for the rest of
the process. Any test of the module run after it, as when the module
is named twice on one command line, read D:\bios as /mnt/d/bios. The
test now runs as Linux and restores _WSL on exit.
Upstream added 19 build profiles to src/pin.json, 252 from 3020 to
8023 on the same nine engines, and moved the core version to 0.1.85.
The two changed citations, pin.json:1-20 and obor_engines.h:6-7, still
name the version lines, read at b3557f6, which prose_written_at
records. The diff renames the core options to anybor_* and adds no
file read: the system directory still gives only AnyBOR.ini to the
packed and ZIP preparation. Five citations in libretro.cpp shift by
five lines.
Every error outside mypy-baseline.txt is fixed in the code:
- common.py: the CRC32 step reused found, the name the layout branch
gives a resolution tuple, for its list of matches. It now has its own
name. bindings_of annotates its systems.
- launchers.py, retropie_launchers.py, install.py: an Optional value
read before its None check.
- recalbox_launchers.py, rocknix_launchers.py: Launcher calls take
typed keywords, a partial or named parameters, instead of a
dict[str, object] spread. end_lineno falls back to lineno.
- retrobat_launchers.py: the StageRomKey match no longer reuses the
str key, and record values are checked before they are iterated.
- batocera_launchers.py: the value of an assignment is read on an
Assign or AnnAssign only, and the launcher list is annotated.
- emuelec_launchers.py, emuelec_scraper.py, rocknix_scraper.py: import
fallbacks no importer reaches are dropped, a reused name renamed.
- batocera_targets_scraper.py: a submodule answer without a commit is
refused.
The baseline loses the 30 entries these fixes resolved and gains
none.
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.
KNULLI's system pages linked /emulators/test/ from the cores examined for an entry: the test core resolves as a downloadable core and has no page, which failed the site's link check. Cores examined now link only the profiles the site writes a page for.
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 profile field table lacked the two top-level fields the schema
gained: groups, the sets whose requirement members take, and
standalone_pools, the search lists of directories a standalone build
reads. Their rows follow the schema's descriptions.
DuckStation's scph5501.bin carries group: ps-bios since required moved
onto the set, and Yabause's saturn_bios.bin is required only through
its group. The required HLE example is now QUASI88's n88.rom, an entry
that is required and carries hle_fallback itself.
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.
Online pipeline at 169776790, generated twice with identical output: database, recipes, install manifests and games index, native exports, README, installer and report excerpts.
main/Pak6.pk3 now goes to the demo disc's empty placeholder, listed
with the demo entries, so the pack carries Pak0 to Pak7 as the
Allied Assault single-player demo 0.05 installs them. The 1.11 patch
Pak6.pk3 stays a named and collected retail entry, not chosen: the
retail Pak0 to Pak5 are not held, and no release shipped the demo
with it.
The seven pk3 files under main/.variants/ are the Medal of Honor:
Allied Assault single-player demo 0.05, extracted from the December
2001 demo disc (archive.org ea-mohaa-sp-demo, EA_MOHAA_SP_Demo.iso,
sha1 4cba6697): Pak0 to Pak5, and Pak6 and Pak7, two identical empty
placeholders. OpenMoHAA reads the demo from main/ like the full game
(common.c:3168-3182) and mounts every .pk3 there (files.cpp:3136).
Each demo pak is now an entry with its hashes, listed before the
retail entry of its slot, so Pak0 to Pak5 resolve. The 1.11 patch
Pak6.pk3 keeps its slot. The retail entries keep unsourceable, now
naming the retail release as what the collection lacks.
Npcap's installer provides wpcap.dll on the DLL search path; xemu loads it with LoadLibrary and nothing reads the BIOS folder copy, which no entry reaches since a8af82c2d.
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.
The ZIP replay in packextras.hidden_extras now skips roms, emulators and configs entries as the builder does, so verify and pack integrity stop counting files only the installer places. The consistency check treats the Android .nomedia marker as a pack note. MAME4droid's hiscore.dat leaves bios/: the app unpacks it from its own files.zip. VVVVVV's Make and Play data.zip is collected as a release asset, which EmuELEC declares as required.
No platform or profile files a system under neo-geo-pocket-color since profiles name it snk-ngpc: its SYSTEM_PARENTS entry pointed at an id without a name.
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.
The record was stale, not the test: today's pins (fheroes2 at 6c51acf,
the openmsx and linuxloader ports, the dropped EmuELEC pin_build trees
and other sessions' advances) left 15 pinned trees unrecorded and one
recorded tree pinned by nothing. Written by sitesources.py --fetch: 683
trees held, 26 not cached (gitlab.com rate limits, yuzu's mirror
answering HTTP 451).
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.
The page lists FinalBurn Neo among the Spectrum readers now that its files sit under sinclair-zx-spectrum, two words over the ceiling RomM keeps from before its rows were tables.
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.
The EmuELEC paragraph cited version.txt:1, a line that moved from
1.0.11 to 1.1.18 under the same text. version_basis already says where
the version is read, and profile_sync now reads the profile clean.
At 6c51acf the engine also looks in the user config and data folders,
reads resurrection.h2d only in H2D format 3 holding the 68 files it
carries (h2d.cpp:107-145, h2d_file.cpp:39-88), and plays MIDI music with
the sound fonts of files/soundfonts and files/timidity/timidity.cfg. The
pinned 1.0.11 container, format 0 with 7 files, stops the start: the
entry now names the engine's own file. The sound font, the timidity
configuration and instruments and the translations join the profile,
all shipped with the engine. Refs re-read at the new pin, version
read from version.txt.
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.
Their pin_frozen said EmuELEC alone ships them, but they are port
engines of emuelec-ports, which no package, options file or Makefile of
a v4.8 image pulls in: no platform ships either. pin_frozen and
pin_build go, the notes say which revision EmuELEC's tree builds, and
the normal pin rules apply.
An installable core joined the platform's names, so the standalone
profile under the same name was designated too: Batocera, which can
download the linuxloader core and runs no standalone Linux Loader,
resolved both. A downloadable core now designates libretro profiles
only, as all_libretro reads them.