CDROM: Header valid/playing should not be set on SeekL

Fixes Syphon Filter locking up on boot.
This commit is contained in:
Connor McLaughlin 2019-11-23 19:13:48 +10:00
parent 9da4e642af
commit 5d0a6f88ad
2 changed files with 5 additions and 6 deletions

View file

@ -1125,7 +1125,7 @@ void CDROM::DoSeekComplete()
seek_okay &= m_media->Seek(m_media->GetPositionOnDisc() - 1);
if (seek_okay)
{
ProcessDataSectorHeader(raw_sector);
ProcessDataSectorHeader(raw_sector, false);
// ensure the location matches up (it should)
const auto [seek_mm, seek_ss, seek_ff] = m_seek_position.ToBCD();
@ -1280,18 +1280,17 @@ void CDROM::DoSectorRead()
m_system->SetDowncount(m_drive_remaining_ticks);
}
void CDROM::ProcessDataSectorHeader(const u8* raw_sector)
void CDROM::ProcessDataSectorHeader(const u8* raw_sector, bool set_valid)
{
std::memcpy(&m_last_sector_header, &raw_sector[SECTOR_SYNC_SIZE], sizeof(m_last_sector_header));
std::memcpy(&m_last_sector_subheader, &raw_sector[SECTOR_SYNC_SIZE + sizeof(m_last_sector_header)],
sizeof(m_last_sector_subheader));
m_secondary_status.header_valid = true;
m_secondary_status.header_valid |= set_valid;
}
void CDROM::ProcessDataSector(const u8* raw_sector, const CDImage::SubChannelQ& subq)
{
ProcessDataSectorHeader(raw_sector);
ProcessDataSectorHeader(raw_sector, true);
Log_DevPrintf("Read sector %u: mode %u submode 0x%02X", m_media->GetPositionOnDisc() - 1,
ZeroExtend32(m_last_sector_header.sector_mode), ZeroExtend32(m_last_sector_subheader.submode.bits));

View file

@ -206,7 +206,7 @@ private:
void DoIDRead();
void DoTOCRead();
void DoSectorRead();
void ProcessDataSectorHeader(const u8* raw_sector);
void ProcessDataSectorHeader(const u8* raw_sector, bool set_valid);
void ProcessDataSector(const u8* raw_sector, const CDImage::SubChannelQ& subq);
void ProcessXAADPCMSector(const u8* raw_sector, const CDImage::SubChannelQ& subq);
void ProcessCDDASector(const u8* raw_sector, const CDImage::SubChannelQ& subq);