aboutsummaryrefslogtreecommitdiff
path: root/src/NDS.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/NDS.cpp')
-rw-r--r--src/NDS.cpp78
1 files changed, 36 insertions, 42 deletions
diff --git a/src/NDS.cpp b/src/NDS.cpp
index 896af86..7131bae 100644
--- a/src/NDS.cpp
+++ b/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);
}