Better separate DMA functions

This commit is contained in:
SimoneN64
2024-07-07 23:40:15 +02:00
parent cdbb251be1
commit 37a0cf6c77
4 changed files with 73 additions and 45 deletions

View File

@@ -33,21 +33,27 @@ auto SI::Read(u32 addr) const -> u32 {
}
}
// pif -> rdram
template <> void SI::DMA<true>() {
pif.ProcessCommands(mem);
for(int i = 0; i < 64; i++) {
mem.mmio.rdp.WriteRDRAM<u8>(dramAddr + i, pif.Read(pifAddr + i));
}
Util::trace("SI DMA from PIF RAM to RDRAM ({:08X} to {:08X})", pifAddr, dramAddr);
}
// rdram -> pif
template <> void SI::DMA<false>() {
for(int i = 0; i < 64; i++) {
pif.Write(pifAddr + i, mem.mmio.rdp.ReadRDRAM<u8>(dramAddr + i));
}
Util::trace("SI DMA from RDRAM to PIF RAM ({:08X} to {:08X})", dramAddr, pifAddr);
}
void SI::DMA() {
status.dmaBusy = false;
if (toDram) {
pif.ProcessCommands(mem);
for(int i = 0; i < 64; i++) {
mem.mmio.rdp.WriteRDRAM<u8>(dramAddr + i, 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.ReadRDRAM<u8>(dramAddr + i));
}
Util::trace("SI DMA from RDRAM to PIF RAM ({:08X} to {:08X})", dramAddr, pifAddr);
pif.ProcessCommands(mem);
}
if (toDram) DMA<true>();
else DMA<false>();
mem.mmio.mi.InterruptRaise(MI::Interrupt::SI);
}