CDROM: Deliver invalid sub-q (libcrypted) sectors to CPU
Nocash documentation would suggest that it only needs the sector to be skipped by GetLocP. Which would make sense as the non-subchannel data is still completely valid.
This commit is contained in:
parent
6d55979dac
commit
a4a112f5d8
|
@ -1487,30 +1487,30 @@ void CDROM::DoSectorRead()
|
||||||
if (subq.IsCRCValid())
|
if (subq.IsCRCValid())
|
||||||
{
|
{
|
||||||
m_last_subq = subq;
|
m_last_subq = subq;
|
||||||
|
|
||||||
if (is_data_sector && m_drive_state == DriveState::Reading)
|
|
||||||
{
|
|
||||||
ProcessDataSector(m_reader.GetSectorBuffer().data(), subq);
|
|
||||||
}
|
|
||||||
else if (!is_data_sector && m_drive_state == DriveState::Playing)
|
|
||||||
{
|
|
||||||
ProcessCDDASector(m_reader.GetSectorBuffer().data(), subq);
|
|
||||||
}
|
|
||||||
else if (m_drive_state != DriveState::Reading && m_drive_state != DriveState::Playing)
|
|
||||||
{
|
|
||||||
Panic("Not reading or playing");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Log_WarningPrintf("Skipping sector %u as it is a %s sector and we're not %s", m_reader.GetLastReadSector(),
|
|
||||||
is_data_sector ? "data" : "audio", is_data_sector ? "reading" : "playing");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const CDImage::Position pos(CDImage::Position::FromLBA(m_reader.GetLastReadSector()));
|
const CDImage::Position pos(CDImage::Position::FromLBA(m_reader.GetLastReadSector()));
|
||||||
Log_DevPrintf("Skipping sector %u [%02u:%02u:%02u] due to invalid subchannel Q", m_reader.GetLastReadSector(),
|
Log_DevPrintf("Sector %u [%02u:%02u:%02u] has invalid subchannel Q", m_reader.GetLastReadSector(), pos.minute,
|
||||||
pos.minute, pos.second, pos.frame);
|
pos.second, pos.frame);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_data_sector && m_drive_state == DriveState::Reading)
|
||||||
|
{
|
||||||
|
ProcessDataSector(m_reader.GetSectorBuffer().data(), subq);
|
||||||
|
}
|
||||||
|
else if (!is_data_sector && m_drive_state == DriveState::Playing)
|
||||||
|
{
|
||||||
|
ProcessCDDASector(m_reader.GetSectorBuffer().data(), subq);
|
||||||
|
}
|
||||||
|
else if (m_drive_state != DriveState::Reading && m_drive_state != DriveState::Playing)
|
||||||
|
{
|
||||||
|
Panic("Not reading or playing");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log_WarningPrintf("Skipping sector %u as it is a %s sector and we're not %s", m_reader.GetLastReadSector(),
|
||||||
|
is_data_sector ? "data" : "audio", is_data_sector ? "reading" : "playing");
|
||||||
}
|
}
|
||||||
|
|
||||||
m_last_requested_sector++;
|
m_last_requested_sector++;
|
||||||
|
|
Loading…
Reference in New Issue