mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-06-28 01:49:42 -06:00
* some basic BG display code
* basic, frozen-in-time RTC * power management device
This commit is contained in:
51
NDS.cpp
51
NDS.cpp
@ -25,6 +25,7 @@
|
||||
#include "FIFO.h"
|
||||
#include "GPU.h"
|
||||
#include "SPI.h"
|
||||
#include "RTC.h"
|
||||
#include "Wifi.h"
|
||||
|
||||
// derp
|
||||
@ -128,6 +129,7 @@ void Init()
|
||||
|
||||
GPU::Init();
|
||||
SPI::Init();
|
||||
RTC::Init();
|
||||
|
||||
Reset();
|
||||
}
|
||||
@ -248,6 +250,7 @@ void Reset()
|
||||
|
||||
GPU::Reset();
|
||||
SPI::Reset();
|
||||
RTC::Reset();
|
||||
Wifi::Reset();
|
||||
|
||||
memset(SchedBuffer, 0, sizeof(SchedEvent)*SCHED_BUF_LEN);
|
||||
@ -1022,6 +1025,7 @@ void ARM9Write16(u32 addr, u16 val)
|
||||
void ARM9Write32(u32 addr, u32 val)
|
||||
{
|
||||
if (addr == ARM9->R[15]) printf("!!!!!!!!!!!!9999 %08X %08X\n", addr, val);
|
||||
if (addr == 0x023549F0) printf("%08X STATE=%08X\n", ARM9->R[15], val);
|
||||
if (addr < ARM9ITCMSize)
|
||||
{
|
||||
*(u32*)&ARM9ITCM[addr & 0x7FFF] = val;
|
||||
@ -1203,6 +1207,7 @@ u32 ARM7Read32(u32 addr)
|
||||
void ARM7Write8(u32 addr, u8 val)
|
||||
{
|
||||
if (addr==0x3807764) printf("DERP! %02X %08X\n", val, ARM7->R[15]);
|
||||
if (addr==0x27FFCE4) printf("FIRMWARE STATUS8 %04X %08X\n", val, ARM7->R[15]);
|
||||
switch (addr & 0xFF800000)
|
||||
{
|
||||
case 0x02000000:
|
||||
@ -1240,6 +1245,8 @@ void ARM7Write16(u32 addr, u16 val)
|
||||
{
|
||||
if (addr == ARM7->R[15]) printf("!!!!!!!!!!!!7777 %08X %04X\n", addr, val);
|
||||
if (addr==0x3807764) printf("DERP! %04X %08X\n", val, ARM7->R[15]);
|
||||
if (addr==0x27FF816) printf("RTC STATUS %04X %08X\n", val, ARM7->R[15]);
|
||||
if (addr==0x27FFCE4) printf("FIRMWARE STATUS %04X %08X\n", val, ARM7->R[15]);
|
||||
switch (addr & 0xFF800000)
|
||||
{
|
||||
case 0x02000000:
|
||||
@ -1280,7 +1287,7 @@ void ARM7Write16(u32 addr, u16 val)
|
||||
void ARM7Write32(u32 addr, u32 val)
|
||||
{
|
||||
if (addr == ARM7->R[15]) printf("!!!!!!!!!!!!7777 %08X %08X\n", addr, val);
|
||||
|
||||
if (addr==0x27FFCE4) printf("FIRMWARE STATUS32 %08X %08X\n", val, ARM7->R[15]);
|
||||
switch (addr & 0xFF800000)
|
||||
{
|
||||
case 0x02000000:
|
||||
@ -1689,7 +1696,7 @@ void ARM9IOWrite32(u32 addr, u32 val)
|
||||
return;
|
||||
|
||||
case 0x04000208: IME[0] = val & 0x1; return;
|
||||
case 0x04000210: IE[0] = val; return;
|
||||
case 0x04000210: IE[0] = val; if (val&~0x000F0F7D)printf("unusual IRQ %08X\n",val);return;
|
||||
case 0x04000214: IF[0] &= ~val; return;
|
||||
|
||||
case 0x04000240:
|
||||
@ -1734,7 +1741,7 @@ u8 ARM7IORead8(u32 addr)
|
||||
{
|
||||
switch (addr)
|
||||
{
|
||||
case 0x04000138: return 0; // RTC shit
|
||||
case 0x04000138: return RTC::Read() & 0xFF;
|
||||
|
||||
case 0x040001C2: return SPI::ReadData();
|
||||
|
||||
@ -1749,6 +1756,7 @@ u8 ARM7IORead8(u32 addr)
|
||||
//Halt();
|
||||
//return 0;
|
||||
}
|
||||
|
||||
if (addr >= 0x04000400 && addr < 0x04000520)
|
||||
{
|
||||
// sound I/O
|
||||
@ -1779,7 +1787,7 @@ u16 ARM7IORead16(u32 addr)
|
||||
case 0x04000136: return KeyInput >> 16;
|
||||
|
||||
case 0x04000134: return 0x8000;
|
||||
case 0x04000138: return 0; // RTC shit. TODO!!
|
||||
case 0x04000138: return RTC::Read();
|
||||
|
||||
case 0x04000180: return IPCSync7;
|
||||
case 0x04000184:
|
||||
@ -1803,6 +1811,12 @@ u16 ARM7IORead16(u32 addr)
|
||||
case 0x04000504: return _soundbias;
|
||||
}
|
||||
|
||||
if (addr >= 0x04000400 && addr < 0x04000520)
|
||||
{
|
||||
// sound I/O
|
||||
return 0;
|
||||
}
|
||||
|
||||
printf("unknown ARM7 IO read16 %08X %08X\n", addr, ARM9->R[15]);
|
||||
return 0;
|
||||
}
|
||||
@ -1865,6 +1879,12 @@ u32 ARM7IORead32(u32 addr)
|
||||
case 0x04100010: return ROMReadData(1);
|
||||
}
|
||||
|
||||
if (addr >= 0x04000400 && addr < 0x04000520)
|
||||
{
|
||||
// sound I/O
|
||||
return 0;
|
||||
}
|
||||
|
||||
printf("unknown ARM7 IO read32 %08X\n", addr);
|
||||
return 0;
|
||||
}
|
||||
@ -1873,8 +1893,7 @@ void ARM7IOWrite8(u32 addr, u8 val)
|
||||
{
|
||||
switch (addr)
|
||||
{
|
||||
case 0x04000138:
|
||||
return;
|
||||
case 0x04000138: RTC::Write(val, true); return;
|
||||
|
||||
case 0x040001A0:
|
||||
ROMSPIControl &= 0xFF00;
|
||||
@ -1912,6 +1931,12 @@ void ARM7IOWrite8(u32 addr, u8 val)
|
||||
return;
|
||||
}
|
||||
|
||||
if (addr >= 0x04000400 && addr < 0x04000520)
|
||||
{
|
||||
// sound I/O
|
||||
return;
|
||||
}
|
||||
|
||||
printf("unknown ARM7 IO write8 %08X %02X\n", addr, val);
|
||||
}
|
||||
|
||||
@ -1932,7 +1957,7 @@ void ARM7IOWrite16(u32 addr, u16 val)
|
||||
|
||||
case 0x04000134: return;printf("set debug port %04X %08X\n", val, ARM7Read32(ARM7->R[13]+4)); return;
|
||||
|
||||
case 0x04000138: return; // RTC shit. TODO
|
||||
case 0x04000138: RTC::Write(val, false); return;
|
||||
|
||||
case 0x04000180:
|
||||
IPCSync9 &= 0xFFF0;
|
||||
@ -1985,6 +2010,12 @@ void ARM7IOWrite16(u32 addr, u16 val)
|
||||
return;
|
||||
}
|
||||
|
||||
if (addr >= 0x04000400 && addr < 0x04000520)
|
||||
{
|
||||
// sound I/O
|
||||
return;
|
||||
}
|
||||
|
||||
printf("unknown ARM7 IO write16 %08X %04X\n", addr, val);
|
||||
}
|
||||
|
||||
@ -2052,6 +2083,12 @@ void ARM7IOWrite32(u32 addr, u32 val)
|
||||
case 0x04000214: IF[1] &= ~val; return;
|
||||
}
|
||||
|
||||
if (addr >= 0x04000400 && addr < 0x04000520)
|
||||
{
|
||||
// sound I/O
|
||||
return;
|
||||
}
|
||||
|
||||
printf("unknown ARM7 IO write32 %08X %08X\n", addr, val);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user