CDROM: Hack to set subq position before seek instead of after
I assume this should be set throughout the seek to the current disc position, but since we're only updating at the end of the seek, this'll do. Fixes music looping in Spyro.
This commit is contained in:
parent
6da9e23d3b
commit
a3f2286bdb
|
@ -1089,6 +1089,12 @@ void CDROM::BeginSeeking(bool logical, bool read_after_seek, bool play_after_see
|
||||||
m_drive_state = logical ? DriveState::SeekingLogical : DriveState::SeekingPhysical;
|
m_drive_state = logical ? DriveState::SeekingLogical : DriveState::SeekingPhysical;
|
||||||
m_drive_remaining_ticks = seek_time;
|
m_drive_remaining_ticks = seek_time;
|
||||||
m_system->SetDowncount(m_drive_remaining_ticks);
|
m_system->SetDowncount(m_drive_remaining_ticks);
|
||||||
|
|
||||||
|
// Read sub-q early.. this is because we're not reading sectors while seeking.
|
||||||
|
// Fixes music looping in Spyro.
|
||||||
|
CDImage::SubChannelQ subq;
|
||||||
|
if (m_media->Seek(m_seek_position) && m_media->ReadSubChannelQ(&subq))
|
||||||
|
m_last_subq = subq;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CDROM::DoSpinUpComplete()
|
void CDROM::DoSpinUpComplete()
|
||||||
|
@ -1111,12 +1117,11 @@ void CDROM::DoSeekComplete()
|
||||||
|
|
||||||
// seek and update sub-q for ReadP command
|
// seek and update sub-q for ReadP command
|
||||||
// TODO: Check SubQ checksum
|
// TODO: Check SubQ checksum
|
||||||
CDImage::SubChannelQ subq;
|
const auto [seek_mm, seek_ss, seek_ff] = m_seek_position.ToBCD();
|
||||||
bool seek_okay = (m_media && m_media->Seek(m_seek_position) && m_media->ReadSubChannelQ(&subq));
|
bool seek_okay = (m_last_subq.absolute_minute_bcd == seek_mm && m_last_subq.absolute_second_bcd == seek_ss &&
|
||||||
|
m_last_subq.absolute_frame_bcd == seek_ff);
|
||||||
if (seek_okay)
|
if (seek_okay)
|
||||||
{
|
{
|
||||||
m_last_subq = subq;
|
|
||||||
|
|
||||||
// check for data header for logical seeks
|
// check for data header for logical seeks
|
||||||
if (logical)
|
if (logical)
|
||||||
{
|
{
|
||||||
|
@ -1128,7 +1133,6 @@ void CDROM::DoSeekComplete()
|
||||||
ProcessDataSectorHeader(raw_sector, false);
|
ProcessDataSectorHeader(raw_sector, false);
|
||||||
|
|
||||||
// ensure the location matches up (it should)
|
// ensure the location matches up (it should)
|
||||||
const auto [seek_mm, seek_ss, seek_ff] = m_seek_position.ToBCD();
|
|
||||||
seek_okay = (m_last_sector_header.minute == seek_mm && m_last_sector_header.second == seek_ss &&
|
seek_okay = (m_last_sector_header.minute == seek_mm && m_last_sector_header.second == seek_ss &&
|
||||||
m_last_sector_header.frame == seek_ff);
|
m_last_sector_header.frame == seek_ff);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue