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:
{
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.
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;

View file

@ -148,6 +148,15 @@ private:
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
{
u8 bits;