mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-05-24 08:05:42 -04:00
CDROM: Simplify register indexing for write
This commit is contained in:
parent
1ee68ad12a
commit
3223f87eeb
@ -233,23 +233,17 @@ u8 CDROM::ReadRegister(u32 offset)
|
|||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
{
|
{
|
||||||
switch (m_status.index)
|
if (m_status.index & 1)
|
||||||
{
|
|
||||||
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:
|
|
||||||
{
|
{
|
||||||
const u8 value = m_interrupt_flag_register | ~INTERRUPT_REGISTER_MASK;
|
const u8 value = m_interrupt_flag_register | ~INTERRUPT_REGISTER_MASK;
|
||||||
Log_DebugPrintf("CDROM read interrupt flag register <- 0x%02X", ZeroExtend32(value));
|
Log_DebugPrintf("CDROM read interrupt flag register <- 0x%02X", ZeroExtend32(value));
|
||||||
return 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;
|
break;
|
||||||
@ -263,19 +257,15 @@ u8 CDROM::ReadRegister(u32 offset)
|
|||||||
|
|
||||||
void CDROM::WriteRegister(u32 offset, u8 value)
|
void CDROM::WriteRegister(u32 offset, u8 value)
|
||||||
{
|
{
|
||||||
switch (offset)
|
if (offset == 0)
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
{
|
{
|
||||||
Log_TracePrintf("CDROM status register <- 0x%02X", value);
|
Log_TracePrintf("CDROM status register <- 0x%02X", value);
|
||||||
m_status.bits = (m_status.bits & static_cast<u8>(~3)) | (value & u8(3));
|
m_status.bits = (m_status.bits & static_cast<u8>(~3)) | (value & u8(3));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case 1:
|
const u32 reg = (m_status.index * 3u) + (offset - 1);
|
||||||
{
|
switch (reg)
|
||||||
switch (m_status.index)
|
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
{
|
{
|
||||||
@ -291,32 +281,6 @@ void CDROM::WriteRegister(u32 offset, u8 value)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case 1:
|
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())
|
if (m_param_fifo.IsFull())
|
||||||
{
|
{
|
||||||
@ -329,36 +293,7 @@ void CDROM::WriteRegister(u32 offset, u8 value)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 1:
|
|
||||||
{
|
|
||||||
Log_DebugPrintf("Interrupt enable register <- 0x%02X", value);
|
|
||||||
m_interrupt_enable_register = value & INTERRUPT_REGISTER_MASK;
|
|
||||||
UpdateInterruptRequest();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
case 2:
|
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
|
// TODO: sector buffer is not the data fifo
|
||||||
Log_DebugPrintf("Request register <- 0x%02X", value);
|
Log_DebugPrintf("Request register <- 0x%02X", value);
|
||||||
@ -378,7 +313,21 @@ void CDROM::WriteRegister(u32 offset, u8 value)
|
|||||||
return;
|
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);
|
Log_DebugPrintf("Interrupt flag register <- 0x%02X", value);
|
||||||
m_interrupt_flag_register &= ~(value & INTERRUPT_REGISTER_MASK);
|
m_interrupt_flag_register &= ~(value & INTERRUPT_REGISTER_MASK);
|
||||||
@ -400,14 +349,41 @@ void CDROM::WriteRegister(u32 offset, u8 value)
|
|||||||
return;
|
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);
|
Log_DebugPrintf("Audio volume for left-to-right output <- 0x%02X", value);
|
||||||
m_next_cd_audio_volume_matrix[0][1] = value;
|
m_next_cd_audio_volume_matrix[0][1] = value;
|
||||||
return;
|
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);
|
Log_DebugPrintf("Audio volume apply changes <- 0x%02X", value);
|
||||||
m_adpcm_muted = ConvertToBoolUnchecked(value & u8(0x01));
|
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;
|
m_cd_audio_volume_matrix = m_next_cd_audio_volume_matrix;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
Log_ErrorPrintf("Unknown CDROM register write: offset=0x%02X, index=%d, value=0x%02X", offset,
|
default:
|
||||||
m_status.index.GetValue(), value);
|
{
|
||||||
|
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)
|
void CDROM::DMARead(u32* words, u32 word_count)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user