try_use_bios skips a listed file that is not 512 KB (frontend/libretro.c:3632) and one without the kernel's first instruction or "PS compatible" at 0x12c (3646-3651). validation: [size, signature] on the seven listed names. Closes the four open pcsx_rearmed findings.
The region BIOS option names scph5500/5501/5502.bin by default and LoadImageFromFile checks only the size (host_interface.cpp:124-133, bios.cpp:82-105). The md5 table serves the directory scan and the Fast Boot patch. validation: [size], found_by: name. Closes the open swanstation finding.
firmware_is_present logs a SHA1 that differs and returns true (libretro.c:853-860), the override path does the same (744-756). on_mismatch: warn on every hashed entry. Closes the two open beetle_psx findings.
Beetle PSX, Beetle PSX HW and SwanStation rerun under the oracle with the Japanese BIOS menu as an error screen: a Japanese BIOS under a US disc is now a BIOS error.
Reference runs, then the full set, no BIOS and negative variants of Bust-A-Move 2 (USA) on Beetle PSX, Beetle PSX HW, SwanStation, PCSX-ReARMed and PCSX1, each judged by the boot oracle.
First real pass of campaign.py: the libretro PlayStation profiles with an hle_fallback claim (beetle_psx through mednafen_psx and mednafen_psx_hw, pcsx_rearmed and swanstation nightlies, pcsx1 built from its pinned commit), each run on Bust-A-Move 2 - Arcade Edition (USA) with and without scph5501.bin, under bubblewrap. Every core reached the game without the BIOS.