diff --git a/src/backend/core/mmio/SI.cpp b/src/backend/core/mmio/SI.cpp index fbd01424..8d8866ba 100644 --- a/src/backend/core/mmio/SI.cpp +++ b/src/backend/core/mmio/SI.cpp @@ -38,12 +38,20 @@ void SI::DMA() { if (toDram) { pif.ProcessCommands(mem); for(int i = 0; i < 64; i++) { - mem.mmio.rdp.rdram[BYTE_ADDRESS(dramAddr + i)] = pif.Read(pifAddr + i); + u32 addr = dramAddr + i; + if(addr < RDRAM_SIZE) { + mem.mmio.rdp.rdram[BYTE_ADDRESS(addr)] = pif.Read(pifAddr + i); + } } Util::trace("SI DMA from PIF RAM to RDRAM ({:08X} to {:08X})", pifAddr, dramAddr); } else { for(int i = 0; i < 64; i++) { - pif.Write(pifAddr + i, mem.mmio.rdp.rdram[BYTE_ADDRESS(dramAddr + i)]); + u32 addr = dramAddr + i; + if(addr < RDRAM_SIZE) { + pif.Write(pifAddr + i, mem.mmio.rdp.rdram[BYTE_ADDRESS(addr)]); + } else { + pif.Write(pifAddr + i, 0); + } } Util::trace("SI DMA from RDRAM to PIF RAM ({:08X} to {:08X})", dramAddr, pifAddr); pif.ProcessCommands(mem); @@ -75,4 +83,4 @@ void SI::Write(u32 addr, u32 val) { Util::panic("Unhandled SI[{:08X}] write ({:08X})", addr, val); } } -} \ No newline at end of file +}