Skip to content

Commit 7261827

Browse files
committed
B4DS: Load DLDI to ITCM for 7 more DSiWare titles
Works with DLDI drivers up to 32KB
1 parent 0bc034c commit 7261827

File tree

3 files changed

+24
-8
lines changed

3 files changed

+24
-8
lines changed

retail/bootloader/source/arm7/dsi2ds_patches.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ void patchDSiModeToDSMode(cardengineArm9* ce9, const tNDSHeader* ndsHeader) {
7575
const u32 heapEndExceed = extendedMemory ? heapEnd+0x800000 : heapEndRetail+0xC00000; // extendedMemory ? #0x2FB0000 (mirrors to 0x27B0000 on debug DS units) : #0x2FE0000 (mirrors to 0x23E0000 on retail DS units)
7676
const u32 heapEndMaxForRetail = maxHeapOpen ? ((_io_dldi_size == 0x0F) ? 0x023F6000 : (_io_dldi_size == 0x0E) ? 0x023FA000 : 0x023FC000) : heapEnd;
7777
const u32 heapEndMaxForRetail2 = maxHeapOpen ? ((_io_dldi_size == 0x0F) ? heapEndMaxForRetail : 0x023FF000) : heapEnd;
78+
const u32 heapEndMaxForRetail32 = maxHeapOpen ? 0x023FF000 : heapEnd;
7879
const u32 heapEndMaxForRetailMus = maxHeapOpen ? heapEndMaxForRetail-0x4000 : heapEnd;
7980
const u32 heapEnd_512KBFreeForDebug = extendedMemory ? 0x02740000 : heapEnd;
8081
// const u32 heapEnd_512KBFreeForDebugAlt = extendedMemory ? 0x02700000 : heapEnd;
@@ -18672,7 +18673,7 @@ void patchDSiModeToDSMode(cardengineArm9* ce9, const tNDSHeader* ndsHeader) {
1867218673
if (strcmp(romTid, "K6TE") == 0) {
1867318674
*(u32*)0x02011FAC = 0xE1A00000; // nop
1867418675
*(u32*)0x02015790 = 0xE1A00000; // nop
18675-
patchInitDSiWare(0x0201ABF0, heapEndMaxForRetail);
18676+
patchInitDSiWare(0x0201ABF0, heapEndMaxForRetail32);
1867618677
*(u32*)0x0201AF7C = *(u32*)0x02004FE8;
1867718678
patchUserSettingsReadDSiWare(0x0201C1F4);
1867818679
*(u32*)0x02020B68 = 0xE1A00000; // nop
@@ -19518,7 +19519,7 @@ void patchDSiModeToDSMode(cardengineArm9* ce9, const tNDSHeader* ndsHeader) {
1951819519
*(u32*)0x02007FAC = 0xE8BD8078; // LDMFD SP!, {R3-R6,PC}
1951919520
// tonccpy((u32*)0x02009C88, dsiSaveGetResultCode, 0xC);
1952019521
*(u32*)0x0200CC88 = 0xE1A00000; // nop
19521-
patchInitDSiWare(0x0202D950, heapEndMaxForRetail);
19522+
patchInitDSiWare(0x0202D950, heapEndMaxForRetail32);
1952219523
*(u32*)0x0202DCCC -= 0x64000;
1952319524
patchUserSettingsReadDSiWare(0x0202EE48);
1952419525
*(u32*)0x0202EE70 = wirelessReturnCodeArm;
@@ -19818,7 +19819,7 @@ void patchDSiModeToDSMode(cardengineArm9* ce9, const tNDSHeader* ndsHeader) {
1981819819
*(u32*)0x02013144 = 0xE1A00000; // nop
1981919820
*(u32*)0x02013158 = 0xE1A00000; // nop
1982019821
*(u32*)0x02016F98 = 0xE1A00000; // nop
19821-
patchInitDSiWare(0x0201F054, heapEndMaxForRetail);
19822+
patchInitDSiWare(0x0201F054, heapEndMaxForRetail32);
1982219823
*(u32*)0x0201F3E0 = *(u32*)0x02004FE8;
1982319824
patchUserSettingsReadDSiWare(0x02020614);
1982419825
*(u32*)0x02025884 = 0xE1A00000; // nop
@@ -19866,7 +19867,7 @@ void patchDSiModeToDSMode(cardengineArm9* ce9, const tNDSHeader* ndsHeader) {
1986619867
*(u32*)0x020132AC = 0xE1A00000; // nop
1986719868
*(u32*)0x020132C0 = 0xE1A00000; // nop
1986819869
*(u32*)0x0201718C = 0xE1A00000; // nop
19869-
patchInitDSiWare(0x0201F570, heapEndMaxForRetail);
19870+
patchInitDSiWare(0x0201F570, heapEndMaxForRetail32);
1987019871
*(u32*)0x0201F8E0 = *(u32*)0x02004FD0;
1987119872
patchUserSettingsReadDSiWare(0x02020B34);
1987219873
*(u32*)0x02026080 = 0xE1A00000; // nop
@@ -24834,7 +24835,7 @@ void patchDSiModeToDSMode(cardengineArm9* ce9, const tNDSHeader* ndsHeader) {
2483424835
else if (strcmp(romTid, "KZUE") == 0 || strcmp(romTid, "KZVE") == 0 || strcmp(romTid, "KZ7E") == 0 || strcmp(romTid, "KZ8E") == 0) {
2483524836
*(u32*)0x02006F60 = 0xE1A00000; // nop
2483624837
*(u32*)0x0200A80C = 0xE1A00000; // nop
24837-
patchInitDSiWare(0x0200FE40, heapEndMaxForRetail);
24838+
patchInitDSiWare(0x0200FE40, heapEndMaxForRetail32);
2483824839
*(u32*)0x020101CC = *(u32*)0x02004FE8;
2483924840
patchUserSettingsReadDSiWare(0x02011470);
2484024841
setBL(0x0204D500, (u32)dsiSaveOpen);

retail/bootloader/source/arm7/main.arm7.c

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1587,8 +1587,23 @@ int arm7_main(void) {
15871587
ce9DldiOffset = (extendedMemory ? 0x027D8000 : maxHeapOpen ? 0x023F6000 : (laterSdk ? 0x023D8000 : 0x023F7000));
15881588
}
15891589
u32 ce9DldiItcm = 0;
1590-
if (maxHeapOpen && (strncmp(romTid, "KAT", 3) == 0 || strncmp(romTid, "KNP", 3) == 0) && _io_dldi_size < 0x0F) {
1591-
ce9DldiItcm = 0x01FFC000;
1590+
if (maxHeapOpen) {
1591+
if (
1592+
strncmp(romTid, "K6T", 3) == 0 // Orion's Odyssey
1593+
|| strncmp(romTid, "KPS", 3) == 0 // Phantasy Star 0 Mini
1594+
|| strncmp(romTid, "KHR", 3) == 0 // Picture Perfect: Pocket Stylist
1595+
|| strncmp(romTid, "KZU", 3) == 0 // Tales to Enjoy!: Little Red Riding Hood
1596+
|| strncmp(romTid, "KZV", 3) == 0 // Tales to Enjoy!: Puss in Boots
1597+
|| strncmp(romTid, "KZ7", 3) == 0 // Tales to Enjoy!: The Three Little Pigs
1598+
|| strncmp(romTid, "KZ8", 3) == 0 // Tales to Enjoy!: The Ugly Duckling
1599+
) {
1600+
ce9DldiItcm = 0x01FF8400; // Set <= 32KB DLDI location at ITCM
1601+
} else if ( _io_dldi_size < 0x0F && (
1602+
strncmp(romTid, "KAT", 3) == 0 // AiRace: Tunnel
1603+
|| strncmp(romTid, "KNP", 3) == 0 // Need for Speed: Nitro-X
1604+
)) {
1605+
ce9DldiItcm = 0x01FFC000; // Set <= 16KB DLDI location at ITCM
1606+
}
15921607
}
15931608
if (!dldiPatchBinary((data_t*)ce9Location, 0x3800, (data_t*)ce9DldiOffset, (data_t*)ce9DldiItcm)) {
15941609
dbg_printf("ce9 DLDI patch failed\n");

retail/common/include/locations.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
#define CHEAT_ENGINE_LOCATION_B4DS_ALT 0x027FC000
4444
#define CHEAT_ENGINE_LOCATION_B4DS_ALT2 0x027FD000
4545
#define CARDENGINE_ARM7_LOCATION 0x0380E780
46-
#define CARDENGINE_ARM9_LOCATION_DLDI_START 0x02000000
46+
#define CARDENGINE_ARM9_LOCATION_DLDI_START 0x02000400
4747
#define CARDENGINE_ARM9_LOCATION_DLDI 0x023DA400
4848
#define CARDENGINE_ARM9_LOCATION_DLDI_32 0x023D4400
4949
#define CARDENGINE_ARM9_LOCATION_DLDI_ALT 0x023F9C00

0 commit comments

Comments
 (0)