idk
This commit is contained in:
@@ -423,9 +423,9 @@ auto PI::Read(u32 addr) const -> u32 {
|
||||
case 0x04600010:
|
||||
{
|
||||
u32 value = 0;
|
||||
value |= (dmaBusy << 0); // Is PI DMA active? No, because it's instant
|
||||
value |= (ioBusy << 1); // Is PI IO busy? No, because it's instant
|
||||
value |= (0 << 2); // PI IO error?
|
||||
value |= (dmaBusy << 0); // Is PI DMA active?
|
||||
value |= (ioBusy << 1); // Is PI IO busy?
|
||||
value |= (0 << 2); // PI DMA error?
|
||||
value |= (mem.mmio.mi.intr.pi << 3); // PI interrupt?
|
||||
return value;
|
||||
}
|
||||
@@ -503,13 +503,10 @@ void PI::DMA<false>() {
|
||||
const s32 len = rdLen + 1;
|
||||
trace("PI DMA from RDRAM to CARTRIDGE (size: {} B, {:08X} to {:08X})", len, dramAddr, cartAddr);
|
||||
|
||||
if (mem.saveType == SAVE_FLASH_1m && cartAddr >= SREGION_PI_SRAM && cartAddr < (CART_REGION_START_2_2 + 1_mb)) {
|
||||
cartAddr = SREGION_PI_SRAM | ((cartAddr & (1_mb-1)) << 1);
|
||||
}
|
||||
|
||||
for (int i = 0; i < len; i++) {
|
||||
BusWrite<u8, true>(cartAddr + i, mem.mmio.rdp.ReadRDRAM<u8>(dramAddr + i));
|
||||
}
|
||||
|
||||
dramAddr += len;
|
||||
dramAddr = (dramAddr + 7) & ~7;
|
||||
cartAddr += len;
|
||||
@@ -517,7 +514,10 @@ void PI::DMA<false>() {
|
||||
cartAddr += 1;
|
||||
|
||||
dmaBusy = true;
|
||||
Scheduler::GetInstance().EnqueueRelative(AccessTiming(GetDomain(cartAddr), rdLen), PI_DMA_COMPLETE);
|
||||
|
||||
u64 completo = AccessTiming(GetDomain(cartAddr), len);
|
||||
trace("Will complete in {} cycles", completo);
|
||||
Scheduler::GetInstance().EnqueueRelative(completo, PI_DMA_COMPLETE);
|
||||
}
|
||||
|
||||
// cart -> rdram
|
||||
@@ -541,7 +541,9 @@ void PI::DMA<true>() {
|
||||
cartAddr += 1;
|
||||
|
||||
dmaBusy = true;
|
||||
Scheduler::GetInstance().EnqueueRelative(AccessTiming(GetDomain(cartAddr), len), PI_DMA_COMPLETE);
|
||||
u64 completo = AccessTiming(GetDomain(cartAddr), len);
|
||||
trace("Will complete in {} cycles", completo);
|
||||
Scheduler::GetInstance().EnqueueRelative(completo, PI_DMA_COMPLETE);
|
||||
}
|
||||
|
||||
void PI::Write(u32 addr, u32 val) {
|
||||
@@ -555,16 +557,12 @@ void PI::Write(u32 addr, u32 val) {
|
||||
cartAddr = val & 0xFFFFFFFE;
|
||||
break;
|
||||
case 0x04600008:
|
||||
{
|
||||
rdLen = val & 0x00FFFFFF;
|
||||
DMA<false>();
|
||||
}
|
||||
rdLen = val & 0x00FFFFFF;
|
||||
DMA<false>();
|
||||
break;
|
||||
case 0x0460000C:
|
||||
{
|
||||
wrLen = val & 0x00FFFFFF;
|
||||
DMA<true>();
|
||||
}
|
||||
wrLen = val & 0x00FFFFFF;
|
||||
DMA<true>();
|
||||
break;
|
||||
case 0x04600010:
|
||||
if (val & 2) {
|
||||
|
||||
Reference in New Issue
Block a user