mirror of https://github.com/PCSX2/pcsx2.git
cdvdgigaherz: Detect CD track mode correctly
In every CD data sector, byte 15 indicates what the CD track mode is.
This commit is contained in:
parent
eb796a13ce
commit
0a4ff90bfb
|
@ -16,6 +16,7 @@
|
||||||
#include "CDVD.h"
|
#include "CDVD.h"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <array>
|
||||||
|
|
||||||
void cdvdParseTOC()
|
void cdvdParseTOC()
|
||||||
{
|
{
|
||||||
|
@ -45,10 +46,17 @@ void cdvdParseTOC()
|
||||||
strack = std::min(strack, entry.track);
|
strack = std::min(strack, entry.track);
|
||||||
etrack = std::max(etrack, entry.track);
|
etrack = std::max(etrack, entry.track);
|
||||||
tracks[entry.track].start_lba = entry.lba;
|
tracks[entry.track].start_lba = entry.lba;
|
||||||
if (!(entry.control & 0x04))
|
if ((entry.control & 0x0C) == 0x04) {
|
||||||
|
std::array<u8, 2352> buffer;
|
||||||
|
// Byte 15 of a raw CD data sector determines the track mode
|
||||||
|
if (src->ReadSectors2352(entry.lba, 1, buffer.data()) && (buffer[15] & 3) == 2) {
|
||||||
|
tracks[entry.track].type = CDVD_MODE2_TRACK;
|
||||||
|
} else {
|
||||||
|
tracks[entry.track].type = CDVD_MODE1_TRACK;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
tracks[entry.track].type = CDVD_AUDIO_TRACK;
|
tracks[entry.track].type = CDVD_AUDIO_TRACK;
|
||||||
else
|
}
|
||||||
tracks[entry.track].type = CDVD_MODE1_TRACK;
|
|
||||||
fprintf(stderr, "Track %u start sector: %u\n", entry.track, entry.lba);
|
fprintf(stderr, "Track %u start sector: %u\n", entry.track, entry.lba);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue