Implement RDRAM boundary check in SI DMAs as well

This commit is contained in:
Simone
2024-06-25 11:16:47 +02:00
committed by GitHub
parent 4865a3e971
commit 09c45d6750

View File

@@ -38,12 +38,20 @@ void SI::DMA() {
if (toDram) { if (toDram) {
pif.ProcessCommands(mem); pif.ProcessCommands(mem);
for(int i = 0; i < 64; i++) { 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); Util::trace("SI DMA from PIF RAM to RDRAM ({:08X} to {:08X})", pifAddr, dramAddr);
} else { } else {
for(int i = 0; i < 64; i++) { 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); Util::trace("SI DMA from RDRAM to PIF RAM ({:08X} to {:08X})", dramAddr, pifAddr);
pif.ProcessCommands(mem); pif.ProcessCommands(mem);