Commit Graph
3 Commits
Author SHA1 Message Date
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 19cfd8132b feat: profile five new buildbot cores
parallel_dc (libretro/flycast renamed), hyperscanemu, hypseushw, n64emu
and odin reached the RetroArch buildbot after the last targets scrape and
resolved to no profile. Targets rescraped, each core profiled from its
source.
2026-11-09 06:52:44 +01:00