Implement RDRAM boundary check in SI DMAs as well
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user