mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-26 10:19:47 -04:00
5a2c6fd3f0
The cue parser kept a single bin_filename that every FILE line overwrote, so a redump-style dump (one .bin per track) mounted only the LAST track file - the CD-DA audio bin - as the entire disc: no ISO9660 filesystem, no boot EXE, black screen at startup (reported against Tomba! 2, whose USA disc is data + one CD-DA track). Replace the single ifstream with a BinSegment table: one entry per FILE line, opened for the reader's lifetime and laid out at cumulative disc-relative sector offsets in cue order. ReadSector/ReadRawSector resolve a disc LBA to its owning segment; INDEX times, which a cue states relative to the owning file, are converted to disc-relative track starts once the segment layout is known. Single-file images are a one-segment table with unchanged addressing. Also fixed in passing: Open() never cleared tracks_ from a previous open (reopening a reader accumulated stale TOC entries), per-read sector-geometry probing is now computed once per segment, a cue whose FILE is missing or non-BINARY (WAVE/MP3) fails Open() instead of mis-mapping the TOC, and GetSectorCount() reports the whole-disc total. Verified: Tomba! 2 single-bin dump split at the track-2 boundary (concatenation SHA1-identical to the original); a host-side test opens both cues and confirms all 186430 sectors byte-identical and the TOC identical (track 2 at LBA 174674, audio); the game boots to intro FMV, title, and attract gameplay from the multi-file dump with CD audio flowing, and the single-file dump boots identically on the same binary. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>