Core: Get rid of IPL device macros

Having to look up macros that are defined elsewhere makes the code
harder to reason about. The macros don't remove enough repetition to
justify their existence in my opinion.
This commit is contained in:
JosJuice 2024-03-25 17:55:13 +01:00
parent 3948ac9513
commit d57c68a625
1 changed files with 9 additions and 16 deletions

View File

@ -296,10 +296,6 @@ void CEXIIPL::TransferByte(u8& data)
DEBUG_LOG_FMT(EXPANSIONINTERFACE, "IPL-DEV data {} {:08x} {:02x}",
m_command.is_write() ? "write" : "read", address, data);
#define IN_RANGE(x) (address >= x##_BASE && address < x##_BASE + x##_SIZE)
#define DEV_ADDR(x) (address - x##_BASE)
#define DEV_ADDR_CURSOR(x) (DEV_ADDR(x) + m_cursor++)
auto UartFifoAccess = [&]() {
if (m_command.is_write())
{
@ -323,7 +319,7 @@ void CEXIIPL::TransferByte(u8& data)
{
if (!m_command.is_write())
{
u32 dev_addr = DEV_ADDR_CURSOR(ROM);
u32 dev_addr = address - ROM_BASE + m_cursor++;
// Technically we should descramble here iff descrambling logic is enabled.
// At the moment, we pre-decrypt the whole thing and
// ignore the "enabled" bit - see CEXIIPL::CEXIIPL
@ -346,18 +342,18 @@ void CEXIIPL::TransferByte(u8& data)
}
}
}
else if (IN_RANGE(SRAM))
else if (address >= SRAM_BASE && address < SRAM_BASE + SRAM_SIZE)
{
auto& sram = m_system.GetSRAM();
u32 dev_addr = DEV_ADDR_CURSOR(SRAM);
u32 dev_addr = address - SRAM_BASE + m_cursor++;
if (m_command.is_write())
sram[dev_addr] = data;
else
data = sram[dev_addr];
}
else if (IN_RANGE(UART))
else if (address >= UART_BASE && address < UART_BASE + UART_SIZE)
{
switch (DEV_ADDR(UART))
switch (address - UART_BASE)
{
case 0:
// Seems to be 16byte fifo
@ -371,16 +367,17 @@ void CEXIIPL::TransferByte(u8& data)
break;
}
}
else if (IN_RANGE(WII_RTC) && DEV_ADDR(WII_RTC) == 0x20)
else if (address >= WII_RTC_BASE && address < WII_RTC_BASE + WII_RTC_SIZE &&
address - WII_RTC_BASE == 0x20)
{
if (m_command.is_write())
g_rtc_flags.m_hex = data;
else
data = g_rtc_flags.m_hex;
}
else if (IN_RANGE(EUART))
else if (address >= EUART_BASE && address < EUART_BASE + EUART_SIZE)
{
switch (DEV_ADDR(EUART))
switch (address - EUART_BASE)
{
case 0:
// Writes 0xf2 then 0xf3 on EUART init. Just need to return non-zero
@ -395,10 +392,6 @@ void CEXIIPL::TransferByte(u8& data)
{
NOTICE_LOG_FMT(EXPANSIONINTERFACE, "IPL-DEV Accessing unknown device");
}
#undef DEV_ADDR_CURSOR
#undef DEV_ADDR
#undef IN_RANGE
}
}