mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-26 02:11:36 -04:00
fdfad8f567
Root cause of the "black screen on a .cue that works as a .bin" reports. cdrom_init() calls iso_open() and, on failure, simply leaves the drive empty (stat_reg = CDSTAT_SHELL). That is correct for a BIOS-only target, which runs with no disc on purpose -- but when a game was GIVEN a disc path and the image does not mount, the game boots against an empty drive and renders nothing. No error, no log, just black. The earlier validate_disc_for_launch() pass cannot catch this, because the two sides read the disc differently: identify_disc() opens the data-track FILE directly, so it reported a green "Disc verified" badge for cues that the MOUNTING reader then rejected. Verified-but-unmountable was a silent state. Demonstrated against the pre-fix reader (a8aa640) on one cue: lowercase/unquoted cue -> FAILS (empty drive -> black screen) canonical cue -> MOUNTS bare .bin -> MOUNTS <- why picking the .bin "fixed" it So the symptom was never about cue-vs-bin semantics; it was cue PARSING strictness. The old mount-side parser required the literal uppercase "BINARY" and a quoted filename, while the verify side uppercased the line first. The shared cue parser landed in68667cdalready fixes that class (case-insensitive keywords, unquoted names, CRLF, case-insensitive payload lookup), which is why all four titles now boot from either file. This commit closes the remaining hole -- any OTHER reason a mount fails must not present as a black screen: - cdrom_has_disc() exposes the drive state (has_disc() was file-static, so no caller could tell a successful mount from an empty drive). - main() checks it right after cdrom_init() and, when a disc path was supplied but nothing mounted, reports what was selected, what it was mounted as, the resolver's note, and that the .bin can be selected directly -- then exits instead of booting into black. Also pins the regression: the lowercase/unquoted cue must MOUNT, not merely parse, so the verify side and the mount side can never silently disagree again. test_disc_path_resolve: 36 -> 38 checks. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>