Bus: Implement RAM_SIZE register
Fixes Rock-Climbing - Mitouhou e no Chousen - Alps Hen (Japan) crashing on boot. Silly game does a 512 word DMA from CDROM to 0x001FFF04, with the mapped memory size set to 4MB, expecting the DMA to trigger a bus error, because if it doesn't, then your kernel memory goes bye bye. A bunch of other games do set the upper 4MB to be unmapped, but this change appears to have no effect on them. As expected, they're probably doing the correct thing.
This commit is contained in:
@ -506,7 +506,7 @@ ALWAYS_INLINE_RELEASE bool DMA::CheckForBusError(Channel channel, ChannelState&
|
||||
u32 size)
|
||||
{
|
||||
// Relying on a transfer partially happening at the end of RAM, then hitting a bus error would be pretty silly.
|
||||
if ((address + size) > Bus::RAM_8MB_SIZE) [[unlikely]]
|
||||
if ((address + size) >= Bus::g_ram_mapped_size) [[unlikely]]
|
||||
{
|
||||
DEBUG_LOG("DMA bus error on channel {} at address 0x{:08X} size {}", channel, address, size);
|
||||
cs.channel_control.enable_busy = false;
|
||||
|
||||
Reference in New Issue
Block a user