Commit Graph
4837 Commits
Author SHA1 Message Date
Abdessamad Derraz 58735286a7 feat: let an archive join a set
Kronos reads kronos/stvbios.zip, else stvbios.zip at the root of the
system directory, and a ST-V game stops without either
(libretro.c:1608-1617, 1676-1681 at the pin). The archive under
archive_prefix and the root copy are one need, but only loose entries
could be members, so the required-only pack carried both.

An archive's own entry now joins a set like a loose file. verify
--emulator and the emulator pack settle archive units with the loose
entries, the required-only pick covers them, find_undeclared_files
and cross_reference record them, and the unit under archive_prefix
ranks before the same name at the root. Its members still settle the
archive by their contents. Kronos' stvbios.zip is grouped stv-bios.

No other profile reads one archive under two paths: odin and
tgpulse_next_m1 place their own entries at the prefix path, and
flycast's naomi.zip has one path per build.
2026-11-09 18:26:05 +01:00
Abdessamad Derraz ee98949d2c fix: profile the zip and hog probes at the pin
Read while walking the profile checklist on the grouped profiles.

- picodrive: find_bios tries each stem as .bin then as .zip
  (platform/libretro/libretro.c:1316-1326), and pm_open reads the
  first entry of at least 32 KB or with a ROM extension
  (pico/cart.c:122-158). The twelve .zip names join their region's
  set, ranked right after the .bin of the same stem.
- dxx-rebirth: the HOG entries cite the mount and the error that stops
  the game without one (similar/main/inferno.cpp:472, 476, 500-512).
2026-11-09 18:19:47 +01:00
Abdessamad Derraz 315dab82b7 feat: give each set its requirement and one pick
Three changes to the search-list model, one commit because the readers
and the profiles must move together for the schema to hold.

