aboutsummaryrefslogtreecommitdiff
path: root/src/DSi_AES.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/DSi_AES.cpp')
-rw-r--r--src/DSi_AES.cpp22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/DSi_AES.cpp b/src/DSi_AES.cpp
index 1ba690f..b427dcd 100644
--- a/src/DSi_AES.cpp
+++ b/src/DSi_AES.cpp
@@ -191,6 +191,8 @@ void WriteCnt(u32 val)
{
// transfer start (checkme)
RemBlocks = BlkCnt >> 16;
+
+ DSi::CheckNDMAs(1, 0x2A);
}
printf("AES CNT: %08X / mode=%d inDMA=%d outDMA=%d blocks=%d\n",
@@ -204,7 +206,8 @@ void WriteBlkCnt(u32 val)
u32 ReadOutputFIFO()
{
- return OutputFIFO->Read();
+ u32 ret = OutputFIFO->Read();
+ return ret;
}
void WriteInputFIFO(u32 val)
@@ -234,17 +237,30 @@ void WriteInputFIFO(u32 val)
if (OutputFIFO->Level() >= OutputDMASize)
{
- // trigger DMA
+ // trigger output DMA
DSi::CheckNDMAs(1, 0x2B);
}
- // TODO: DMA the other way around
if (RemBlocks == 0)
{
Cnt &= ~(1<<31);
if (Cnt & (1<<30)) NDS::SetIRQ2(NDS::IRQ2_DSi_AES);
+ DSi::StopNDMAs(1, 0x2A);
DSi::StopNDMAs(1, 0x2B);
}
+ else
+ {
+ CheckInputDMA();
+ }
+}
+
+void CheckInputDMA()
+{
+ if (InputFIFO->Level() < InputDMASize)
+ {
+ // trigger input DMA
+ DSi::CheckNDMAs(1, 0x2A);
+ }
}