mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-25 07:10:00 -06:00
make FIFO size static whene possible
This commit is contained in:
@ -38,8 +38,8 @@ bool OutputFlush;
|
||||
u32 InputDMASize, OutputDMASize;
|
||||
u32 AESMode;
|
||||
|
||||
FIFO<u32>* InputFIFO;
|
||||
FIFO<u32>* OutputFIFO;
|
||||
FIFO<u32, 16> InputFIFO;
|
||||
FIFO<u32, 16> OutputFIFO;
|
||||
|
||||
u8 IV[16];
|
||||
|
||||
@ -91,9 +91,6 @@ void ROL16(u8* val, u32 n)
|
||||
|
||||
bool Init()
|
||||
{
|
||||
InputFIFO = new FIFO<u32>(16);
|
||||
OutputFIFO = new FIFO<u32>(16);
|
||||
|
||||
const u8 zero[16] = {0};
|
||||
AES_init_ctx_iv(&Ctx, zero, zero);
|
||||
|
||||
@ -102,8 +99,6 @@ bool Init()
|
||||
|
||||
void DeInit()
|
||||
{
|
||||
delete InputFIFO;
|
||||
delete OutputFIFO;
|
||||
}
|
||||
|
||||
void Reset()
|
||||
@ -119,8 +114,8 @@ void Reset()
|
||||
OutputDMASize = 0;
|
||||
AESMode = 0;
|
||||
|
||||
InputFIFO->Clear();
|
||||
OutputFIFO->Clear();
|
||||
InputFIFO.Clear();
|
||||
OutputFIFO.Clear();
|
||||
|
||||
memset(IV, 0, sizeof(IV));
|
||||
|
||||
@ -164,10 +159,10 @@ void ProcessBlock_CCM_Decrypt()
|
||||
u8 data[16];
|
||||
u8 data_rev[16];
|
||||
|
||||
*(u32*)&data[0] = InputFIFO->Read();
|
||||
*(u32*)&data[4] = InputFIFO->Read();
|
||||
*(u32*)&data[8] = InputFIFO->Read();
|
||||
*(u32*)&data[12] = InputFIFO->Read();
|
||||
*(u32*)&data[0] = InputFIFO.Read();
|
||||
*(u32*)&data[4] = InputFIFO.Read();
|
||||
*(u32*)&data[8] = InputFIFO.Read();
|
||||
*(u32*)&data[12] = InputFIFO.Read();
|
||||
|
||||
//printf("AES-CCM: "); _printhex2(data, 16);
|
||||
|
||||
@ -181,10 +176,10 @@ void ProcessBlock_CCM_Decrypt()
|
||||
|
||||
//printf(" -> "); _printhex2(data, 16);
|
||||
|
||||
OutputFIFO->Write(*(u32*)&data[0]);
|
||||
OutputFIFO->Write(*(u32*)&data[4]);
|
||||
OutputFIFO->Write(*(u32*)&data[8]);
|
||||
OutputFIFO->Write(*(u32*)&data[12]);
|
||||
OutputFIFO.Write(*(u32*)&data[0]);
|
||||
OutputFIFO.Write(*(u32*)&data[4]);
|
||||
OutputFIFO.Write(*(u32*)&data[8]);
|
||||
OutputFIFO.Write(*(u32*)&data[12]);
|
||||
}
|
||||
|
||||
void ProcessBlock_CCM_Encrypt()
|
||||
@ -192,10 +187,10 @@ void ProcessBlock_CCM_Encrypt()
|
||||
u8 data[16];
|
||||
u8 data_rev[16];
|
||||
|
||||
*(u32*)&data[0] = InputFIFO->Read();
|
||||
*(u32*)&data[4] = InputFIFO->Read();
|
||||
*(u32*)&data[8] = InputFIFO->Read();
|
||||
*(u32*)&data[12] = InputFIFO->Read();
|
||||
*(u32*)&data[0] = InputFIFO.Read();
|
||||
*(u32*)&data[4] = InputFIFO.Read();
|
||||
*(u32*)&data[8] = InputFIFO.Read();
|
||||
*(u32*)&data[12] = InputFIFO.Read();
|
||||
|
||||
//printf("AES-CCM: "); _printhex2(data, 16);
|
||||
|
||||
@ -209,10 +204,10 @@ void ProcessBlock_CCM_Encrypt()
|
||||
|
||||
//printf(" -> "); _printhex2(data, 16);
|
||||
|
||||
OutputFIFO->Write(*(u32*)&data[0]);
|
||||
OutputFIFO->Write(*(u32*)&data[4]);
|
||||
OutputFIFO->Write(*(u32*)&data[8]);
|
||||
OutputFIFO->Write(*(u32*)&data[12]);
|
||||
OutputFIFO.Write(*(u32*)&data[0]);
|
||||
OutputFIFO.Write(*(u32*)&data[4]);
|
||||
OutputFIFO.Write(*(u32*)&data[8]);
|
||||
OutputFIFO.Write(*(u32*)&data[12]);
|
||||
}
|
||||
|
||||
void ProcessBlock_CTR()
|
||||
@ -220,10 +215,10 @@ void ProcessBlock_CTR()
|
||||
u8 data[16];
|
||||
u8 data_rev[16];
|
||||
|
||||
*(u32*)&data[0] = InputFIFO->Read();
|
||||
*(u32*)&data[4] = InputFIFO->Read();
|
||||
*(u32*)&data[8] = InputFIFO->Read();
|
||||
*(u32*)&data[12] = InputFIFO->Read();
|
||||
*(u32*)&data[0] = InputFIFO.Read();
|
||||
*(u32*)&data[4] = InputFIFO.Read();
|
||||
*(u32*)&data[8] = InputFIFO.Read();
|
||||
*(u32*)&data[12] = InputFIFO.Read();
|
||||
|
||||
//printf("AES-CTR: "); _printhex2(data, 16);
|
||||
|
||||
@ -233,10 +228,10 @@ void ProcessBlock_CTR()
|
||||
|
||||
//printf(" -> "); _printhex(data, 16);
|
||||
|
||||
OutputFIFO->Write(*(u32*)&data[0]);
|
||||
OutputFIFO->Write(*(u32*)&data[4]);
|
||||
OutputFIFO->Write(*(u32*)&data[8]);
|
||||
OutputFIFO->Write(*(u32*)&data[12]);
|
||||
OutputFIFO.Write(*(u32*)&data[0]);
|
||||
OutputFIFO.Write(*(u32*)&data[4]);
|
||||
OutputFIFO.Write(*(u32*)&data[8]);
|
||||
OutputFIFO.Write(*(u32*)&data[12]);
|
||||
}
|
||||
|
||||
|
||||
@ -244,8 +239,8 @@ u32 ReadCnt()
|
||||
{
|
||||
u32 ret = Cnt;
|
||||
|
||||
ret |= InputFIFO->Level();
|
||||
ret |= (OutputFIFO->Level() << 5);
|
||||
ret |= InputFIFO.Level();
|
||||
ret |= (OutputFIFO.Level() << 5);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -341,9 +336,9 @@ void WriteBlkCnt(u32 val)
|
||||
|
||||
u32 ReadOutputFIFO()
|
||||
{
|
||||
if (OutputFIFO->IsEmpty()) printf("!!! AES OUTPUT FIFO EMPTY\n");
|
||||
if (OutputFIFO.IsEmpty()) printf("!!! AES OUTPUT FIFO EMPTY\n");
|
||||
|
||||
u32 ret = OutputFIFO->Read();
|
||||
u32 ret = OutputFIFO.Read();
|
||||
|
||||
if (Cnt & (1<<31))
|
||||
{
|
||||
@ -352,17 +347,17 @@ u32 ReadOutputFIFO()
|
||||
}
|
||||
else
|
||||
{
|
||||
if (OutputFIFO->Level() > 0)
|
||||
if (OutputFIFO.Level() > 0)
|
||||
DSi::CheckNDMAs(1, 0x2B);
|
||||
else
|
||||
DSi::StopNDMAs(1, 0x2B);
|
||||
|
||||
if (OutputMACDue && OutputFIFO->Level() <= 12)
|
||||
if (OutputMACDue && OutputFIFO.Level() <= 12)
|
||||
{
|
||||
OutputFIFO->Write(*(u32*)&OutputMAC[0]);
|
||||
OutputFIFO->Write(*(u32*)&OutputMAC[4]);
|
||||
OutputFIFO->Write(*(u32*)&OutputMAC[8]);
|
||||
OutputFIFO->Write(*(u32*)&OutputMAC[12]);
|
||||
OutputFIFO.Write(*(u32*)&OutputMAC[0]);
|
||||
OutputFIFO.Write(*(u32*)&OutputMAC[4]);
|
||||
OutputFIFO.Write(*(u32*)&OutputMAC[8]);
|
||||
OutputFIFO.Write(*(u32*)&OutputMAC[12]);
|
||||
OutputMACDue = false;
|
||||
}
|
||||
}
|
||||
@ -374,9 +369,9 @@ void WriteInputFIFO(u32 val)
|
||||
{
|
||||
// TODO: add some delay to processing
|
||||
|
||||
if (InputFIFO->IsFull()) printf("!!! AES INPUT FIFO FULL\n");
|
||||
if (InputFIFO.IsFull()) printf("!!! AES INPUT FIFO FULL\n");
|
||||
|
||||
InputFIFO->Write(val);
|
||||
InputFIFO.Write(val);
|
||||
|
||||
if (!(Cnt & (1<<31))) return;
|
||||
|
||||
@ -387,7 +382,7 @@ void CheckInputDMA()
|
||||
{
|
||||
if (RemBlocks == 0) return;
|
||||
|
||||
if (InputFIFO->Level() <= InputDMASize)
|
||||
if (InputFIFO.Level() <= InputDMASize)
|
||||
{
|
||||
// trigger input DMA
|
||||
DSi::CheckNDMAs(1, 0x2A);
|
||||
@ -398,7 +393,7 @@ void CheckInputDMA()
|
||||
|
||||
void CheckOutputDMA()
|
||||
{
|
||||
if (OutputFIFO->Level() >= OutputDMASize)
|
||||
if (OutputFIFO.Level() >= OutputDMASize)
|
||||
{
|
||||
// trigger output DMA
|
||||
DSi::CheckNDMAs(1, 0x2B);
|
||||
@ -407,7 +402,7 @@ void CheckOutputDMA()
|
||||
|
||||
void Update()
|
||||
{
|
||||
while (InputFIFO->Level() >= 4 && OutputFIFO->Level() <= 12 && RemBlocks > 0)
|
||||
while (InputFIFO.Level() >= 4 && OutputFIFO.Level() <= 12 && RemBlocks > 0)
|
||||
{
|
||||
switch (AESMode)
|
||||
{
|
||||
@ -463,7 +458,7 @@ void Update()
|
||||
if (Cnt & (1<<30)) NDS::SetIRQ2(NDS::IRQ2_DSi_AES);
|
||||
DSi::StopNDMAs(1, 0x2A);
|
||||
|
||||
if (OutputFIFO->Level() > 0)
|
||||
if (!OutputFIFO.IsEmpty())
|
||||
DSi::CheckNDMAs(1, 0x2B);
|
||||
else
|
||||
DSi::StopNDMAs(1, 0x2B);
|
||||
|
Reference in New Issue
Block a user