Fix behaviour of RDRAM in PI DMAs

This commit is contained in:
Simone Coco
2024-05-17 12:02:39 +02:00
parent e841befdb7
commit 77e04afc0c

View File

@@ -438,11 +438,15 @@ void PI::Write(u32 addr, u32 val) {
len -= dramAddrInternal & 0x7;
}
rdLen = len;
if(dramAddrInternal >= 0x800000) {
Util::panic("PI DMA RDRAM->CART ADDRESS TOO HIGH");
}
for (int i = 0; i < len; i++) {
BusWrite<u8, true>(cartAddrInternal + i, mem.mmio.rdp.rdram[BYTE_ADDRESS(dramAddrInternal + i) & RDRAM_DSIZE]);
u32 addr = BYTE_ADDRESS(dramAddrInternal + i) & RDRAM_DSIZE;
if (addr < RDRAM_SIZE) {
BusWrite<u8, true>(cartAddrInternal + i, mem.mmio.rdp.rdram[addr]);
}
else {
BusWrite<u8, true>(cartAddrInternal + i, 0);
}
}
Util::trace("PI DMA from RDRAM to CARTRIDGE (size: {} B, {:08X} to {:08X})", len, dramAddr, cartAddr);
dmaBusy = true;
@@ -463,7 +467,10 @@ void PI::Write(u32 addr, u32 val) {
}
for(u32 i = 0; i < len; i++) {
mem.mmio.rdp.rdram[BYTE_ADDRESS(dramAddrInternal + i) & RDRAM_DSIZE] = BusRead<u8, true>(cartAddrInternal + i);
u32 addr = BYTE_ADDRESS(dramAddrInternal + i) & RDRAM_DSIZE;
if (addr < mem.mmio.rdp.rdram.size()) {
mem.mmio.rdp.rdram[addr] = BusRead<u8, true>(cartAddrInternal + i);
}
}
dmaBusy = true;
Util::trace("PI DMA from CARTRIDGE to RDRAM (size: {} B, {:08X} to {:08X})", len, cartAddr, dramAddr);