aboutsummaryrefslogtreecommitdiff
path: root/src/DSi_NDMA.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/DSi_NDMA.cpp')
-rw-r--r--src/DSi_NDMA.cpp21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/DSi_NDMA.cpp b/src/DSi_NDMA.cpp
index 7c0b2a1..aed78af 100644
--- a/src/DSi_NDMA.cpp
+++ b/src/DSi_NDMA.cpp
@@ -99,7 +99,8 @@ void DSi_NDMA::WriteCnt(u32 val)
if ((StartMode & 0x1F) == 0x10)
Start();
- if (StartMode != 0x10 && StartMode != 0x30)
+ if (StartMode != 0x10 && StartMode != 0x30 &&
+ StartMode != 0x2B)
printf("UNIMPLEMENTED ARM%d NDMA%d START MODE %02X, %08X->%08X\n", CPU?7:9, Num, StartMode, SrcAddr, DstAddr);
}
}
@@ -223,16 +224,19 @@ void DSi_NDMA::Run9()
}
if ((StartMode & 0x1F) == 0x10) // CHECKME
+ {
Cnt &= ~(1<<31);
+ if (Cnt & (1<<30)) NDS::SetIRQ(0, NDS::IRQ_DSi_NDMA0 + Num);
+ }
else if (!(Cnt & (1<<29)))
{
if (TotalRemCount == 0)
+ {
Cnt &= ~(1<<31);
+ if (Cnt & (1<<30)) NDS::SetIRQ(0, NDS::IRQ_DSi_NDMA0 + Num);
+ }
}
- if (Cnt & (1<<30))
- NDS::SetIRQ(0, NDS::IRQ_DSi_NDMA0 + Num);
-
Running = 0;
InProgress = false;
NDS::ResumeCPU(0, 1<<(Num+4));
@@ -305,16 +309,19 @@ void DSi_NDMA::Run7()
}
if ((StartMode & 0x1F) == 0x10) // CHECKME
+ {
Cnt &= ~(1<<31);
+ if (Cnt & (1<<30)) NDS::SetIRQ(1, NDS::IRQ_DSi_NDMA0 + Num);
+ }
else if (!(Cnt & (1<<29)))
{
if (TotalRemCount == 0)
+ {
Cnt &= ~(1<<31);
+ if (Cnt & (1<<30)) NDS::SetIRQ(1, NDS::IRQ_DSi_NDMA0 + Num);
+ }
}
- if (Cnt & (1<<30))
- NDS::SetIRQ(1, NDS::IRQ_DSi_NDMA0 + Num);
-
Running = 0;
InProgress = false;
NDS::ResumeCPU(1, 1<<(Num+4));