From 09c45d675039d42c65e86c92634e5b9dcbf28f84 Mon Sep 17 00:00:00 2001 From: Simone <91993281+SimoneN64@users.noreply.github.com> Date: Tue, 25 Jun 2024 11:16:47 +0200 Subject: [PATCH] Implement RDRAM boundary check in SI DMAs as well --- src/backend/core/mmio/SI.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) 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 +}