Fix behaviour of RDRAM in PI DMAs
This commit is contained in:
@@ -438,11 +438,15 @@ void PI::Write(u32 addr, u32 val) {
|
|||||||
len -= dramAddrInternal & 0x7;
|
len -= dramAddrInternal & 0x7;
|
||||||
}
|
}
|
||||||
rdLen = len;
|
rdLen = len;
|
||||||
if(dramAddrInternal >= 0x800000) {
|
|
||||||
Util::panic("PI DMA RDRAM->CART ADDRESS TOO HIGH");
|
|
||||||
}
|
|
||||||
for (int i = 0; i < len; i++) {
|
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);
|
Util::trace("PI DMA from RDRAM to CARTRIDGE (size: {} B, {:08X} to {:08X})", len, dramAddr, cartAddr);
|
||||||
dmaBusy = true;
|
dmaBusy = true;
|
||||||
@@ -463,7 +467,10 @@ void PI::Write(u32 addr, u32 val) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for(u32 i = 0; i < len; i++) {
|
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;
|
dmaBusy = true;
|
||||||
Util::trace("PI DMA from CARTRIDGE to RDRAM (size: {} B, {:08X} to {:08X})", len, cartAddr, dramAddr);
|
Util::trace("PI DMA from CARTRIDGE to RDRAM (size: {} B, {:08X} to {:08X})", len, cartAddr, dramAddr);
|
||||||
|
|||||||
Reference in New Issue
Block a user