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