From b9472d430ef45784251ddcb424cbdad5242b849e Mon Sep 17 00:00:00 2001 From: Jaklyy <102590697+Jaklyy@users.noreply.github.com> Date: Sat, 28 Dec 2024 12:42:44 -0500 Subject: [PATCH] fix main ram dmas not halting for higher priority dmas --- src/NDS.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/NDS.cpp b/src/NDS.cpp index e6131ee9..5a1ea92b 100644 --- a/src/NDS.cpp +++ b/src/NDS.cpp @@ -1083,6 +1083,12 @@ void NDS::MainRAMHandleARM9() case MainRAMType::DMA32: { + if (CPUStop & ((1<<ARM9.MRTrack.Var)-1)) + { + memset(&ARM9.MRTrack, 0, sizeof(ARM9.MRTrack)); + break; + } + DMA* dma = &DMAs[ARM9.MRTrack.Var]; int burststart = dma->Running - 1; @@ -1189,6 +1195,12 @@ void NDS::MainRAMHandleARM9() case MainRAMType::DMA16: { + if (CPUStop & ((1<<ARM9.MRTrack.Var)-1)) + { + memset(&ARM9.MRTrack, 0, sizeof(ARM9.MRTrack)); + break; + } + DMA* dma = &DMAs[ARM9.MRTrack.Var]; int burststart = dma->Running - 1; @@ -1445,6 +1457,12 @@ void NDS::MainRAMHandleARM7() case MainRAMType::DMA32: { + if (CPUStop & CPUStop_DMA7 & ((1<<ARM7.MRTrack.Var)-1)) + { + memset(&ARM7.MRTrack, 0, sizeof(ARM7.MRTrack)); + break; + } + DMA* dma = &DMAs[ARM7.MRTrack.Var]; int burststart = dma->Running - 1; @@ -1545,6 +1563,12 @@ void NDS::MainRAMHandleARM7() case MainRAMType::DMA16: { + if (CPUStop & CPUStop_DMA7 & ((1<<ARM7.MRTrack.Var)-1)) + { + memset(&ARM7.MRTrack, 0, sizeof(ARM7.MRTrack)); + break; + } + DMA* dma = &DMAs[ARM7.MRTrack.Var]; int burststart = dma->Running - 1;