The BIOS combo labelled each row with the file name, title and CRC, so one
dump in two folders (or a library folder that holds the system folder) gave
rows with identical text. Identical text is an identical ImGui ID, so a click
on the second copy selected the first one's path. Rows are now built by
bios::picksFor (testable without a GPU): one row per file on disk, a repeated
label gets its folder appended, and every row is drawn inside a PushID of its
path. A stored choice is matched by file identity, not by string. The cheat
set picker had the same shape (a set can be both a match and a similar name)
and gets a PushID per list.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The desktop app can now choose the exact boot ROM / CD BIOS file the core runs,
boot a BIOS on its own and import a BIOS file.
Root causes (maintainer report: BIOS import/scanning and booting the BIOS for CD
is broken; Auto does not allow booting a local file):
- biosUse() compared names and folders case-sensitively while classifyBios() does
not, so JAGCD.BIN / ATARI - JAGUAR CD/ were labelled 'rename it' on volumes
where the core finds them.
- A BIOS dropped on the window was run as a cartridge; the only BIOS action was a
copy under a fixed name, which a cart boot ROM ignores unless Cart BIOS Type =
Custom and BIOS (Cartridges) = Real.
- CD Boot Mode / BIOS options were reachable only through the generic Core options
tab, which is empty before a load and hides the CD options while a cartridge
runs (update_option_visibility); no-content boot could only enter the CD BIOS.
Adds bios.h/.cpp and bios_ui.cpp (Settings > BIOS, the top of the BIOS & system
tab, tile menu: Use / Boot / Copy), CoreHost support for the new private calls,
config keys bios.cart / bios.cd, drop and dialog import into system/bios/, File >
Boot BIOS, and --boot-bios / --cart-bios / --cd-bios / --expect-bios (headless
BIOS-only boots). Tests: bios_unit, bios_e2e, smoke_boot_cd_bios,
smoke_boot_cart_rom.
Refs #838 Refs #833
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>