HW: Initial HSP implementation with ARAM expansion

This commit is contained in:
Vicki Pfau
2018-08-05 02:03:12 -07:00
parent 0f2540a0d1
commit 6a26b0ce8a
17 changed files with 340 additions and 12 deletions

View File

@ -33,6 +33,7 @@
#include "Core/CoreTiming.h"
#include "Core/DSPEmulator.h"
#include "Core/HW/HSP/HSP.h"
#include "Core/HW/MMIO.h"
#include "Core/HW/Memmap.h"
#include "Core/HW/ProcessorInterface.h"
@ -543,13 +544,11 @@ static void Do_ARAM_DMA()
s_arDMA.Cnt.count -= 8;
}
}
else
else if (!s_ARAM.wii_mode)
{
// Assuming no external ARAM installed; returns zeros on out of bounds reads (verified on real
// HW)
while (s_arDMA.Cnt.count)
{
Memory::Write_U64(0, s_arDMA.MMAddr);
Memory::Write_U64(HSP::Read(s_arDMA.ARAddr), s_arDMA.MMAddr);
s_arDMA.MMAddr += 8;
s_arDMA.ARAddr += 8;
s_arDMA.Cnt.count -= 8;
@ -596,13 +595,16 @@ static void Do_ARAM_DMA()
s_arDMA.Cnt.count -= 8;
}
}
else
else if (!s_ARAM.wii_mode)
{
// Assuming no external ARAM installed; writes nothing to ARAM when out of bounds (verified on
// real HW)
s_arDMA.MMAddr += s_arDMA.Cnt.count;
s_arDMA.ARAddr += s_arDMA.Cnt.count;
s_arDMA.Cnt.count = 0;
while (s_arDMA.Cnt.count)
{
HSP::Write(s_arDMA.ARAddr, Memory::Read_U64(s_arDMA.MMAddr));
s_arDMA.MMAddr += 8;
s_arDMA.ARAddr += 8;
s_arDMA.Cnt.count -= 8;
}
}
}
}