diff options
Diffstat (limited to 'src/DSi.cpp')
-rw-r--r-- | src/DSi.cpp | 61 |
1 files changed, 49 insertions, 12 deletions
diff --git a/src/DSi.cpp b/src/DSi.cpp index e8b1231..bcc1f92 100644 --- a/src/DSi.cpp +++ b/src/DSi.cpp @@ -35,6 +35,7 @@ #include "DSi_I2C.h" #include "DSi_SD.h" #include "DSi_AES.h" +#include "DSi_Camera.h" #include "tiny-AES-c/aes.hpp" @@ -542,15 +543,15 @@ void MapNWRAM_A(u32 num, u8 val) return; } -#ifdef JIT_ENABLED - ARMJIT_Memory::RemapNWRAM(0); -#endif - int mbkn = 0, mbks = 8*num; u8 oldval = (MBK[0][mbkn] >> mbks) & 0xFF; if (oldval == val) return; +#ifdef JIT_ENABLED + ARMJIT_Memory::RemapNWRAM(0); +#endif + MBK[0][mbkn] &= ~(0xFF << mbks); MBK[0][mbkn] |= (val << mbks); MBK[1][mbkn] = MBK[0][mbkn]; @@ -577,15 +578,15 @@ void MapNWRAM_B(u32 num, u8 val) return; } -#ifdef JIT_ENABLED - ARMJIT_Memory::RemapNWRAM(1); -#endif - int mbkn = 1+(num>>2), mbks = 8*(num&3); u8 oldval = (MBK[0][mbkn] >> mbks) & 0xFF; if (oldval == val) return; +#ifdef JIT_ENABLED + ARMJIT_Memory::RemapNWRAM(1); +#endif + MBK[0][mbkn] &= ~(0xFF << mbks); MBK[0][mbkn] |= (val << mbks); MBK[1][mbkn] = MBK[0][mbkn]; @@ -616,15 +617,15 @@ void MapNWRAM_C(u32 num, u8 val) return; } -#ifdef JIT_ENABLED - ARMJIT_Memory::RemapNWRAM(2); -#endif - int mbkn = 3+(num>>2), mbks = 8*(num&3); u8 oldval = (MBK[0][mbkn] >> mbks) & 0xFF; if (oldval == val) return; +#ifdef JIT_ENABLED + ARMJIT_Memory::RemapNWRAM(2); +#endif + MBK[0][mbkn] &= ~(0xFF << mbks); MBK[0][mbkn] |= (val << mbks); MBK[1][mbkn] = MBK[0][mbkn]; @@ -1406,6 +1407,12 @@ u8 ARM9IORead8(u32 addr) CASE_READ8_32BIT(0x04004060, MBK[0][8]) } + if ((addr & 0xFFFFFF00) == 0x04004200) + { + if (!(SCFG_EXT[0] & (1<<17))) return 0; + return DSi_Camera::Read8(addr); + } + return NDS::ARM9IORead8(addr); } @@ -1428,6 +1435,12 @@ u16 ARM9IORead16(u32 addr) CASE_READ16_32BIT(0x04004060, MBK[0][8]) } + if ((addr & 0xFFFFFF00) == 0x04004200) + { + if (!(SCFG_EXT[0] & (1<<17))) return 0; + return DSi_Camera::Read16(addr); + } + return NDS::ARM9IORead16(addr); } @@ -1480,6 +1493,12 @@ u32 ARM9IORead32(u32 addr) case 0x04004170: return NDMAs[3]->Cnt; } + if ((addr & 0xFFFFFF00) == 0x04004200) + { + if (!(SCFG_EXT[0] & (1<<17))) return 0; + return DSi_Camera::Read32(addr); + } + return NDS::ARM9IORead32(addr); } @@ -1519,6 +1538,12 @@ void ARM9IOWrite8(u32 addr, u8 val) case 0x04004053: MapNWRAM_C(7, val); return; } + if ((addr & 0xFFFFFF00) == 0x04004200) + { + if (!(SCFG_EXT[0] & (1<<17))) return; + return DSi_Camera::Write8(addr, val); + } + return NDS::ARM9IOWrite8(addr, val); } @@ -1572,6 +1597,12 @@ void ARM9IOWrite16(u32 addr, u16 val) return; } + if ((addr & 0xFFFFFF00) == 0x04004200) + { + if (!(SCFG_EXT[0] & (1<<17))) return; + return DSi_Camera::Write16(addr, val); + } + return NDS::ARM9IOWrite16(addr, val); } @@ -1678,6 +1709,12 @@ void ARM9IOWrite32(u32 addr, u32 val) case 0x04004170: NDMAs[3]->WriteCnt(val); return; } + if ((addr & 0xFFFFFF00) == 0x04004200) + { + if (!(SCFG_EXT[0] & (1<<17))) return; + return DSi_Camera::Write32(addr, val); + } + return NDS::ARM9IOWrite32(addr, val); } |