aboutsummaryrefslogtreecommitdiff
path: root/src/ARM.cpp
diff options
context:
space:
mode:
authorArisotura <thetotalworm@gmail.com>2020-06-02 00:39:09 +0200
committerGitHub <noreply@github.com>2020-06-02 00:39:09 +0200
commitd6332f96f162849ad0dde2738cacd3fae6e76e5d (patch)
tree649c101a956cb3640140a95c1f380e5a2f89d51d /src/ARM.cpp
parent993048dd241b59747a7b30edfc861eedd4c005c9 (diff)
parent6c0ec5ebd8f991b6f8778afd98dc7a22f2b77d4d (diff)
Merge pull request #638 from Arisotura/melonDSi
merge melonDSi
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 6248de2..68cac59 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"
@@ -101,10 +102,55 @@ 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;
+ }
+
CP15Reset();
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();
+}
+
void ARM::DoSavestate(Savestate* file)
{
@@ -222,9 +268,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);