add NDMA start mode 0x0A (AES input FIFO)

This commit is contained in:
Arisotura
2019-06-19 19:19:51 +02:00
parent f4c7f5c96b
commit dcae9788e5
3 changed files with 27 additions and 4 deletions

View File

@ -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);
}
}