From e9181a43901d9f374790c9eb3dad9086c529011f Mon Sep 17 00:00:00 2001 From: RocketRobz Date: Wed, 10 Oct 2018 15:53:37 -0600 Subject: [PATCH] Run DLDI startup code before mounting --- arm9/source/driveOperations.cpp | 38 +++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/arm9/source/driveOperations.cpp b/arm9/source/driveOperations.cpp index 8ad449b..d969c5a 100644 --- a/arm9/source/driveOperations.cpp +++ b/arm9/source/driveOperations.cpp @@ -7,6 +7,7 @@ #include "dldi-include.h" static sNDSHeader nds; +const DLDI_INTERFACE* loadedDldi; u8 stored_SCFG_MC = 0; @@ -174,22 +175,27 @@ TWL_CODE bool twl_flashcardMount(void) { sysSetCardOwner (BUS_OWNER_ARM7); // 3DS fix // Read a DLDI driver specific to the cart - if (!memcmp(gamename, "QMATETRIAL", 9) || !memcmp(gamename, "R4DSULTRA", 9)) { - io_dldi_data = dldiLoadFromBin(r4idsn_sd_dldi); - fatMountSimple("fat", &io_dldi_data->ioInterface); - } else if (!memcmp(gameid, "ACEK", 4) || !memcmp(gameid, "YCEP", 4) || !memcmp(gameid, "AHZH", 4)) { - io_dldi_data = dldiLoadFromBin(ak2_sd_dldi); - fatMountSimple("fat", &io_dldi_data->ioInterface); - } else if (!memcmp(gameid, "ASMA", 4)) { - io_dldi_data = dldiLoadFromBin(r4tf_dldi); - fatMountSimple("fat", &io_dldi_data->ioInterface); + if (!memcmp(gameid, "ASMA", 4)) { + loadedDldi = dldiLoadFromBin(r4tf_dldi); + loadedDldi->ioInterface.startup(); + fatMountSimple("fat", &loadedDldi->ioInterface); } else if (!memcmp(gamename, "TOP TF/SD DS", 12) || !memcmp(gameid, "A76E", 4)) { - io_dldi_data = dldiLoadFromBin(ttio_dldi); - fatMountSimple("fat", &io_dldi_data->ioInterface); + loadedDldi = dldiLoadFromBin(ttio_dldi); + loadedDldi->ioInterface.startup(); + fatMountSimple("fat", &loadedDldi->ioInterface); } else if (!memcmp(gamename, "D!S!XTREME", 12) && !memcmp(gameid, "AYIE", 4)) { - io_dldi_data = dldiLoadFromBin(dsx_dldi); - fatMountSimple("fat", &io_dldi_data->ioInterface); - } + loadedDldi = dldiLoadFromBin(dsx_dldi); + loadedDldi->ioInterface.startup(); + fatMountSimple("fat", &loadedDldi->ioInterface); + } else if (!memcmp(gamename, "QMATETRIAL", 9) || !memcmp(gamename, "R4DSULTRA", 9)) { + loadedDldi = dldiLoadFromBin(r4idsn_sd_dldi); + loadedDldi->ioInterface.startup(); + fatMountSimple("fat", &loadedDldi->ioInterface); + } else if (!memcmp(gameid, "ACEK", 4) || !memcmp(gameid, "YCEP", 4) || !memcmp(gameid, "AHZH", 4)) { + loadedDldi = dldiLoadFromBin(ak2_sd_dldi); + loadedDldi->ioInterface.startup(); + fatMountSimple("fat", &loadedDldi->ioInterface); + } if (flashcardFound()) { fatGetVolumeLabel("fat", fatLabel); @@ -220,6 +226,10 @@ bool flashcardMount(void) { void flashcardUnmount(void) { fatUnmount("fat"); + if (isDSiMode()) { + loadedDldi->ioInterface.shutdown(); + dldiFree((DLDI_INTERFACE*)loadedDldi); + } fatLabel[0] = '\0'; flashcardMounted = false; }