* add SCFG_EXT

* quick hack to detect cartridges
This commit is contained in:
Arisotura
2019-07-03 12:37:34 +02:00
parent 5062ed543a
commit c5e14074c3
4 changed files with 32 additions and 10 deletions

View File

@ -46,6 +46,7 @@ u32 BootAddr[2];
u16 SCFG_Clock9; u16 SCFG_Clock9;
u16 SCFG_Clock7; u16 SCFG_Clock7;
u32 SCFG_EXT[2];
u32 SCFG_MC; u32 SCFG_MC;
u32 MBK[2][9]; u32 MBK[2][9];
@ -127,7 +128,9 @@ void Reset()
SCFG_Clock9 = 0x0187; // CHECKME SCFG_Clock9 = 0x0187; // CHECKME
SCFG_Clock7 = 0x0187; SCFG_Clock7 = 0x0187;
SCFG_MC = 0x0011; SCFG_EXT[0] = 0x8307F100;
SCFG_EXT[1] = 0x93FFFB06;
SCFG_MC = 0x0010;//0x0011;
// LCD init flag // LCD init flag
GPU::DispStat[0] |= (1<<6); GPU::DispStat[0] |= (1<<6);
@ -1038,7 +1041,7 @@ u32 ARM9IORead32(u32 addr)
{ {
switch (addr) switch (addr)
{ {
case 0x04004008: return 0x8307F100; case 0x04004008: return SCFG_EXT[0];
case 0x04004010: return SCFG_MC & 0xFFFF; case 0x04004010: return SCFG_MC & 0xFFFF;
case 0x04004040: return MBK[0][0]; case 0x04004040: return MBK[0][0];
@ -1183,6 +1186,14 @@ void ARM9IOWrite32(u32 addr, u32 val)
{ {
switch (addr) switch (addr)
{ {
case 0x04004008:
SCFG_EXT[0] &= ~0x8007F19F;
SCFG_EXT[0] |= (val & 0x8007F19F);
SCFG_EXT[1] &= ~0x0000F080;
SCFG_EXT[1] |= (val & 0x0000F080);
printf("SCFG_EXT = %08X / %08X (val9 %08X)\n", SCFG_EXT[0], SCFG_EXT[1], val);
return;
case 0x04004040: case 0x04004040:
MapNWRAM_A(0, val & 0xFF); MapNWRAM_A(0, val & 0xFF);
MapNWRAM_A(1, (val >> 8) & 0xFF); MapNWRAM_A(1, (val >> 8) & 0xFF);
@ -1333,7 +1344,7 @@ u32 ARM7IORead32(u32 addr)
case 0x04000218: return NDS::IE2; case 0x04000218: return NDS::IE2;
case 0x0400021C: return NDS::IF2; case 0x0400021C: return NDS::IF2;
case 0x04004008: return 0x80000000; // HAX case 0x04004008: return SCFG_EXT[1];
case 0x04004010: return SCFG_MC; case 0x04004010: return SCFG_MC;
case 0x04004040: return MBK[1][0]; case 0x04004040: return MBK[1][0];
@ -1449,6 +1460,13 @@ void ARM7IOWrite32(u32 addr, u32 val)
case 0x04000218: NDS::IE2 = (val & 0x7FF7); NDS::UpdateIRQ(1); return; case 0x04000218: NDS::IE2 = (val & 0x7FF7); NDS::UpdateIRQ(1); return;
case 0x0400021C: NDS::IF2 &= ~(val & 0x7FF7); NDS::UpdateIRQ(1); return; case 0x0400021C: NDS::IF2 &= ~(val & 0x7FF7); NDS::UpdateIRQ(1); return;
case 0x04004008:
SCFG_EXT[0] &= ~0x03000000;
SCFG_EXT[0] |= (val & 0x03000000);
SCFG_EXT[1] &= ~0x93FF0F07;
SCFG_EXT[1] |= (val & 0x93FF0F07);
printf("SCFG_EXT = %08X / %08X (val7 %08X)\n", SCFG_EXT[0], SCFG_EXT[1], val);
return;
case 0x04004010: case 0x04004010:
val &= 0xFFFF800C; val &= 0xFFFF800C;
if ((val & 0xC) == 0xC) val &= ~0xC; // hax if ((val & 0xC) == 0xC) val &= ~0xC; // hax

View File

@ -31,6 +31,8 @@ extern u64 ConsoleID;
extern DSi_SDHost* SDMMC; extern DSi_SDHost* SDMMC;
extern DSi_SDHost* SDIO; extern DSi_SDHost* SDIO;
extern u8 ITCMInit[0x8000];
bool Init(); bool Init();
void DeInit(); void DeInit();

View File

@ -72,7 +72,7 @@ void Reset()
void Start() void Start()
{ {
printf("BPTWL: start\n"); //printf("BPTWL: start\n");
} }
u8 Read(bool last) u8 Read(bool last)
@ -83,7 +83,7 @@ u8 Read(bool last)
return 0; return 0;
} }
printf("BPTWL: read %02X -> %02X\n", CurPos, Registers[CurPos]); //printf("BPTWL: read %02X -> %02X\n", CurPos, Registers[CurPos]);
return Registers[CurPos++]; return Registers[CurPos++];
} }
@ -98,7 +98,7 @@ void Write(u8 val, bool last)
if (CurPos == -1) if (CurPos == -1)
{ {
CurPos = val; CurPos = val;
printf("BPTWL: reg=%02X\n", val); //printf("BPTWL: reg=%02X\n", val);
return; return;
} }
@ -113,7 +113,7 @@ void Write(u8 val, bool last)
Registers[CurPos] = val; Registers[CurPos] = val;
} }
printf("BPTWL: write %02X -> %02X\n", CurPos, val); //printf("BPTWL: write %02X -> %02X\n", CurPos, val);
CurPos++; // CHECKME CurPos++; // CHECKME
} }

