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;