Set requirement in a groups map. pom2 falls back on apple2.rom for the
][ and the ][+, and on apple2e.rom for the //e it boots and for the
unenhanced //e: one required on the file could not say both. A profile
now declares groups: {name: {required}}, a member writes no required
of its own (schema and validate_schemas refuse one) and load_emulator_
profiles derives it, true when one of its sets is. group takes a name,
a list, or a map from set to rank where the rank differs per set. pom2
is grouped from SystemProfile.cpp and MainWindow.cpp:246-296 at its pin.

One member per required set under --required-only. The pick is the
first the code reads among the held members the region filter leaves,
by rank then declaration order; a set the platform declares a member
of is carried by that declaration. The emulator pack, verify
--emulator, the platform pack, its manifest and verify --platform read
alternatives.required_only_spares or core_file_spares.

variant_group is now selection_slot: files a core chooses between by
a rule other than first found (disc territory for PicoDrive and
Pizza Boy SC, the o2em_bios option, a WebAssembly probe in SWF
Player). Where the code takes any one, the field became a group:
ARMSX1 (ArmSxBackend.java:149-157, name order), ePSXe (load_bios
0x433540-0x433621 of the 2.0.5 Linux x64 binary, one configured path,
HLE when BiosHLE is set), FPse and FPse-NG, DXX-Rebirth's HOGs
(inferno.cpp:472-512). odin and zesarux carried it with no effect.
slot.py compares ranks only between candidates that share a set.
2026-11-09 18:19:32 +01:00
Abdessamad Derraz 1e12d9fe38 feat: group the first-found BIOS lists
Each list read at the profile's pin, every member required: true where
the code needs one of the set, the order left in priority.

- yabause, yabasanshiro, kronos: libretro.c tries saturn_bios.bin,
  sega_101.bin, mpr-17933.bin (yabause 1035-1049, yabasanshiro
  1048-1071, kronos 1619-1638 after kronos/saturn_bios.bin). kronos
  also reads saturn_bios.bin at the system root, now its own entry.
  yabasanshiro refuses the game with no file even under forced HLE
  (1064-1071), so its hle_fallback is gone.
- yabadabadoo: bios_for_region (libretro.c:262-284) takes any of the
  three in an order the disc region picks. One group, no priority:
  region keeps that order, no single rank would be true.
- ymir libretro: kBiosFilenames (libretro.cpp:305-309), region first,
  else the first found, no game without one (1231-1236).
- duckstation: FindBIOSImageInDirectory (bios.cpp:397-450) keeps any
  image of the right size, a region mismatch only warns: one set.
- picodrive: find_bios walks one list per disc region
  (libretro.c:1272-1336), three groups.
- px68k: BIOSFILE then cgrom.dat or cgrom.tmp (libretro.c:984-1032).
- px68k-sdl: BIOSFILE and FONTFILE lists (winx68k.cpp:277-331).
- numero: ti83se, ti83plus, ti83 (libretronew.cpp:575-594), no ROM
  leaves a blank screen.
- freechaf: sl90025 then sl31253, HLE without either
  (libretro.c:186-199), optional set.
- pcsx1: scph1001, scph5501, scph7001 then any scph* (libretro.c:1229),
  HLE without, optional set.
- odin: three boot ROMs inside hikaru.zip.
2026-11-09 17:40:00 +01:00
Abdessamad Derraz 2c76cc7df9 feat: read a search list as one need
A core that loads the first of several names (yabause: saturn_bios.bin,
sega_101.bin, mpr-17933.bin) needs one of them. Profiles wrote this as
required on the first name and optional on the others, so verify and
the gap report called saturn_bios.bin a missing required file while
sega_101.bin was held, and a set held only through a name marked
optional read as a need met by an optional file.

Model: an explicit group on the file entry, mirroring the platform
field. priority was not reused: it is a rank, read by slot.py, region.py
and truth.py inside a (system, region) slot, and that slot is not the
set. px68k-sdl ranks its IPL list and its font list each from 1 in one
system, pom2 ranks one list per machine model, DuckStation ranks 105
images across every region and takes any of them. A rank cannot say
where one list ends. priority stays the order inside a group.

Readers, through alternatives.settle_sets:
- verify --emulator and the emulator pack: a held member fills the
  set, the others leave the report, a set nobody holds is one gap
  under its first member naming the others.
- find_undeclared_files (verify platform, core complement of packs and
  manifests): same rule, a platform declaration or launcher counts as
  answering the set.
- cross_reference: excused members are set aside as other versions.
- slot.py: ranks compare members of one set only.
- archive members: a required set inside an archive is met by one.
- truth: a member gives no requirement of its own, one_of and
  one_of_required carry the set, and the exporters and the diff leave
  such a line's required as the platform wrote it.
- validate_schemas: members of a group share required.
2026-11-09 17:39:46 +01:00
Abdessamad Derraz a40f8416e1 chore: merge yabadabadoo profile 2026-11-09 17:14:16 +01:00
Abdessamad Derraz a1f1fd0bab feat: add yabadabadoo profile 2026-11-09 17:12:50 +01:00
Abdessamad Derraz 0a618d0a05 chore: merge batocera lexaloffle launcher 2026-11-09 17:06:33 +01:00
Abdessamad Derraz fed8bdddd8 feat: read the lexaloffle launcher for batocera
Batocera's lexaloffleGenerator runs bios/pico-8/pico8 and
bios/voxatron/vox, raises when the binary is missing or not
executable, and puts each folder on LD_LIBRARY_PATH. The new
extractor records both per system from the AST, with the lines
of batocera-43.1 that say it.
2026-11-09 17:06:09 +01:00
Abdessamad Derraz f04c2d7f7a feat: collect mame4droid hiscore.dat
plugins/hiscore/hiscore.dat from res/raw/files.zip at 32d78192, sha1 6f730abe (CRLF copy of MAME 0.289's file).
2026-11-09 17:04:29 +01:00
Abdessamad Derraz 8364c7f145 chore: rescrape rocknix and retropie targets
ROCKNIX at 20261101 (aethersx2 and freechaf gone), RetroPie gains fake08 on seven targets.
2026-11-09 17:03:53 +01:00
Abdessamad Derraz ca11e7c502 chore: merge platnotes-1 2026-11-09 17:01:32 +01:00
Abdessamad Derraz e77636c0b9 docs: list oricutron 8dos.rom
pravetz8drom takes roms/8dos as its other value (oricutron.cfg:44), read as <path>.rom, 512 bytes. Hashes of the 1.2 Windows archive copy.
2026-11-09 17:00:59 +01:00
Abdessamad Derraz 11e6b879d3 docs: splitwolf checks vgahead size, no hash 2026-11-09 17:00:14 +01:00
Abdessamad Derraz ecc10f1d1c chore: merge platnotes-3 2026-11-09 16:59:10 +01:00
Abdessamad Derraz 45c409966b chore: merge platnotes-2 2026-11-09 16:59:10 +01:00
Abdessamad Derraz 4303c52012 docs: cite mame4droid files.zip for hiscore.dat 2026-11-09 16:57:52 +01:00
Abdessamad Derraz e09d28c7c1 docs: rocknix dropped aethersx2 in 20261101 2026-11-09 16:56:58 +01:00
Abdessamad Derraz 63d94b9415 feat: collect splitwolf lwmp tree
lwmp.zip from the project's downloads (sha1 1145464c), 2308 files read by path. Equal files sit in one folder per rotation, so the tree is kept out of dedup.
2026-11-09 16:55:31 +01:00
Abdessamad Derraz 9a1f0346e1 docs: drop libretro aliases from blastem defaults 2026-11-09 16:55:16 +01:00
Abdessamad Derraz 32fefebc90 docs: read the xemu hdd name as a label 2026-11-09 16:55:04 +01:00
Abdessamad Derraz e31051f253 docs: triforce runs games without segaboot 2026-11-09 16:53:51 +01:00
Abdessamad Derraz 76314e0521 docs: read chihiro files beside their bios 2026-11-09 16:52:58 +01:00
Abdessamad Derraz ac4bb87714 docs: record retropie install of uqm addons 2026-11-09 16:52:06 +01:00
Abdessamad Derraz 18c9db12b0 docs: zesarux esxdos handler reads no firmware 2026-11-09 16:51:04 +01:00
Abdessamad Derraz 7013af615b docs: name the pcsx bios entry as a label 2026-11-09 16:49:38 +01:00
Abdessamad Derraz d37d8ff8cd docs: drop retrobat from the uzdoom.pk3 note 2026-11-09 16:49:19 +01:00
Abdessamad Derraz 7476579c35 docs: cite rpix86 binary offsets for 4dos 2026-11-09 16:48:43 +01:00
Abdessamad Derraz 334b1e4b7b docs: tie iortcw mp_bin0 to its pak checksum 2026-11-09 16:47:54 +01:00
Abdessamad Derraz e459ff2247 docs: describe ines CART.NES by its code only 2026-11-09 16:47:36 +01:00
Abdessamad Derraz f25247d7d5 docs: take groovymame hiscore.dat from its tree 2026-11-09 16:46:48 +01:00
Abdessamad Derraz 244bd11075 chore: merge origin/main 2026-11-09 16:46:40 +01:00
Abdessamad Derraz 4d8fa39493 docs: cite the dolphin gecko handler checks 2026-11-09 16:46:18 +01:00
Abdessamad Derraz 4ae7576116 docs: read dsperate bios names as labels 2026-11-09 16:45:43 +01:00
Abdessamad Derraz 9449cab7ab docs: say how darkplaces mounts dopa 2026-11-09 16:44:44 +01:00
Abdessamad Derraz 464c8501d1 docs: tie ppsspp atlas hashes to the tree 2026-11-09 16:44:31 +01:00
Abdessamad Derraz 4140fbe72c docs: cite trx 1.12 zips for the tr1 demo 2026-11-09 16:43:56 +01:00
Abdessamad Derraz 90a1244b89 docs: cite the linapple install for its data 2026-11-09 16:43:54 +01:00
Abdessamad Derraz ad66fa6ed1 docs: say where lzdoom looks for fm banks 2026-11-09 16:43:03 +01:00
Abdessamad Derraz ca9a493c08 docs: cite scummvm build flags for vkeybd files 2026-11-09 16:42:37 +01:00
Abdessamad Derraz 9416816897 docs: cite the amiberry aros lookup and install 2026-11-09 16:42:24 +01:00
Abdessamad Derraz af014d50c9 docs: cite the eduke32 rts loader 2026-11-09 16:41:54 +01:00
Abdessamad Derraz 5f716b2cc7 docs: cite the chihiro-ds package for its files 2026-11-09 16:40:36 +01:00
Abdessamad Derraz 1dd40e1c66 docs: source oricutron hashes to its archives 2026-11-09 16:40:20 +01:00
Abdessamad Derraz 9610bad08d docs: list every file pico-8 and voxatron open
Traced runs of the 0.2.7 binaries, the raspi readme and the manual: settings, controller maps, favourites and the Voxatron cart list and player profile, all written by the program. Binary notes say what each build links.
2026-11-09 16:39:12 +01:00
Abdessamad Derraz 3761d17f0c docs: drop archive hashes from wolf4sdl data 2026-11-09 16:38:28 +01:00
Abdessamad Derraz c4006ae32f docs: mark splitwolf lwmp as a retropie install 2026-11-09 16:38:07 +01:00
Abdessamad Derraz 7f60480081 docs: read phoenix bios names as labels 2026-11-09 16:37:58 +01:00
Abdessamad Derraz 6c14468862 feat: say the installer and setup pages plainly
- The installer speaks without "you": the first screen asks "Where
  to install?", rows read "Copy the BIOS files from an old card or a
  folder", a close match reads "Close matches: ...". The handheld
  launchers and their port text follow, and the pronoun guard no
  longer lists any installer message.
- A setup that runs as an app opens on its one-line command, the
  folder table after it; a setup that runs on its own device keeps
  the network folder first, which its ZIP route needs.
- The home steps say what to do: "Its page gives one line to copy",
  "Paste it, press Enter".
2026-11-09 16:33:56 +01:00
Abdessamad Derraz 934dd4c0f9 docs: read voxatron files from its binaries
vox.dat is fatal when absent; libHoloPlayCore.so is never linked, named or opened by vox or vox_dyn, so it is optional.
2026-11-09 16:33:41 +01:00