View File

@ -19,6 +19,7 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include "NDS.h" #include "NDS.h"
#include "DSi.h"
#include "NDSCart.h" #include "NDSCart.h"
#include "ARM.h" #include "ARM.h"
#include "CRC32.h" #include "CRC32.h"
@ -558,7 +559,8 @@ void Key1_ApplyKeycode(u32* keycode, u32 mod)
void Key1_InitKeycode(u32 idcode, u32 level, u32 mod) void Key1_InitKeycode(u32 idcode, u32 level, u32 mod)
{ {
memcpy(Key1_KeyBuf, &NDS::ARM7BIOS[0x30], 0x1048); // hax //memcpy(Key1_KeyBuf, &NDS::ARM7BIOS[0x30], 0x1048); // hax
memcpy(Key1_KeyBuf, &DSi::ITCMInit[0x4894], 0x1048); // hax
u32 keycode[3] = {idcode, idcode>>1, idcode<<1}; u32 keycode[3] = {idcode, idcode>>1, idcode<<1};
if (level >= 1) Key1_ApplyKeycode(keycode, mod); if (level >= 1) Key1_ApplyKeycode(keycode, mod);
@ -1185,11 +1187,11 @@ void WriteROMCnt(u32 val)
*(u32*)&cmd[4] = *(u32*)&ROMCommand[4]; *(u32*)&cmd[4] = *(u32*)&ROMCommand[4];
} }
/*printf("ROM COMMAND %04X %08X %02X%02X%02X%02X%02X%02X%02X%02X SIZE %04X\n", printf("ROM COMMAND %04X %08X %02X%02X%02X%02X%02X%02X%02X%02X SIZE %04X\n",
SPICnt, ROMCnt, SPICnt, ROMCnt,
cmd[0], cmd[1], cmd[2], cmd[3], cmd[0], cmd[1], cmd[2], cmd[3],
cmd[4], cmd[5], cmd[6], cmd[7], cmd[4], cmd[5], cmd[6], cmd[7],
datasize);*/ datasize);
switch (cmd[0]) switch (cmd[0])
{ {