aboutsummaryrefslogtreecommitdiff
path: root/NDS.cpp
diff options
context:
space:
mode:
authorStapleButter <thetotalworm@gmail.com>2017-01-18 17:57:12 +0100
committerStapleButter <thetotalworm@gmail.com>2017-01-18 17:57:12 +0100
commitd7c1d2a2cdb39c5e0bc6c3711968b876485d758a (patch)
treeed7f95ad0cf489535c4637e25279419f6974659b /NDS.cpp
parentd30e6956fa59182a23941a535d5f6c2bf515918a (diff)
* start GPU shit: draw BG0 16-color.
* fix a few DMA bugs. * fix a bug where some code could still run right after a halt instruction. * fix VRAM mapping, too. I'm an idiot.
Diffstat (limited to 'NDS.cpp')
-rw-r--r--NDS.cpp39
1 files changed, 25 insertions, 14 deletions
diff --git a/NDS.cpp b/NDS.cpp
index fde36ac..d0fcbb7 100644
--- a/NDS.cpp
+++ b/NDS.cpp
@@ -484,10 +484,9 @@ void MapSharedWRAM(u8 val)
void TriggerIRQ(u32 cpu, u32 irq)
{
irq = 1 << irq;
- //if (!(IE[cpu] & irq)) return;
-
IF[cpu] |= irq;
+ // this is redundant
if (!(IME[cpu] & 0x1)) return;
(cpu?ARM7:ARM9)->TriggerIRQ();
}
@@ -772,8 +771,8 @@ u8 ARM9Read8(u32 addr)
switch (addr & 0x00E00000)
{
case 0x00000000: vram = GPU::VRAM_ABG[chunk]; break;
- case 0x00200000: vram = GPU::VRAM_AOBJ[chunk]; break;
- case 0x00400000: vram = GPU::VRAM_BBG[chunk]; break;
+ case 0x00200000: vram = GPU::VRAM_BBG[chunk]; break;
+ case 0x00400000: vram = GPU::VRAM_AOBJ[chunk]; break;
case 0x00600000: vram = GPU::VRAM_BOBJ[chunk]; break;
case 0x00800000: vram = GPU::VRAM_LCD[chunk]; break;
}
@@ -784,6 +783,10 @@ u8 ARM9Read8(u32 addr)
case 0x07000000:
return *(u8*)&GPU::OAM[addr & 0x7FF];
+
+ case 0x08000000:
+ case 0x09000000:
+ return 0xFF;
}
printf("unknown arm9 read8 %08X\n", addr);
@@ -827,8 +830,8 @@ u16 ARM9Read16(u32 addr)
switch (addr & 0x00E00000)
{
case 0x00000000: vram = GPU::VRAM_ABG[chunk]; break;
- case 0x00200000: vram = GPU::VRAM_AOBJ[chunk]; break;
- case 0x00400000: vram = GPU::VRAM_BBG[chunk]; break;
+ case 0x00200000: vram = GPU::VRAM_BBG[chunk]; break;
+ case 0x00400000: vram = GPU::VRAM_AOBJ[chunk]; break;
case 0x00600000: vram = GPU::VRAM_BOBJ[chunk]; break;
case 0x00800000: vram = GPU::VRAM_LCD[chunk]; break;
}
@@ -839,6 +842,10 @@ u16 ARM9Read16(u32 addr)
case 0x07000000:
return *(u16*)&GPU::OAM[addr & 0x7FF];
+
+ case 0x08000000:
+ case 0x09000000:
+ return 0xFFFF;
}
printf("unknown arm9 read16 %08X\n", addr);
@@ -897,8 +904,8 @@ u32 ARM9Read32(u32 addr)
switch (addr & 0x00E00000)
{
case 0x00000000: vram = GPU::VRAM_ABG[chunk]; break;
- case 0x00200000: vram = GPU::VRAM_AOBJ[chunk]; break;
- case 0x00400000: vram = GPU::VRAM_BBG[chunk]; break;
+ case 0x00200000: vram = GPU::VRAM_BBG[chunk]; break;
+ case 0x00400000: vram = GPU::VRAM_AOBJ[chunk]; break;
case 0x00600000: vram = GPU::VRAM_BOBJ[chunk]; break;
case 0x00800000: vram = GPU::VRAM_LCD[chunk]; break;
}
@@ -909,6 +916,10 @@ u32 ARM9Read32(u32 addr)
case 0x07000000:
return *(u32*)&GPU::OAM[addr & 0x7FF];
+
+ case 0x08000000:
+ case 0x09000000:
+ return 0xFFFFFFFF;
}
printf("unknown arm9 read32 %08X | %08X %08X %08X\n", addr, ARM9->R[15], ARM9->R[12], ARM9Read32(0x027FF820));
@@ -990,8 +1001,8 @@ void ARM9Write16(u32 addr, u16 val)
switch (addr & 0x00E00000)
{
case 0x00000000: vram = GPU::VRAM_ABG[chunk]; break;
- case 0x00200000: vram = GPU::VRAM_AOBJ[chunk]; break;
- case 0x00400000: vram = GPU::VRAM_BBG[chunk]; break;
+ case 0x00200000: vram = GPU::VRAM_BBG[chunk]; break;
+ case 0x00400000: vram = GPU::VRAM_AOBJ[chunk]; break;
case 0x00600000: vram = GPU::VRAM_BOBJ[chunk]; break;
case 0x00800000: vram = GPU::VRAM_LCD[chunk]; break;
}
@@ -1047,8 +1058,8 @@ void ARM9Write32(u32 addr, u32 val)
switch (addr & 0x00E00000)
{
case 0x00000000: vram = GPU::VRAM_ABG[chunk]; break;
- case 0x00200000: vram = GPU::VRAM_AOBJ[chunk]; break;
- case 0x00400000: vram = GPU::VRAM_BBG[chunk]; break;
+ case 0x00200000: vram = GPU::VRAM_BBG[chunk]; break;
+ case 0x00400000: vram = GPU::VRAM_AOBJ[chunk]; break;
case 0x00600000: vram = GPU::VRAM_BOBJ[chunk]; break;
case 0x00800000: vram = GPU::VRAM_LCD[chunk]; break;
}
@@ -1396,7 +1407,7 @@ u16 ARM9IORead16(u32 addr)
return GPU::GPU2D_B->Read16(addr);
}
- printf("unknown ARM9 IO read16 %08X\n", addr);
+ printf("unknown ARM9 IO read16 %08X %08X\n", addr, ARM9->R[15]);
return 0;
}
@@ -1792,7 +1803,7 @@ u16 ARM7IORead16(u32 addr)
case 0x04000504: return _soundbias;
}
- printf("unknown ARM7 IO read16 %08X\n", addr);
+ printf("unknown ARM7 IO read16 %08X %08X\n", addr, ARM9->R[15]);
return 0;
}