CDROM: Simplify register indexing for write

This commit is contained in:
Connor McLaughlin 2020-03-19 00:28:41 +10:00
parent 1ee68ad12a
commit 3223f87eeb

View File

@ -233,23 +233,17 @@ u8 CDROM::ReadRegister(u32 offset)
case 3:
{
switch (m_status.index)
{
case 0:
case 2:
{
const u8 value = m_interrupt_enable_register | ~INTERRUPT_REGISTER_MASK;
Log_DebugPrintf("CDROM read interrupt enable register <- 0x%02X", ZeroExtend32(value));
return value;
}
case 1:
case 3:
if (m_status.index & 1)
{
const u8 value = m_interrupt_flag_register | ~INTERRUPT_REGISTER_MASK;
Log_DebugPrintf("CDROM read interrupt flag register <- 0x%02X", ZeroExtend32(value));
return value;
}
else
{
const u8 value = m_interrupt_enable_register | ~INTERRUPT_REGISTER_MASK;
Log_DebugPrintf("CDROM read interrupt enable register <- 0x%02X", ZeroExtend32(value));
return value;
}
}
break;
@ -263,19 +257,15 @@ u8 CDROM::ReadRegister(u32 offset)
void CDROM::WriteRegister(u32 offset, u8 value)
{
switch (offset)
{
case 0:
if (offset == 0)
{
Log_TracePrintf("CDROM status register <- 0x%02X", value);
m_status.bits = (m_status.bits & static_cast<u8>(~3)) | (value & u8(3));
return;
}
break;
case 1:
{
switch (m_status.index)
const u32 reg = (m_status.index * 3u) + (offset - 1);
switch (reg)
{
case 0:
{
@ -291,32 +281,6 @@ void CDROM::WriteRegister(u32 offset, u8 value)
}
case 1:
{
Log_ErrorPrintf("Sound map data out <- 0x%02X", value);
return;
}
case 2:
{
Log_ErrorPrintf("Sound map coding info <- 0x%02X", value);
return;
}
case 3:
{
Log_DebugPrintf("Audio volume for right-to-left output <- 0x%02X", value);
m_next_cd_audio_volume_matrix[1][0] = value;
return;
}
}
}
break;
case 2:
{
switch (m_status.index)
{
case 0:
{
if (m_param_fifo.IsFull())
{
@ -329,36 +293,7 @@ void CDROM::WriteRegister(u32 offset, u8 value)
return;
}
case 1:
{
Log_DebugPrintf("Interrupt enable register <- 0x%02X", value);
m_interrupt_enable_register = value & INTERRUPT_REGISTER_MASK;
UpdateInterruptRequest();
return;
}
case 2:
{
Log_DebugPrintf("Audio volume for left-to-left output <- 0x%02X", value);
m_next_cd_audio_volume_matrix[0][0] = value;
return;
}
case 3:
{
Log_DebugPrintf("Audio volume for right-to-left output <- 0x%02X", value);
m_next_cd_audio_volume_matrix[1][0] = value;
return;
}
}
}
break;
case 3:
{
switch (m_status.index)
{
case 0:
{
// TODO: sector buffer is not the data fifo
Log_DebugPrintf("Request register <- 0x%02X", value);
@ -378,7 +313,21 @@ void CDROM::WriteRegister(u32 offset, u8 value)
return;
}
case 1:
case 3:
{
Log_ErrorPrintf("Sound map data out <- 0x%02X", value);
return;
}
case 4:
{
Log_DebugPrintf("Interrupt enable register <- 0x%02X", value);
m_interrupt_enable_register = value & INTERRUPT_REGISTER_MASK;
UpdateInterruptRequest();
return;
}
case 5:
{
Log_DebugPrintf("Interrupt flag register <- 0x%02X", value);
m_interrupt_flag_register &= ~(value & INTERRUPT_REGISTER_MASK);
@ -400,14 +349,41 @@ void CDROM::WriteRegister(u32 offset, u8 value)
return;
}
case 2:
case 6:
{
Log_ErrorPrintf("Sound map coding info <- 0x%02X", value);
return;
}
case 7:
{
Log_DebugPrintf("Audio volume for left-to-left output <- 0x%02X", value);
m_next_cd_audio_volume_matrix[0][0] = value;
return;
}
case 8:
{
Log_DebugPrintf("Audio volume for left-to-right output <- 0x%02X", value);
m_next_cd_audio_volume_matrix[0][1] = value;
return;
}
case 3:
case 9:
{
Log_DebugPrintf("Audio volume for right-to-left output <- 0x%02X", value);
m_next_cd_audio_volume_matrix[1][0] = value;
return;
}
case 10:
{
Log_DebugPrintf("Audio volume for right-to-left output <- 0x%02X", value);
m_next_cd_audio_volume_matrix[1][0] = value;
return;
}
case 11:
{
Log_DebugPrintf("Audio volume apply changes <- 0x%02X", value);
m_adpcm_muted = ConvertToBoolUnchecked(value & u8(0x01));
@ -415,13 +391,14 @@ void CDROM::WriteRegister(u32 offset, u8 value)
m_cd_audio_volume_matrix = m_next_cd_audio_volume_matrix;
return;
}
}
}
break;
}
Log_ErrorPrintf("Unknown CDROM register write: offset=0x%02X, index=%d, value=0x%02X", offset,
m_status.index.GetValue(), value);
default:
{
Log_ErrorPrintf("Unknown CDROM register write: offset=0x%02X, index=%d, reg=%u, value=0x%02X", offset,
m_status.index.GetValue(), reg, value);
return;
}
}
}
void CDROM::DMARead(u32* words, u32 word_count)