Skip to content

Commit 9394c2a

Browse files
committed
Switch to the original DSTWO DLDI driver if alternate version is found
1 parent 7041951 commit 9394c2a

File tree

15 files changed

+15
-143
lines changed

15 files changed

+15
-143
lines changed

settings/bootloader/source/boot.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -453,12 +453,11 @@ int main (void) {
453453
const u16 dldiFileSize = 1 << *(u8*)0x02FF418D;
454454
tonccpy((u32*)0x06000000, (u32*)0x02FF4180, dldiFileSize);
455455
dldiRelocateBinary();
456-
457456
toncset((u32*)0x02FF4000, 0, 0x8180); // Clear bootstub + DLDI driver
458457
} else if (*(u32*)0x02FF8004 == 0x69684320) { // DLDI ' Chi' string
459458
const u16 dldiFileSize = 1 << *(u8*)0x02FF800D;
460459
tonccpy((u32*)0x06000000, (u32*)0x02FF8000, (dldiFileSize > 0x4000) ? 0x4000 : dldiFileSize);
461-
dldiClearBss();
460+
dldiRelocateBinary();
462461
} else if (*(u32*)0x02FF8000 == 0x53535A4C) { // LZ77 flag
463462
dldiDecompressBinary();
464463
} else {

settings/bootloader/source/dldi_patcher.c

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -326,17 +326,4 @@ void dldiRelocateBinary (void) {
326326
writeAddr (pDH, DO_bss_start, readAddr (pDH, DO_bss_start) + relocationOffset);
327327
writeAddr (pDH, DO_bss_end, readAddr (pDH, DO_bss_end) + relocationOffset);
328328
}
329-
330-
void dldiClearBss (void) {
331-
data_t *pDH = _dldi_start;
332-
333-
addr_t ddmemSize = (1 << pDH[DO_driverSize]); // Size of range that offsets can be in the DLDI file
334-
335-
if (ddmemSize <= 0x4000) return; // For <= 16KB DLDI file, BSS has already been cleared
336-
337-
if (pDH[DO_fixSections] & FIX_BSS) {
338-
// Initialise the BSS to 0
339-
toncset (&pDH[readAddr(pDH, DO_bss_start)] , 0, readAddr(pDH, DO_bss_end) - readAddr(pDH, DO_bss_start));
340-
}
341-
}
342329
#endif

settings/bootloader/source/dldi_patcher.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,5 @@ typedef unsigned char data_t;
3030
bool dldiPatchBinary (data_t *binData, u32 binSize);
3131
void dldiDecompressBinary (void);
3232
void dldiRelocateBinary (void);
33-
void dldiClearBss (void);
3433

3534
#endif // DLDI_PATCHER_H

title/arm9/source/main.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2355,7 +2355,15 @@ int titleMode(void)
23552355
4: Run temporary DSiWare
23562356
*/
23572357

2358-
if (((strcmp(io_dldi_data->friendlyName, "NAND FLASH CARD LIBFATNRIO") == 0) || (io_dldi_data->ioInterface.ioType == 0x4F49524E)) && (*(u32*)0x02FF8000 != 0x53535A4C)) {
2358+
if (strcmp(io_dldi_data->friendlyName, "DSTWO(Slot-1)") == 0) {
2359+
const u32* u32_io_dldi_data = (u32*)(io_dldi_data);
2360+
if (u32_io_dldi_data[0xD0/4] == 0xBF80074C) { // If alternate DLDI driver is found...
2361+
// Use original DLDI driver once bootloader runs
2362+
FILE* file = fopen("nitro:/dldi/dstwo.dldi", "rb");
2363+
fread((void*)0x02FF8000, 1, 0x800, file);
2364+
fclose(file);
2365+
}
2366+
} else if (((strcmp(io_dldi_data->friendlyName, "NAND FLASH CARD LIBFATNRIO") == 0) || (io_dldi_data->ioInterface.ioType == 0x4F49524E)) && (*(u32*)0x02FF8000 != 0x53535A4C)) {
23592367
FILE* file = fopen("nitro:/dldi/nrio.lz77", "rb");
23602368
fread((void*)0x02FF8004, 1, 0x3FFC, file);
23612369
fclose(file);

title/bootloader/source/boot.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -641,12 +641,11 @@ int main (void) {
641641
const u16 dldiFileSize = 1 << *(u8*)0x02FF418D;
642642
tonccpy((u32*)0x06000000, (u32*)0x02FF4180, dldiFileSize);
643643
dldiRelocateBinary();
644-
645644
toncset((u32*)0x02FF4000, 0, 0x8180); // Clear bootstub + DLDI driver
646645
} else if (*(u32*)0x02FF8004 == 0x69684320) { // DLDI ' Chi' string
647646
const u16 dldiFileSize = 1 << *(u8*)0x02FF800D;
648647
tonccpy((u32*)0x06000000, (u32*)0x02FF8000, (dldiFileSize > 0x4000) ? 0x4000 : dldiFileSize);
649-
dldiClearBss();
648+
dldiRelocateBinary();
650649
} else if (*(u32*)0x02FF8000 == 0x53535A4C) { // LZ77 flag
651650
dldiDecompressBinary();
652651
} else {

title/bootloader/source/dldi_patcher.c

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -326,17 +326,4 @@ void dldiRelocateBinary (void) {
326326
writeAddr (pDH, DO_bss_start, readAddr (pDH, DO_bss_start) + relocationOffset);
327327
writeAddr (pDH, DO_bss_end, readAddr (pDH, DO_bss_end) + relocationOffset);
328328
}
329-
330-
void dldiClearBss (void) {
331-
data_t *pDH = _dldi_start;
332-
333-
addr_t ddmemSize = (1 << pDH[DO_driverSize]); // Size of range that offsets can be in the DLDI file
334-
335-
if (ddmemSize <= 0x4000) return; // For <= 16KB DLDI file, BSS has already been cleared
336-
337-
if (pDH[DO_fixSections] & FIX_BSS) {
338-
// Initialise the BSS to 0
339-
toncset (&pDH[readAddr(pDH, DO_bss_start)] , 0, readAddr(pDH, DO_bss_end) - readAddr(pDH, DO_bss_start));
340-
}
341-
}
342329
#endif

title/bootloader/source/dldi_patcher.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,5 @@ typedef unsigned char data_t;
3030
bool dldiPatchBinary (data_t *binData, u32 binSize);
3131
void dldiDecompressBinary (void);
3232
void dldiRelocateBinary (void);
33-
void dldiClearBss (void);
3433

3534
#endif // DLDI_PATCHER_H

title/nitrofiles/dldi/dstwo.dldi

1.77 KB
Binary file not shown.

universal/bootloader_app/source/boot.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -394,12 +394,11 @@ int main (void) {
394394
const u16 dldiFileSize = 1 << *(u8*)0x02FF418D;
395395
tonccpy((u32*)0x06000000, (u32*)0x02FF4180, dldiFileSize);
396396
dldiRelocateBinary();
397-
398397
toncset((u32*)0x02FF4000, 0, 0x8180); // Clear bootstub + DLDI driver
399398
} else if (*(u32*)0x02FF8004 == 0x69684320) { // DLDI ' Chi' string
400399
const u16 dldiFileSize = 1 << *(u8*)0x02FF800D;
401400
tonccpy((u32*)0x06000000, (u32*)0x02FF8000, (dldiFileSize > 0x4000) ? 0x4000 : dldiFileSize);
402-
dldiClearBss();
401+
dldiRelocateBinary();
403402
} else if (*(u32*)0x02FF8000 == 0x53535A4C) { // LZ77 flag
404403
dldiDecompressBinary();
405404
} else {

universal/bootloader_app/source/dldi_patcher.c

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -326,17 +326,4 @@ void dldiRelocateBinary (void) {
326326
writeAddr (pDH, DO_bss_start, readAddr (pDH, DO_bss_start) + relocationOffset);
327327
writeAddr (pDH, DO_bss_end, readAddr (pDH, DO_bss_end) + relocationOffset);
328328
}
329-
330-
void dldiClearBss (void) {
331-
data_t *pDH = _dldi_start;
332-
333-
addr_t ddmemSize = (1 << pDH[DO_driverSize]); // Size of range that offsets can be in the DLDI file
334-
335-
if (ddmemSize <= 0x4000) return; // For <= 16KB DLDI file, BSS has already been cleared
336-
337-
if (pDH[DO_fixSections] & FIX_BSS) {
338-
// Initialise the BSS to 0
339-
toncset (&pDH[readAddr(pDH, DO_bss_start)] , 0, readAddr(pDH, DO_bss_end) - readAddr(pDH, DO_bss_start));
340-
}
341-
}
342329
#endif

0 commit comments

Comments
 (0)