maple: delay raising overrun interrupt when dest isn't in RAM

Only raise error when copying data back to RAM.
Fixes Cheats 'N Codes Volume 1
This commit is contained in:
Flyinghead 2023-01-21 11:38:58 +01:00
parent 31bd943d67
commit 8fdcea2e20
1 changed files with 6 additions and 4 deletions

View File

@ -164,10 +164,7 @@ static void maple_DoDma()
{
WARN_LOG(MAPLE, "DMA Error: destination not in system ram: %x", header_2);
#endif
asic_RaiseInterrupt(holly_MAPLE_OVERRUN);
SB_MDST = 0;
mapleDmaOut.clear();
return;
header_2 = 0;
}
u32* p_data = (u32 *)GetMemPtr(addr + 8, plen * sizeof(u32));
@ -274,6 +271,11 @@ static int maple_schd(int tag, int c, int j)
{
for (const auto& pair : mapleDmaOut)
{
if (pair.first == 0)
{
asic_RaiseInterrupt(holly_MAPLE_OVERRUN);
continue;
}
size_t size = pair.second.size() * sizeof(u32);
u32 *p = (u32 *)GetMemPtr(pair.first, size);
memcpy(p, pair.second.data(), size);