mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-21 21:31:00 -06:00
make FIFO size static whene possible
This commit is contained in:
78
src/NDS.cpp
78
src/NDS.cpp
@ -139,8 +139,8 @@ u32 DMA9Fill[4];
|
||||
|
||||
u16 IPCSync9, IPCSync7;
|
||||
u16 IPCFIFOCnt9, IPCFIFOCnt7;
|
||||
FIFO<u32>* IPCFIFO9; // FIFO in which the ARM9 writes
|
||||
FIFO<u32>* IPCFIFO7;
|
||||
FIFO<u32, 16> IPCFIFO9; // FIFO in which the ARM9 writes
|
||||
FIFO<u32, 16> IPCFIFO7;
|
||||
|
||||
u16 DivCnt;
|
||||
u32 DivNumerator[2];
|
||||
@ -190,9 +190,6 @@ bool Init()
|
||||
DMAs[6] = new DMA(1, 2);
|
||||
DMAs[7] = new DMA(1, 3);
|
||||
|
||||
IPCFIFO9 = new FIFO<u32>(16);
|
||||
IPCFIFO7 = new FIFO<u32>(16);
|
||||
|
||||
if (!NDSCart::Init()) return false;
|
||||
if (!GBACart::Init()) return false;
|
||||
if (!GPU::Init()) return false;
|
||||
@ -220,9 +217,6 @@ void DeInit()
|
||||
for (int i = 0; i < 8; i++)
|
||||
delete DMAs[i];
|
||||
|
||||
delete IPCFIFO9;
|
||||
delete IPCFIFO7;
|
||||
|
||||
NDSCart::DeInit();
|
||||
GBACart::DeInit();
|
||||
GPU::DeInit();
|
||||
@ -557,8 +551,8 @@ void Reset()
|
||||
IPCSync7 = 0;
|
||||
IPCFIFOCnt9 = 0;
|
||||
IPCFIFOCnt7 = 0;
|
||||
IPCFIFO9->Clear();
|
||||
IPCFIFO7->Clear();
|
||||
IPCFIFO9.Clear();
|
||||
IPCFIFO7.Clear();
|
||||
|
||||
DivCnt = 0;
|
||||
SqrtCnt = 0;
|
||||
@ -736,8 +730,8 @@ bool DoSavestate(Savestate* file)
|
||||
file->Var16(&IPCSync7);
|
||||
file->Var16(&IPCFIFOCnt9);
|
||||
file->Var16(&IPCFIFOCnt7);
|
||||
IPCFIFO9->DoSavestate(file);
|
||||
IPCFIFO7->DoSavestate(file);
|
||||
IPCFIFO9.DoSavestate(file);
|
||||
IPCFIFO7.DoSavestate(file);
|
||||
|
||||
file->Var16(&DivCnt);
|
||||
file->Var16(&SqrtCnt);
|
||||
@ -2899,10 +2893,10 @@ u16 ARM9IORead16(u32 addr)
|
||||
case 0x04000184:
|
||||
{
|
||||
u16 val = IPCFIFOCnt9;
|
||||
if (IPCFIFO9->IsEmpty()) val |= 0x0001;
|
||||
else if (IPCFIFO9->IsFull()) val |= 0x0002;
|
||||
if (IPCFIFO7->IsEmpty()) val |= 0x0100;
|
||||
else if (IPCFIFO7->IsFull()) val |= 0x0200;
|
||||
if (IPCFIFO9.IsEmpty()) val |= 0x0001;
|
||||
else if (IPCFIFO9.IsFull()) val |= 0x0002;
|
||||
if (IPCFIFO7.IsEmpty()) val |= 0x0100;
|
||||
else if (IPCFIFO7.IsFull()) val |= 0x0200;
|
||||
return val;
|
||||
}
|
||||
|
||||
@ -3057,22 +3051,22 @@ u32 ARM9IORead32(u32 addr)
|
||||
if (IPCFIFOCnt9 & 0x8000)
|
||||
{
|
||||
u32 ret;
|
||||
if (IPCFIFO7->IsEmpty())
|
||||
if (IPCFIFO7.IsEmpty())
|
||||
{
|
||||
IPCFIFOCnt9 |= 0x4000;
|
||||
ret = IPCFIFO7->Peek();
|
||||
ret = IPCFIFO7.Peek();
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = IPCFIFO7->Read();
|
||||
ret = IPCFIFO7.Read();
|
||||
|
||||
if (IPCFIFO7->IsEmpty() && (IPCFIFOCnt7 & 0x0004))
|
||||
if (IPCFIFO7.IsEmpty() && (IPCFIFOCnt7 & 0x0004))
|
||||
SetIRQ(1, IRQ_IPCSendDone);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
return IPCFIFO7->Peek();
|
||||
return IPCFIFO7.Peek();
|
||||
|
||||
case 0x04100010:
|
||||
if (!(ExMemCnt[0] & (1<<11))) return NDSCart::ReadROMData();
|
||||
@ -3238,10 +3232,10 @@ void ARM9IOWrite16(u32 addr, u16 val)
|
||||
|
||||
case 0x04000184:
|
||||
if (val & 0x0008)
|
||||
IPCFIFO9->Clear();
|
||||
if ((val & 0x0004) && (!(IPCFIFOCnt9 & 0x0004)) && IPCFIFO9->IsEmpty())
|
||||
IPCFIFO9.Clear();
|
||||
if ((val & 0x0004) && (!(IPCFIFOCnt9 & 0x0004)) && IPCFIFO9.IsEmpty())
|
||||
SetIRQ(0, IRQ_IPCSendDone);
|
||||
if ((val & 0x0400) && (!(IPCFIFOCnt9 & 0x0400)) && (!IPCFIFO7->IsEmpty()))
|
||||
if ((val & 0x0400) && (!(IPCFIFOCnt9 & 0x0400)) && (!IPCFIFO7.IsEmpty()))
|
||||
SetIRQ(0, IRQ_IPCRecv);
|
||||
if (val & 0x4000)
|
||||
IPCFIFOCnt9 &= ~0x4000;
|
||||
@ -3407,12 +3401,12 @@ void ARM9IOWrite32(u32 addr, u32 val)
|
||||
case 0x04000188:
|
||||
if (IPCFIFOCnt9 & 0x8000)
|
||||
{
|
||||
if (IPCFIFO9->IsFull())
|
||||
if (IPCFIFO9.IsFull())
|
||||
IPCFIFOCnt9 |= 0x4000;
|
||||
else
|
||||
{
|
||||
bool wasempty = IPCFIFO9->IsEmpty();
|
||||
IPCFIFO9->Write(val);
|
||||
bool wasempty = IPCFIFO9.IsEmpty();
|
||||
IPCFIFO9.Write(val);
|
||||
if ((IPCFIFOCnt7 & 0x0400) && wasempty)
|
||||
SetIRQ(1, IRQ_IPCRecv);
|
||||
}
|
||||
@ -3590,10 +3584,10 @@ u16 ARM7IORead16(u32 addr)
|
||||
case 0x04000184:
|
||||
{
|
||||
u16 val = IPCFIFOCnt7;
|
||||
if (IPCFIFO7->IsEmpty()) val |= 0x0001;
|
||||
else if (IPCFIFO7->IsFull()) val |= 0x0002;
|
||||
if (IPCFIFO9->IsEmpty()) val |= 0x0100;
|
||||
else if (IPCFIFO9->IsFull()) val |= 0x0200;
|
||||
if (IPCFIFO7.IsEmpty()) val |= 0x0001;
|
||||
else if (IPCFIFO7.IsFull()) val |= 0x0002;
|
||||
if (IPCFIFO9.IsEmpty()) val |= 0x0100;
|
||||
else if (IPCFIFO9.IsFull()) val |= 0x0200;
|
||||
return val;
|
||||
}
|
||||
|
||||
@ -3689,22 +3683,22 @@ u32 ARM7IORead32(u32 addr)
|
||||
if (IPCFIFOCnt7 & 0x8000)
|
||||
{
|
||||
u32 ret;
|
||||
if (IPCFIFO9->IsEmpty())
|
||||
if (IPCFIFO9.IsEmpty())
|
||||
{
|
||||
IPCFIFOCnt7 |= 0x4000;
|
||||
ret = IPCFIFO9->Peek();
|
||||
ret = IPCFIFO9.Peek();
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = IPCFIFO9->Read();
|
||||
ret = IPCFIFO9.Read();
|
||||
|
||||
if (IPCFIFO9->IsEmpty() && (IPCFIFOCnt9 & 0x0004))
|
||||
if (IPCFIFO9.IsEmpty() && (IPCFIFOCnt9 & 0x0004))
|
||||
SetIRQ(0, IRQ_IPCSendDone);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
return IPCFIFO9->Peek();
|
||||
return IPCFIFO9.Peek();
|
||||
|
||||
case 0x04100010:
|
||||
if (ExMemCnt[0] & (1<<11)) return NDSCart::ReadROMData();
|
||||
@ -3841,10 +3835,10 @@ void ARM7IOWrite16(u32 addr, u16 val)
|
||||
|
||||
case 0x04000184:
|
||||
if (val & 0x0008)
|
||||
IPCFIFO7->Clear();
|
||||
if ((val & 0x0004) && (!(IPCFIFOCnt7 & 0x0004)) && IPCFIFO7->IsEmpty())
|
||||
IPCFIFO7.Clear();
|
||||
if ((val & 0x0004) && (!(IPCFIFOCnt7 & 0x0004)) && IPCFIFO7.IsEmpty())
|
||||
SetIRQ(1, IRQ_IPCSendDone);
|
||||
if ((val & 0x0400) && (!(IPCFIFOCnt7 & 0x0400)) && (!IPCFIFO9->IsEmpty()))
|
||||
if ((val & 0x0400) && (!(IPCFIFOCnt7 & 0x0400)) && (!IPCFIFO9.IsEmpty()))
|
||||
SetIRQ(1, IRQ_IPCRecv);
|
||||
if (val & 0x4000)
|
||||
IPCFIFOCnt7 &= ~0x4000;
|
||||
@ -3977,12 +3971,12 @@ void ARM7IOWrite32(u32 addr, u32 val)
|
||||
case 0x04000188:
|
||||
if (IPCFIFOCnt7 & 0x8000)
|
||||
{
|
||||
if (IPCFIFO7->IsFull())
|
||||
if (IPCFIFO7.IsFull())
|
||||
IPCFIFOCnt7 |= 0x4000;
|
||||
else
|
||||
{
|
||||
bool wasempty = IPCFIFO7->IsEmpty();
|
||||
IPCFIFO7->Write(val);
|
||||
bool wasempty = IPCFIFO7.IsEmpty();
|
||||
IPCFIFO7.Write(val);
|
||||
if ((IPCFIFOCnt9 & 0x0400) && wasempty)
|
||||
SetIRQ(0, IRQ_IPCRecv);
|
||||
}
|
||||
|
Reference in New Issue
Block a user