aboutsummaryrefslogtreecommitdiff
path: root/src/ARM.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ARM.cpp')
-rw-r--r--src/ARM.cpp49
1 files changed, 46 insertions, 3 deletions
diff --git a/src/ARM.cpp b/src/ARM.cpp
index 205332d..92a3a9e 100644
--- a/src/ARM.cpp
+++ b/src/ARM.cpp
@@ -18,6 +18,7 @@
#include <stdio.h>
#include "NDS.h"
+#include "DSi.h"
#include "ARM.h"
#include "ARMInterpreter.h"
#include "AREngine.h"
@@ -103,6 +104,51 @@ void ARM::Reset()
void ARMv5::Reset()
{
+ if (NDS::ConsoleType == 1)
+ {
+ BusRead8 = DSi::ARM9Read8;
+ BusRead16 = DSi::ARM9Read16;
+ BusRead32 = DSi::ARM9Read32;
+ BusWrite8 = DSi::ARM9Write8;
+ BusWrite16 = DSi::ARM9Write16;
+ BusWrite32 = DSi::ARM9Write32;
+ GetMemRegion = DSi::ARM9GetMemRegion;
+ }
+ else
+ {
+ BusRead8 = NDS::ARM9Read8;
+ BusRead16 = NDS::ARM9Read16;
+ BusRead32 = NDS::ARM9Read32;
+ BusWrite8 = NDS::ARM9Write8;
+ BusWrite16 = NDS::ARM9Write16;
+ BusWrite32 = NDS::ARM9Write32;
+ GetMemRegion = NDS::ARM9GetMemRegion;
+ }
+
+ ARM::Reset();
+}
+
+void ARMv4::Reset()
+{
+ if (NDS::ConsoleType)
+ {
+ BusRead8 = DSi::ARM7Read8;
+ BusRead16 = DSi::ARM7Read16;
+ BusRead32 = DSi::ARM7Read32;
+ BusWrite8 = DSi::ARM7Write8;
+ BusWrite16 = DSi::ARM7Write16;
+ BusWrite32 = DSi::ARM7Write32;
+ }
+ else
+ {
+ BusRead8 = NDS::ARM7Read8;
+ BusRead16 = NDS::ARM7Read16;
+ BusRead32 = NDS::ARM7Read32;
+ BusWrite8 = NDS::ARM7Write8;
+ BusWrite16 = NDS::ARM7Write16;
+ BusWrite32 = NDS::ARM7Write32;
+ }
+
ARM::Reset();
}
@@ -236,9 +282,6 @@ void ARMv5::JumpTo(u32 addr, bool restorecpsr)
CPSR &= ~0x20;
}
- // TODO: investigate this
- // firmware jumps to region 01FFxxxx, but region 5 (01000000-02000000) is set to non-executable
- // is melonDS fucked up somewhere, or is the DS PU just incomplete/crapoed?
/*if (!(PU_Map[addr>>12] & 0x04))
{
printf("jumped to %08X. very bad\n", addr);