CDROM: Pausing while seeking should be an error response

Confirmed by hardware test.
This commit is contained in:
Connor McLaughlin 2020-03-31 22:28:55 +10:00
parent 00c24c2501
commit f6711cbafa
2 changed files with 17 additions and 0 deletions

View file

@ -767,6 +767,14 @@ void CDROM::ExecuteCommand()
case Command::Pause: case Command::Pause:
{ {
if (m_secondary_status.seeking)
{
Log_WarningPrintf("CDROM Pause command while seeking - sending error response");
SendErrorResponse(STAT_ERROR, ERROR_NOT_READY);
EndCommand();
return;
}
// TODO: Should return an error if seeking. // TODO: Should return an error if seeking.
const bool was_reading = (m_drive_state == DriveState::Reading || m_drive_state == DriveState::Playing); const bool was_reading = (m_drive_state == DriveState::Reading || m_drive_state == DriveState::Playing);
const TickCount pause_time = was_reading ? (m_mode.double_speed ? 2000000 : 1000000) : 7000; const TickCount pause_time = was_reading ? (m_mode.double_speed ? 2000000 : 1000000) : 7000;

View file

@ -148,6 +148,15 @@ private:
STAT_PLAYING_CDDA = (1 << 7) STAT_PLAYING_CDDA = (1 << 7)
}; };
enum ErrorReason : u8
{
ERROR_INVALID_ARGUMENT = 0x10,
ERROR_INCORRECT_NUMBER_OF_PARAMETERS = 0x20,
ERROR_INVALID_COMMAND = 0x40,
ERROR_NOT_READY = 0x80
};
union SecondaryStatusRegister union SecondaryStatusRegister
{ {
u8 bits; u8 bits;