|
|
|
@ -625,10 +625,14 @@ ALWAYS_INLINE static TickCount DoEXP2Access(u32 offset, u32& value)
|
|
|
|
|
m_tty_line_buffer += static_cast<char>(Truncate8(value));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (offset == 0x41)
|
|
|
|
|
else if (offset == 0x41 || offset == 0x42)
|
|
|
|
|
{
|
|
|
|
|
Log_WarningPrintf("BIOS POST status: %02X", value & UINT32_C(0x0F));
|
|
|
|
|
}
|
|
|
|
|
else if (offset == 0x70)
|
|
|
|
|
{
|
|
|
|
|
Log_WarningPrintf("BIOS POST2 status: %02X", value & UINT32_C(0x0F));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Log_WarningPrintf("EXP2 write: 0x%08X <- 0x%08X", EXP2_BASE | offset, value);
|
|
|
|
@ -638,6 +642,40 @@ ALWAYS_INLINE static TickCount DoEXP2Access(u32 offset, u32& value)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<MemoryAccessType type>
|
|
|
|
|
ALWAYS_INLINE static TickCount DoEXP3Access(u32 offset, u32& value)
|
|
|
|
|
{
|
|
|
|
|
if constexpr (type == MemoryAccessType::Read)
|
|
|
|
|
{
|
|
|
|
|
Log_WarningPrintf("EXP3 read: 0x%08X -> 0x%08X", EXP3_BASE | offset);
|
|
|
|
|
value = UINT32_C(0xFFFFFFFF);
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (offset == 0)
|
|
|
|
|
Log_WarningPrintf("BIOS POST3 status: %02X", value & UINT32_C(0x0F));
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<MemoryAccessType type>
|
|
|
|
|
ALWAYS_INLINE static TickCount DoUnknownEXPAccess(u32 address, u32& value)
|
|
|
|
|
{
|
|
|
|
|
if constexpr (type == MemoryAccessType::Read)
|
|
|
|
|
{
|
|
|
|
|
Log_ErrorPrintf("Unknown EXP read: 0x%08X", address);
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Log_WarningPrintf("Unknown EXP write: 0x%08X <- 0x%08X", address, value);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<MemoryAccessType type, MemoryAccessSize size>
|
|
|
|
|
ALWAYS_INLINE static TickCount DoMemoryControlAccess(u32 offset, u32& value)
|
|
|
|
|
{
|
|
|
|
@ -1289,6 +1327,14 @@ static ALWAYS_INLINE TickCount DoMemoryAccess(VirtualMemoryAddress address, u32&
|
|
|
|
|
{
|
|
|
|
|
return DoEXP2Access<type, size>(address & EXP2_MASK, value);
|
|
|
|
|
}
|
|
|
|
|
else if (address < EXP3_BASE)
|
|
|
|
|
{
|
|
|
|
|
return DoUnknownEXPAccess<type>(address, value);
|
|
|
|
|
}
|
|
|
|
|
else if (address < (EXP3_BASE + EXP3_SIZE))
|
|
|
|
|
{
|
|
|
|
|
return DoEXP3Access<type>(address & EXP3_MASK, value);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return DoInvalidAccess(type, size, address, value);
|
|
|
|
|