mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-23 14:19:55 -06:00
* fixes to GXFIFO IRQ. refine IRQ support a bit.
* fix potential bug when multiple DMAs are running.
This commit is contained in:
12
DMA.cpp
12
DMA.cpp
@ -191,14 +191,14 @@ void DMA::Start()
|
|||||||
NDSCart::DMA(CurDstAddr);
|
NDSCart::DMA(CurDstAddr);
|
||||||
Cnt &= ~0x80000000;
|
Cnt &= ~0x80000000;
|
||||||
if (Cnt & 0x40000000)
|
if (Cnt & 0x40000000)
|
||||||
NDS::TriggerIRQ(CPU, NDS::IRQ_DMA0 + Num);
|
NDS::SetIRQ(CPU, NDS::IRQ_DMA0 + Num);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO eventually: not stop if we're running code in ITCM
|
// TODO eventually: not stop if we're running code in ITCM
|
||||||
|
|
||||||
Running = true;
|
Running = true;
|
||||||
NDS::StopCPU(CPU, true);
|
NDS::StopCPU(CPU, 1<<Num);
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 DMA::Run(s32 cycles)
|
s32 DMA::Run(s32 cycles)
|
||||||
@ -247,9 +247,9 @@ s32 DMA::Run(s32 cycles)
|
|||||||
if (IterCount == 0)
|
if (IterCount == 0)
|
||||||
{
|
{
|
||||||
Running = false;
|
Running = false;
|
||||||
NDS::StopCPU(CPU, false);
|
NDS::ResumeCPU(CPU, 1<<Num);
|
||||||
|
|
||||||
if (StartMode & 0x07)
|
if (StartMode == 0x07)
|
||||||
GPU3D::CheckFIFODMA();
|
GPU3D::CheckFIFODMA();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,10 +260,10 @@ s32 DMA::Run(s32 cycles)
|
|||||||
Cnt &= ~0x80000000;
|
Cnt &= ~0x80000000;
|
||||||
|
|
||||||
if (Cnt & 0x40000000)
|
if (Cnt & 0x40000000)
|
||||||
NDS::TriggerIRQ(CPU, NDS::IRQ_DMA0 + Num);
|
NDS::SetIRQ(CPU, NDS::IRQ_DMA0 + Num);
|
||||||
|
|
||||||
Running = false;
|
Running = false;
|
||||||
NDS::StopCPU(CPU, false);
|
NDS::ResumeCPU(CPU, 1<<Num);
|
||||||
|
|
||||||
return cycles - 2;
|
return cycles - 2;
|
||||||
}
|
}
|
||||||
|
12
GPU.cpp
12
GPU.cpp
@ -646,8 +646,8 @@ void StartHBlank(u32 line)
|
|||||||
|
|
||||||
if (line < 192) NDS::CheckDMAs(0, 0x02);
|
if (line < 192) NDS::CheckDMAs(0, 0x02);
|
||||||
|
|
||||||
if (DispStat[0] & (1<<4)) NDS::TriggerIRQ(0, NDS::IRQ_HBlank);
|
if (DispStat[0] & (1<<4)) NDS::SetIRQ(0, NDS::IRQ_HBlank);
|
||||||
if (DispStat[1] & (1<<4)) NDS::TriggerIRQ(1, NDS::IRQ_HBlank);
|
if (DispStat[1] & (1<<4)) NDS::SetIRQ(1, NDS::IRQ_HBlank);
|
||||||
|
|
||||||
if (line < 262)
|
if (line < 262)
|
||||||
NDS::ScheduleEvent(NDS::Event_LCD, true, (LINE_CYCLES - HBLANK_CYCLES), StartScanline, line+1);
|
NDS::ScheduleEvent(NDS::Event_LCD, true, (LINE_CYCLES - HBLANK_CYCLES), StartScanline, line+1);
|
||||||
@ -664,7 +664,7 @@ void StartScanline(u32 line)
|
|||||||
{
|
{
|
||||||
DispStat[0] |= (1<<2);
|
DispStat[0] |= (1<<2);
|
||||||
|
|
||||||
if (DispStat[0] & (1<<5)) NDS::TriggerIRQ(0, NDS::IRQ_VCount);
|
if (DispStat[0] & (1<<5)) NDS::SetIRQ(0, NDS::IRQ_VCount);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
DispStat[0] &= ~(1<<2);
|
DispStat[0] &= ~(1<<2);
|
||||||
@ -673,7 +673,7 @@ void StartScanline(u32 line)
|
|||||||
{
|
{
|
||||||
DispStat[1] |= (1<<2);
|
DispStat[1] |= (1<<2);
|
||||||
|
|
||||||
if (DispStat[1] & (1<<5)) NDS::TriggerIRQ(1, NDS::IRQ_VCount);
|
if (DispStat[1] & (1<<5)) NDS::SetIRQ(1, NDS::IRQ_VCount);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
DispStat[1] &= ~(1<<2);
|
DispStat[1] &= ~(1<<2);
|
||||||
@ -704,8 +704,8 @@ void StartScanline(u32 line)
|
|||||||
NDS::CheckDMAs(0, 0x01);
|
NDS::CheckDMAs(0, 0x01);
|
||||||
NDS::CheckDMAs(1, 0x11);
|
NDS::CheckDMAs(1, 0x11);
|
||||||
|
|
||||||
if (DispStat[0] & (1<<3)) NDS::TriggerIRQ(0, NDS::IRQ_VBlank);
|
if (DispStat[0] & (1<<3)) NDS::SetIRQ(0, NDS::IRQ_VBlank);
|
||||||
if (DispStat[1] & (1<<3)) NDS::TriggerIRQ(1, NDS::IRQ_VBlank);
|
if (DispStat[1] & (1<<3)) NDS::SetIRQ(1, NDS::IRQ_VBlank);
|
||||||
|
|
||||||
GPU2D_A->VBlank();
|
GPU2D_A->VBlank();
|
||||||
GPU2D_B->VBlank();
|
GPU2D_B->VBlank();
|
||||||
|
@ -1324,6 +1324,11 @@ void ExecuteCommand()
|
|||||||
Viewport[2] = ((ExecParams[0] >> 16) & 0xFF) - Viewport[0] + 1;
|
Viewport[2] = ((ExecParams[0] >> 16) & 0xFF) - Viewport[0] + 1;
|
||||||
Viewport[3] = (ExecParams[0] >> 24) - Viewport[1] + 1;
|
Viewport[3] = (ExecParams[0] >> 24) - Viewport[1] + 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
//if (entry.Command != 0x41)
|
||||||
|
//printf("!! UNKNOWN GX COMMAND %02X %08X\n", entry.Command, entry.Param);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1360,7 +1365,8 @@ void CheckFIFOIRQ()
|
|||||||
case 2: irq = CmdFIFO->IsEmpty(); break;
|
case 2: irq = CmdFIFO->IsEmpty(); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (irq) NDS::TriggerIRQ(0, NDS::IRQ_GXFIFO);
|
if (irq) NDS::SetIRQ(0, NDS::IRQ_GXFIFO);
|
||||||
|
else NDS::ClearIRQ(0, NDS::IRQ_GXFIFO);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CheckFIFODMA()
|
void CheckFIFODMA()
|
||||||
@ -1456,6 +1462,7 @@ void Write32(u32 addr, u32 val)
|
|||||||
val &= 0xC0000000;
|
val &= 0xC0000000;
|
||||||
GXStat &= 0x3FFFFFFF;
|
GXStat &= 0x3FFFFFFF;
|
||||||
GXStat |= val;
|
GXStat |= val;
|
||||||
|
CheckFIFOIRQ();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
50
NDS.cpp
50
NDS.cpp
@ -374,7 +374,7 @@ void RunFrame()
|
|||||||
|
|
||||||
CalcIterationCycles();
|
CalcIterationCycles();
|
||||||
|
|
||||||
if (CPUStop & 0x1)
|
if (CPUStop & 0xFFFF)
|
||||||
{
|
{
|
||||||
s32 cycles = CurIterationCycles;
|
s32 cycles = CurIterationCycles;
|
||||||
cycles = DMAs[0]->Run(cycles);
|
cycles = DMAs[0]->Run(cycles);
|
||||||
@ -393,7 +393,7 @@ void RunFrame()
|
|||||||
ndscyclestorun = ARM9->Cycles >> 1;
|
ndscyclestorun = ARM9->Cycles >> 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CPUStop & 0x2)
|
if (CPUStop & 0xFFFF0000)
|
||||||
{
|
{
|
||||||
s32 cycles = ndscyclestorun - ARM7Offset;
|
s32 cycles = ndscyclestorun - ARM7Offset;
|
||||||
cycles = DMAs[4]->Run(cycles);
|
cycles = DMAs[4]->Run(cycles);
|
||||||
@ -529,14 +529,14 @@ void MapSharedWRAM(u8 val)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void TriggerIRQ(u32 cpu, u32 irq)
|
void SetIRQ(u32 cpu, u32 irq)
|
||||||
{
|
{
|
||||||
irq = 1 << irq;
|
IF[cpu] |= (1 << irq);
|
||||||
IF[cpu] |= irq;
|
}
|
||||||
|
|
||||||
// this is redundant
|
void ClearIRQ(u32 cpu, u32 irq)
|
||||||
if (!(IME[cpu] & 0x1)) return;
|
{
|
||||||
//(cpu?ARM7:ARM9)->TriggerIRQ();
|
IF[cpu] &= ~(1 << irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HaltInterrupted(u32 cpu)
|
bool HaltInterrupted(u32 cpu)
|
||||||
@ -553,10 +553,16 @@ bool HaltInterrupted(u32 cpu)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StopCPU(u32 cpu, bool stop)
|
void StopCPU(u32 cpu, u32 mask)
|
||||||
{
|
{
|
||||||
if (stop) CPUStop |= (1<<cpu);
|
if (cpu) mask <<= 16;
|
||||||
else CPUStop &= ~(1<<cpu);
|
CPUStop |= mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ResumeCPU(u32 cpu, u32 mask)
|
||||||
|
{
|
||||||
|
if (cpu) mask <<= 16;
|
||||||
|
CPUStop &= ~mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -607,7 +613,7 @@ void TimerOverflow(u32 param)
|
|||||||
timer->Counter = timer->Reload << 16;
|
timer->Counter = timer->Reload << 16;
|
||||||
|
|
||||||
if (timer->Cnt & (1<<6))
|
if (timer->Cnt & (1<<6))
|
||||||
TriggerIRQ(cpu, IRQ_Timer0 + tid);
|
SetIRQ(cpu, IRQ_Timer0 + tid);
|
||||||
|
|
||||||
// cascade
|
// cascade
|
||||||
if (tid == 3)
|
if (tid == 3)
|
||||||
@ -1425,7 +1431,7 @@ u32 ARM9IORead32(u32 addr)
|
|||||||
ret = IPCFIFO7->Read();
|
ret = IPCFIFO7->Read();
|
||||||
|
|
||||||
if (IPCFIFO7->IsEmpty() && (IPCFIFOCnt7 & 0x0004))
|
if (IPCFIFO7->IsEmpty() && (IPCFIFOCnt7 & 0x0004))
|
||||||
TriggerIRQ(1, IRQ_IPCSendDone);
|
SetIRQ(1, IRQ_IPCSendDone);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -1554,7 +1560,7 @@ void ARM9IOWrite16(u32 addr, u16 val)
|
|||||||
IPCSync9 |= (val & 0x4F00);
|
IPCSync9 |= (val & 0x4F00);
|
||||||
if ((val & 0x2000) && (IPCSync7 & 0x4000))
|
if ((val & 0x2000) && (IPCSync7 & 0x4000))
|
||||||
{
|
{
|
||||||
TriggerIRQ(1, IRQ_IPCSync);
|
SetIRQ(1, IRQ_IPCSync);
|
||||||
}
|
}
|
||||||
//CompensateARM7();
|
//CompensateARM7();
|
||||||
return;
|
return;
|
||||||
@ -1563,9 +1569,9 @@ void ARM9IOWrite16(u32 addr, u16 val)
|
|||||||
if (val & 0x0008)
|
if (val & 0x0008)
|
||||||
IPCFIFO9->Clear();
|
IPCFIFO9->Clear();
|
||||||
if ((val & 0x0004) && (!(IPCFIFOCnt9 & 0x0004)) && IPCFIFO9->IsEmpty())
|
if ((val & 0x0004) && (!(IPCFIFOCnt9 & 0x0004)) && IPCFIFO9->IsEmpty())
|
||||||
TriggerIRQ(0, IRQ_IPCSendDone);
|
SetIRQ(0, IRQ_IPCSendDone);
|
||||||
if ((val & 0x0400) && (!(IPCFIFOCnt9 & 0x0400)) && (!IPCFIFO7->IsEmpty()))
|
if ((val & 0x0400) && (!(IPCFIFOCnt9 & 0x0400)) && (!IPCFIFO7->IsEmpty()))
|
||||||
TriggerIRQ(0, IRQ_IPCRecv);
|
SetIRQ(0, IRQ_IPCRecv);
|
||||||
if (val & 0x4000)
|
if (val & 0x4000)
|
||||||
IPCFIFOCnt9 &= ~0x4000;
|
IPCFIFOCnt9 &= ~0x4000;
|
||||||
IPCFIFOCnt9 = val & 0x8404;
|
IPCFIFOCnt9 = val & 0x8404;
|
||||||
@ -1695,7 +1701,7 @@ void ARM9IOWrite32(u32 addr, u32 val)
|
|||||||
bool wasempty = IPCFIFO9->IsEmpty();
|
bool wasempty = IPCFIFO9->IsEmpty();
|
||||||
IPCFIFO9->Write(val);
|
IPCFIFO9->Write(val);
|
||||||
if ((IPCFIFOCnt7 & 0x0400) && wasempty)
|
if ((IPCFIFOCnt7 & 0x0400) && wasempty)
|
||||||
TriggerIRQ(1, IRQ_IPCRecv);
|
SetIRQ(1, IRQ_IPCRecv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -1908,7 +1914,7 @@ u32 ARM7IORead32(u32 addr)
|
|||||||
ret = IPCFIFO9->Read();
|
ret = IPCFIFO9->Read();
|
||||||
|
|
||||||
if (IPCFIFO9->IsEmpty() && (IPCFIFOCnt9 & 0x0004))
|
if (IPCFIFO9->IsEmpty() && (IPCFIFOCnt9 & 0x0004))
|
||||||
TriggerIRQ(0, IRQ_IPCSendDone);
|
SetIRQ(0, IRQ_IPCSendDone);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -2023,7 +2029,7 @@ void ARM7IOWrite16(u32 addr, u16 val)
|
|||||||
IPCSync7 |= (val & 0x4F00);
|
IPCSync7 |= (val & 0x4F00);
|
||||||
if ((val & 0x2000) && (IPCSync9 & 0x4000))
|
if ((val & 0x2000) && (IPCSync9 & 0x4000))
|
||||||
{
|
{
|
||||||
TriggerIRQ(0, IRQ_IPCSync);
|
SetIRQ(0, IRQ_IPCSync);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -2031,9 +2037,9 @@ void ARM7IOWrite16(u32 addr, u16 val)
|
|||||||
if (val & 0x0008)
|
if (val & 0x0008)
|
||||||
IPCFIFO7->Clear();
|
IPCFIFO7->Clear();
|
||||||
if ((val & 0x0004) && (!(IPCFIFOCnt7 & 0x0004)) && IPCFIFO7->IsEmpty())
|
if ((val & 0x0004) && (!(IPCFIFOCnt7 & 0x0004)) && IPCFIFO7->IsEmpty())
|
||||||
TriggerIRQ(1, IRQ_IPCSendDone);
|
SetIRQ(1, IRQ_IPCSendDone);
|
||||||
if ((val & 0x0400) && (!(IPCFIFOCnt7 & 0x0400)) && (!IPCFIFO9->IsEmpty()))
|
if ((val & 0x0400) && (!(IPCFIFOCnt7 & 0x0400)) && (!IPCFIFO9->IsEmpty()))
|
||||||
TriggerIRQ(1, IRQ_IPCRecv);
|
SetIRQ(1, IRQ_IPCRecv);
|
||||||
if (val & 0x4000)
|
if (val & 0x4000)
|
||||||
IPCFIFOCnt7 &= ~0x4000;
|
IPCFIFOCnt7 &= ~0x4000;
|
||||||
IPCFIFOCnt7 = val & 0x8404;
|
IPCFIFOCnt7 = val & 0x8404;
|
||||||
@ -2135,7 +2141,7 @@ void ARM7IOWrite32(u32 addr, u32 val)
|
|||||||
bool wasempty = IPCFIFO7->IsEmpty();
|
bool wasempty = IPCFIFO7->IsEmpty();
|
||||||
IPCFIFO7->Write(val);
|
IPCFIFO7->Write(val);
|
||||||
if ((IPCFIFOCnt9 & 0x0400) && wasempty)
|
if ((IPCFIFOCnt9 & 0x0400) && wasempty)
|
||||||
TriggerIRQ(0, IRQ_IPCRecv);
|
SetIRQ(0, IRQ_IPCRecv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
6
NDS.h
6
NDS.h
@ -140,9 +140,11 @@ void Halt();
|
|||||||
|
|
||||||
void MapSharedWRAM(u8 val);
|
void MapSharedWRAM(u8 val);
|
||||||
|
|
||||||
void TriggerIRQ(u32 cpu, u32 irq);
|
void SetIRQ(u32 cpu, u32 irq);
|
||||||
|
void ClearIRQ(u32 cpu, u32 irq);
|
||||||
bool HaltInterrupted(u32 cpu);
|
bool HaltInterrupted(u32 cpu);
|
||||||
void StopCPU(u32 cpu, bool stop);
|
void StopCPU(u32 cpu, u32 mask);
|
||||||
|
void ResumeCPU(u32 cpu, u32 mask);
|
||||||
|
|
||||||
void CheckDMAs(u32 cpu, u32 mode);
|
void CheckDMAs(u32 cpu, u32 mode);
|
||||||
|
|
||||||
|
@ -713,7 +713,7 @@ void EndTransfer()
|
|||||||
ROMCnt &= ~(1<<31);
|
ROMCnt &= ~(1<<31);
|
||||||
|
|
||||||
if (SPICnt & (1<<14))
|
if (SPICnt & (1<<14))
|
||||||
NDS::TriggerIRQ((NDS::ExMemCnt[0]>>11)&0x1, NDS::IRQ_CartSendDone);
|
NDS::SetIRQ((NDS::ExMemCnt[0]>>11)&0x1, NDS::IRQ_CartSendDone);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ROMPrepareData(u32 param)
|
void ROMPrepareData(u32 param)
|
||||||
|
2
SPI.cpp
2
SPI.cpp
@ -451,7 +451,7 @@ void WriteData(u8 val)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Cnt & (1<<14))
|
if (Cnt & (1<<14))
|
||||||
NDS::TriggerIRQ(1, NDS::IRQ_SPI);
|
NDS::SetIRQ(1, NDS::IRQ_SPI);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,12 +5,12 @@
|
|||||||
"NDS.h"
|
"NDS.h"
|
||||||
"GPU.h"
|
"GPU.h"
|
||||||
|
|
||||||
1487303037 c:\documents\sources\melonds\nds.h
|
1488497585 c:\documents\sources\melonds\nds.h
|
||||||
"types.h"
|
"types.h"
|
||||||
|
|
||||||
1481161027 c:\documents\sources\melonds\types.h
|
1481161027 c:\documents\sources\melonds\types.h
|
||||||
|
|
||||||
1488477261 source:c:\documents\sources\melonds\nds.cpp
|
1488497660 source:c:\documents\sources\melonds\nds.cpp
|
||||||
<stdio.h>
|
<stdio.h>
|
||||||
<string.h>
|
<string.h>
|
||||||
"NDS.h"
|
"NDS.h"
|
||||||
@ -24,7 +24,7 @@
|
|||||||
"RTC.h"
|
"RTC.h"
|
||||||
"Wifi.h"
|
"Wifi.h"
|
||||||
|
|
||||||
1487349559 source:c:\documents\sources\melonds\arm.cpp
|
1488497771 source:c:\documents\sources\melonds\arm.cpp
|
||||||
<stdio.h>
|
<stdio.h>
|
||||||
"NDS.h"
|
"NDS.h"
|
||||||
"ARM.h"
|
"ARM.h"
|
||||||
@ -81,7 +81,7 @@
|
|||||||
|
|
||||||
1486502258 c:\documents\sources\melonds\spi.h
|
1486502258 c:\documents\sources\melonds\spi.h
|
||||||
|
|
||||||
1486502498 source:c:\documents\sources\melonds\spi.cpp
|
1488496264 source:c:\documents\sources\melonds\spi.cpp
|
||||||
<stdio.h>
|
<stdio.h>
|
||||||
<string.h>
|
<string.h>
|
||||||
"NDS.h"
|
"NDS.h"
|
||||||
@ -109,7 +109,7 @@
|
|||||||
1486511075 c:\documents\sources\melonds\fifo.h
|
1486511075 c:\documents\sources\melonds\fifo.h
|
||||||
"types.h"
|
"types.h"
|
||||||
|
|
||||||
1487354030 source:c:\documents\sources\melonds\dma.cpp
|
1488497840 source:c:\documents\sources\melonds\dma.cpp
|
||||||
<stdio.h>
|
<stdio.h>
|
||||||
"NDS.h"
|
"NDS.h"
|
||||||
"DMA.h"
|
"DMA.h"
|
||||||
@ -119,7 +119,7 @@
|
|||||||
1487305393 c:\documents\sources\melonds\dma.h
|
1487305393 c:\documents\sources\melonds\dma.h
|
||||||
"types.h"
|
"types.h"
|
||||||
|
|
||||||
1488227337 source:c:\documents\sources\melonds\gpu.cpp
|
1488496264 source:c:\documents\sources\melonds\gpu.cpp
|
||||||
<stdio.h>
|
<stdio.h>
|
||||||
<string.h>
|
<string.h>
|
||||||
"NDS.h"
|
"NDS.h"
|
||||||
@ -140,15 +140,15 @@
|
|||||||
1486506409 c:\documents\sources\melonds\ndscart.h
|
1486506409 c:\documents\sources\melonds\ndscart.h
|
||||||
"types.h"
|
"types.h"
|
||||||
|
|
||||||
1486506451 source:c:\documents\sources\melonds\ndscart.cpp
|
1488496264 source:c:\documents\sources\melonds\ndscart.cpp
|
||||||
<stdio.h>
|
<stdio.h>
|
||||||
<string.h>
|
<string.h>
|
||||||
"NDS.h"
|
"NDS.h"
|
||||||
"NDSCart.h"
|
"NDSCart.h"
|
||||||
|
|
||||||
1488239485 c:\documents\sources\melonds\gpu3d.h
|
1488497796 c:\documents\sources\melonds\gpu3d.h
|
||||||
|
|
||||||
1488410045 source:c:\documents\sources\melonds\gpu3d.cpp
|
1488497825 source:c:\documents\sources\melonds\gpu3d.cpp
|
||||||
<stdio.h>
|
<stdio.h>
|
||||||
<string.h>
|
<string.h>
|
||||||
"NDS.h"
|
"NDS.h"
|
||||||
|
Reference in New Issue
Block a user