diff --git a/imageview/arm7/source/main.c b/imageview/arm7/source/main.c index 37d5ae35b9..520ec60317 100644 --- a/imageview/arm7/source/main.c +++ b/imageview/arm7/source/main.c @@ -86,6 +86,8 @@ int main() { *(u16*)0x02FFFC36 = *(u16*)0x0800015E; // Header CRC16 *(u32*)0x02FFFC38 = *(u32*)0x0800000C; // Game Code + *(u32*)0x02FFFDF0 = REG_SCFG_EXT; + // clear sound registers dmaFillWords(0, (void*)0x04000400, 0x100); @@ -127,7 +129,7 @@ int main() { // 01: Fade Out // 02: Return - // 03: status (Bit 0: hasRegulableBacklight, Bit 1: scfgEnabled, Bit 2: REG_SNDEXTCNT, Bit 3: isDSPhat, Bit 4: i2cBricked) + // 03: status (Bit 0: hasRegulableBacklight, Bit 1: scfgSdmmcEnabled, Bit 2: REG_SNDEXTCNT, Bit 3: isDSPhat, Bit 4: i2cBricked) // 03: Status: Init/Volume/Battery/SD @@ -135,14 +137,18 @@ int main() { // Battery is 7 bits -- bits 0-7 // Volume is 00h to 1Fh = 5 bits -- bits 8-12 // SD status -- bits 13-14 - // Init status -- bits 15-18 (Bit 0 (15): hasRegulableBacklight, Bit 1 (16): scfgEnabled, Bit 2 (17): REG_SNDEXTCNT, Bit 3 (18): isDSPhat, Bit 4 (19): i2cBricked) + // Init status -- bits 15-18 (Bit 0 (15): hasRegulableBacklight, Bit 1 (16): scfgSdmmcEnabled, Bit 2 (17): REG_SNDEXTCNT, Bit 3 (18): isDSPhat, Bit 4 (19): i2cBricked) + + *(vu32*)0x4004820 = 0x8B7F0305; u8 initStatus = (BIT_SET(!!(REG_SNDEXTCNT), SNDEXTCNT_BIT) - | BIT_SET(!!(REG_SCFG_EXT), REGSCFG_BIT) + | BIT_SET(*(vu32*)0x4004820, SCFGSDMMC_BIT) | BIT_SET(!!(pmBacklight & BIT(4) || pmBacklight & BIT(5) || pmBacklight & BIT(6) || pmBacklight & BIT(7)), BACKLIGHT_BIT) | BIT_SET(isPhat(), DSPHAT_BIT) | BIT_SET(i2cBricked, I2CBRICKED_BIT)); + *(vu32*)0x4004820 = 0; + status = (status & ~INIT_MASK) | ((initStatus << INIT_OFF) & INIT_MASK); fifoSendValue32(FIFO_USER_03, status); diff --git a/manual/arm7/source/main.c b/manual/arm7/source/main.c index 00fe83b757..38fa026649 100644 --- a/manual/arm7/source/main.c +++ b/manual/arm7/source/main.c @@ -86,6 +86,8 @@ int main() { *(u16*)0x02FFFC36 = *(u16*)0x0800015E; // Header CRC16 *(u32*)0x02FFFC38 = *(u32*)0x0800000C; // Game Code + *(u32*)0x02FFFDF0 = REG_SCFG_EXT; + // clear sound registers dmaFillWords(0, (void*)0x04000400, 0x100); @@ -125,7 +127,7 @@ int main() { // 01: Fade Out // 02: Return - // 03: status (Bit 0: hasRegulableBacklight, Bit 1: scfgEnabled, Bit 2: REG_SNDEXTCNT, Bit 3: isDSPhat, Bit 4: i2cBricked) + // 03: status (Bit 0: hasRegulableBacklight, Bit 1: scfgSdmmcEnabled, Bit 2: REG_SNDEXTCNT, Bit 3: isDSPhat, Bit 4: i2cBricked) // 03: Status: Init/Volume/Battery/SD @@ -133,14 +135,18 @@ int main() { // Battery is 7 bits -- bits 0-7 // Volume is 00h to 1Fh = 5 bits -- bits 8-12 // SD status -- bits 13-14 - // Init status -- bits 15-18 (Bit 0 (15): hasRegulableBacklight, Bit 1 (16): scfgEnabled, Bit 2 (17): REG_SNDEXTCNT, Bit 3 (18): isDSPhat, Bit 4 (19): i2cBricked) + // Init status -- bits 15-18 (Bit 0 (15): hasRegulableBacklight, Bit 1 (16): scfgSdmmcEnabled, Bit 2 (17): REG_SNDEXTCNT, Bit 3 (18): isDSPhat, Bit 4 (19): i2cBricked) + + *(vu32*)0x4004820 = 0x8B7F0305; u8 initStatus = (BIT_SET(!!(REG_SNDEXTCNT), SNDEXTCNT_BIT) - | BIT_SET(!!(REG_SCFG_EXT), REGSCFG_BIT) + | BIT_SET(*(vu32*)0x4004820, SCFGSDMMC_BIT) | BIT_SET(!!(pmBacklight & BIT(4) || pmBacklight & BIT(5) || pmBacklight & BIT(6) || pmBacklight & BIT(7)), BACKLIGHT_BIT) | BIT_SET(isPhat(), DSPHAT_BIT) | BIT_SET(i2cBricked, I2CBRICKED_BIT)); + *(vu32*)0x4004820 = 0; + status = (status & ~INIT_MASK) | ((initStatus << INIT_OFF) & INIT_MASK); fifoSendValue32(FIFO_USER_03, status); diff --git a/quickmenu/arm7/source/main.c b/quickmenu/arm7/source/main.c index 161ac56133..b1010acfb8 100644 --- a/quickmenu/arm7/source/main.c +++ b/quickmenu/arm7/source/main.c @@ -89,7 +89,7 @@ void changeBacklightLevel(void) { // if the backlight is regulable and the console is a phat the range will be 0 - 4 (with 4 being backlight off) // if the backlight is not regulable the only possible values will be 0 and 4 (with 4 being backlight off) backlightLevel += 1 + (3 * !hasRegulableBacklight); - + if (backlightLevel > (3 + isDSPhat)) { backlightLevel = 0; } @@ -205,6 +205,8 @@ int main() { *(u16*)0x02FFFC36 = *(u16*)0x0800015E; // Header CRC16 *(u32*)0x02FFFC38 = *(u32*)0x0800000C; // Game Code + *(u32*)0x02FFFDF0 = REG_SCFG_EXT; + // clear sound registers dmaFillWords(0, (void*)0x04000400, 0x100); @@ -260,7 +262,7 @@ int main() { // 01: Fade Out // 02: Return - // 03: status (Bit 0: hasRegulableBacklight, Bit 1: scfgEnabled, Bit 2: REG_SNDEXTCNT, Bit 3: isDSPhat, Bit 4: i2cBricked) + // 03: status (Bit 0: hasRegulableBacklight, Bit 1: scfgSdmmcEnabled, Bit 2: REG_SNDEXTCNT, Bit 3: isDSPhat, Bit 4: i2cBricked) // 03: Status: Init/Volume/Battery/SD @@ -268,21 +270,25 @@ int main() { // Battery is 7 bits -- bits 0-7 // Volume is 00h to 1Fh = 5 bits -- bits 8-12 // SD status -- bits 13-14 - // Init status -- bits 15-18 (Bit 0 (15): hasRegulableBacklight, Bit 1 (16): scfgEnabled, Bit 2 (17): REG_SNDEXTCNT, Bit 3 (18): isDSPhat, Bit 4 (19): i2cBricked) + // Init status -- bits 15-18 (Bit 0 (15): hasRegulableBacklight, Bit 1 (16): scfgSdmmcEnabled, Bit 2 (17): REG_SNDEXTCNT, Bit 3 (18): isDSPhat, Bit 4 (19): i2cBricked) + + *(vu32*)0x4004820 = 0x8B7F0305; u8 initStatus = (BIT_SET(!!(REG_SNDEXTCNT), SNDEXTCNT_BIT) - | BIT_SET(!!(REG_SCFG_EXT), REGSCFG_BIT) + | BIT_SET(*(vu32*)0x4004820, SCFGSDMMC_BIT) | BIT_SET(hasRegulableBacklight, BACKLIGHT_BIT) | BIT_SET(isDSPhat, DSPHAT_BIT) | BIT_SET(i2cBricked, I2CBRICKED_BIT)); + *(vu32*)0x4004820 = 0; + status = (status & ~INIT_MASK) | ((initStatus << INIT_OFF) & INIT_MASK); fifoSendValue32(FIFO_USER_03, status); if (REG_SNDEXTCNT == 0) { if (hasRegulableBacklight) backlightLevel = pmBacklight & 3; // Brightness - + if((readPowerManagement(PM_CONTROL_REG) & 0xC) == 0) // DS Phat backlight off backlightLevel = 4; } diff --git a/quickmenu/arm9/source/main.cpp b/quickmenu/arm9/source/main.cpp index b8e4b05f2d..fee0d19892 100644 --- a/quickmenu/arm9/source/main.cpp +++ b/quickmenu/arm9/source/main.cpp @@ -250,7 +250,7 @@ int SetDonorSDK() { void SetMPUSettings() { scanKeys(); int pressed = keysHeld(); - + if (pressed & KEY_B) { mpuregion = 1; } else if (pressed & KEY_X) { @@ -338,7 +338,7 @@ void dsCardLaunch() { *(u32*)(0x02000318) = 0x00000013; *(u32*)(0x0200031C) = 0x00000000; *(u16*)(0x02000306) = swiCRC16(0xFFFF, (void*)0x02000308, 0x18); - + unlaunchSetHiyaBoot(); DC_FlushAll(); // Make reboot not fail @@ -359,7 +359,7 @@ void SetWidescreen(const char *filename) { || !useWidescreen || !externalFirmsModules || ms().macroMode) { return; } - + if (isHomebrew[ms().secondaryDevice] && ms().homebrewHasWide && (access("sd:/_nds/TWiLightMenu/TwlBg/Widescreen.cxi", F_OK) == 0)) { if (access("sd:/luma/sysmodules/TwlBg.cxi", F_OK) == 0) { rename("sd:/luma/sysmodules/TwlBg.cxi", "sd:/_nds/TWiLightMenu/TwlBg/TwlBg.cxi.bak"); @@ -550,7 +550,7 @@ mm_sound_effect snd_hour; void InitSound() { mmInitDefaultMem((mm_addr)soundbank_bin); - + mmLoadEffect(SFX_LAUNCH); mmLoadEffect(SFX_SELECT); mmLoadEffect(SFX_STOP); @@ -1041,11 +1041,11 @@ void customSleep() { static void getFiletypeFromFilename(std::string_view filename, eROMType& rom_type, int& box_art_type) { rom_type = ROM_TYPE_UNK; box_art_type = -1; - + auto pos = filename.find_last_of('.'); if(pos == filename.npos) return; - + if (extension(filename, {".nds", ".dsi", ".ids", ".app", ".srl", ".argv"})) { rom_type = ROM_TYPE_NDS; box_art_type = 0; @@ -1177,14 +1177,14 @@ void findPictochatAndDownladPlay() { logPrint("DS Download Play found\n"); return; } - + auto mountNand = [nandInited = false]() mutable { if (!nandInited) { fatMountSimple("nand", &io_dsi_nand); nandInited = true; } }; - + char srcPath[256]; u8 regions[3] = {0x41, 0x43, 0x4B}; @@ -1222,7 +1222,7 @@ void findPictochatAndDownladPlay() { strncpy(dlplayPath, "/_nds/dlplay.nds", sizeof(dlplayPath)); return; } - + if (ms().consoleModel == 0) { for (int i = 0; i < 3; i++) { snprintf(dlplayPath, sizeof(dlplayPath), "/title/00030005/484e44%x/content/00000000.app", regions[i]); @@ -1278,7 +1278,7 @@ int dsClassicMenu(void) { //--------------------------------------------------------------------------------- // Read user name /*char *username = (char*)PersonalData->name; - + // text for (int i = 0; i < 10; i++) { if (username[i*2] == 0x00) @@ -1298,7 +1298,7 @@ int dsClassicMenu(void) { externalFirmsModules = (lumaConfig.GetInt("boot", "enable_external_firm_and_modules", 0) == true); logPrint((access("sd:/_nds/TWiLightMenu/TwlBg/Widescreen.cxi", F_OK) == 0) && externalFirmsModules ? "Widescreen found\n" : "Widescreen not found\n"); } - + logPrint("\n"); ms().gbaR3Test = (access(sys().isRunFromSD() ? "sd:/_nds/TWiLightMenu/emulators/GBARunner3.nds" : "fat:/_nds/TWiLightMenu/emulators/GBARunner3.nds", F_OK) == 0); @@ -1358,9 +1358,9 @@ int dsClassicMenu(void) { keysSetRepeat(25,5); srand(time(NULL)); - + bool menuButtonPressed = false; - + sysSetCartOwner(BUS_OWNER_ARM9); // Allow arm9 to access GBA ROM if (ms().previousUsedDevice && bothSDandFlashcard() && ms().launchType[ms().previousUsedDevice] == 3 @@ -1398,7 +1398,7 @@ int dsClassicMenu(void) { // SD card if (sdFound() && ms().romPath[0] != "" && access(ms().romPath[0].c_str(), F_OK) == 0) { romFound[0] = true; - + parseRomInformationForDevice(0, filename[0], boxArtPath[0]); } @@ -1450,7 +1450,7 @@ int dsClassicMenu(void) { gbaUseBottomScreen = (gbarunner2ini.GetString("emulation", "useBottomScreen", "false")=="false" ? false : true); } gbaModeIconLoad(gbaUseBottomScreen); - + whiteScreen = false; fadeType = true; // Fade in from white while (!screenFadedIn()) { @@ -1668,9 +1668,9 @@ int dsClassicMenu(void) { mmEffectEx(&snd_select); } } - + auto selectedPosition = cursorPosition; - + auto getTouchedElement = [](const auto& touchPoint){ if (touchPoint.px >= 33 && touchPoint.px <= 221 && touchPoint.py >= 25 && touchPoint.py <= 69) { return MenuEntry::CART; @@ -1724,7 +1724,7 @@ int dsClassicMenu(void) { if (menuButtonPressed) { menuButtonPressed = false; - + switch (selectedPosition) { case MenuEntry::INVALID: break; @@ -2039,7 +2039,7 @@ int dsClassicMenu(void) { gbaSwitch(); } else { mmEffectEx(&snd_wrong); - } + } break; case MenuEntry::BRIGHTNESS: // Adjust backlight level @@ -2188,7 +2188,7 @@ int dsClassicMenu(void) { mkdir("saves", 0777); } ms().dsiWarePrvPath = ms().dsiWarePubPath; - bool savFormat = (ms().secondaryDevice && (!sdFound() || !ms().dsiWareToSD || bs().b4dsMode)); + const bool savFormat = (ms().secondaryDevice && (!isDSiMode() || !sys().scfgSdmmcEnabled() || bs().b4dsMode)); if (savFormat) { ms().dsiWarePubPath = replaceAll(ms().dsiWarePubPath, typeToReplace, getSavExtension()); ms().dsiWarePrvPath = ms().dsiWarePubPath; @@ -2397,7 +2397,7 @@ int dsClassicMenu(void) { bootstrapini.SetInt("NDS-BOOTSTRAP", "GAME_SOFT_RESET", 1); bootstrapini.SetInt("NDS-BOOTSTRAP", "PATCH_MPU_REGION", 0); bootstrapini.SetInt("NDS-BOOTSTRAP", "PATCH_MPU_SIZE", 0); - bootstrapini.SetInt("NDS-BOOTSTRAP", "FORCE_SLEEP_PATCH", + bootstrapini.SetInt("NDS-BOOTSTRAP", "FORCE_SLEEP_PATCH", (ms().forceSleepPatch || (memcmp(io_dldi_data->friendlyName, "TTCARD", 6) == 0 && !sys().isRegularDS()) || (memcmp(io_dldi_data->friendlyName, "DSTT", 4) == 0 && !sys().isRegularDS()) @@ -2615,7 +2615,7 @@ int dsClassicMenu(void) { bootstrapini.SetInt("NDS-BOOTSTRAP", "DONOR_SDK_VER", SetDonorSDK()); bootstrapini.SetInt("NDS-BOOTSTRAP", "PATCH_MPU_REGION", mpuregion); bootstrapini.SetInt("NDS-BOOTSTRAP", "PATCH_MPU_SIZE", mpusize); - bootstrapini.SetInt("NDS-BOOTSTRAP", "FORCE_SLEEP_PATCH", + bootstrapini.SetInt("NDS-BOOTSTRAP", "FORCE_SLEEP_PATCH", (ms().forceSleepPatch || (memcmp(io_dldi_data->friendlyName, "TTCARD", 6) == 0 && !sys().isRegularDS()) || (memcmp(io_dldi_data->friendlyName, "DSTT", 4) == 0 && !sys().isRegularDS()) diff --git a/romsel_aktheme/arm7/source/main.c b/romsel_aktheme/arm7/source/main.c index f20cc5b365..cb7adb675e 100755 --- a/romsel_aktheme/arm7/source/main.c +++ b/romsel_aktheme/arm7/source/main.c @@ -85,7 +85,7 @@ void changeBacklightLevel(void) { // if the backlight is regulable and the console is a phat the range will be 0 - 4 (with 4 being backlight off) // if the backlight is not regulable the only possible values will be 0 and 4 (with 4 being backlight off) backlightLevel += 1 + (3 * !hasRegulableBacklight); - + if (backlightLevel > (3 + isDSPhat)) { backlightLevel = 0; } @@ -146,6 +146,8 @@ int main() { *(u16*)0x02FFFC36 = *(u16*)0x0800015E; // Header CRC16 *(u32*)0x02FFFC38 = *(u32*)0x0800000C; // Game Code + *(u32*)0x02FFFDF0 = REG_SCFG_EXT; + REG_SOUNDCNT |= SOUND_ENABLE; writePowerManagement(PM_CONTROL_REG, ( readPowerManagement(PM_CONTROL_REG) & ~PM_SOUND_MUTE ) | PM_SOUND_AMP ); powerOn(POWER_SOUND); @@ -161,7 +163,7 @@ int main() { fifoInit(); SetYtrigger(80); - + my_installSystemFIFO(); irqSet(IRQ_VCOUNT, VcountHandler); @@ -192,7 +194,7 @@ int main() { // 01: Fade Out // 02: Return - // 03: status (Bit 0: hasRegulableBacklight, Bit 1: scfgEnabled, Bit 2: REG_SNDEXTCNT, Bit 3: isDSPhat, Bit 4: i2cBricked) + // 03: status (Bit 0: hasRegulableBacklight, Bit 1: scfgSdmmcEnabled, Bit 2: REG_SNDEXTCNT, Bit 3: isDSPhat, Bit 4: i2cBricked) // 03: Status: Init/Volume/Battery/SD @@ -200,21 +202,25 @@ int main() { // Battery is 7 bits -- bits 0-7 // Volume is 00h to 1Fh = 5 bits -- bits 8-12 // SD status -- bits 13-14 - // Init status -- bits 15-18 (Bit 0 (15): hasRegulableBacklight, Bit 1 (16): scfgEnabled, Bit 2 (17): REG_SNDEXTCNT, Bit 3 (18): isDSPhat, Bit 4 (19): i2cBricked) + // Init status -- bits 15-18 (Bit 0 (15): hasRegulableBacklight, Bit 1 (16): scfgSdmmcEnabled, Bit 2 (17): REG_SNDEXTCNT, Bit 3 (18): isDSPhat, Bit 4 (19): i2cBricked) + + *(vu32*)0x4004820 = 0x8B7F0305; u8 initStatus = (BIT_SET(!!(REG_SNDEXTCNT), SNDEXTCNT_BIT) - | BIT_SET(!!(REG_SCFG_EXT), REGSCFG_BIT) + | BIT_SET(*(vu32*)0x4004820, SCFGSDMMC_BIT) | BIT_SET(hasRegulableBacklight, BACKLIGHT_BIT) | BIT_SET(isDSPhat, DSPHAT_BIT) | BIT_SET(i2cBricked, I2CBRICKED_BIT)); + *(vu32*)0x4004820 = 0; + status = (status & ~INIT_MASK) | ((initStatus << INIT_OFF) & INIT_MASK); fifoSendValue32(FIFO_USER_03, status); if (REG_SNDEXTCNT == 0) { if (hasRegulableBacklight) backlightLevel = pmBacklight & 3; // Brightness - + if((readPowerManagement(PM_CONTROL_REG) & 0xC) == 0) // DS Phat backlight off backlightLevel = 4; } @@ -233,12 +239,12 @@ int main() { gotCartHeader = true; }*/ - + timeTilVolumeLevelRefresh++; if (timeTilVolumeLevelRefresh == 8) { if ((isDSiMode() || REG_SCFG_EXT != 0) && !i2cBricked) { //vol status = (status & ~VOL_MASK) | ((my_i2cReadRegister(I2C_PM, I2CREGPM_VOL) << VOL_OFF) & VOL_MASK); - status = (status & ~BAT_MASK) | ((my_i2cReadRegister(I2C_PM, I2CREGPM_BATTERY) << BAT_OFF) & BAT_MASK); + status = (status & ~BAT_MASK) | ((my_i2cReadRegister(I2C_PM, I2CREGPM_BATTERY) << BAT_OFF) & BAT_MASK); } else { int battery = (readPowerManagement(PM_BATTERY_REG) & 1)?3:15; int backlight = readPowerManagement(PM_BACKLIGHT_LEVEL); diff --git a/romsel_aktheme/arm9/source/main.cpp b/romsel_aktheme/arm9/source/main.cpp index 343d315625..5deb6c383f 100644 --- a/romsel_aktheme/arm9/source/main.cpp +++ b/romsel_aktheme/arm9/source/main.cpp @@ -317,7 +317,7 @@ int SetDonorSDK() { void SetMPUSettings() { scanKeys(); int pressed = keysHeld(); - + if (pressed & KEY_B){ mpuregion = 1; } else if (pressed & KEY_X){ @@ -404,7 +404,7 @@ void dsCardLaunch() { *(u32*)(0x02000318) = 0x00000013; *(u32*)(0x0200031C) = 0x00000000; *(u16*)(0x02000306) = swiCRC16(0xFFFF, (void*)0x02000308, 0x18); - + unlaunchSetHiyaBoot(); DC_FlushAll(); // Make reboot not fail @@ -998,7 +998,7 @@ int akTheme(void) { keysSetRepeat(15, 2); srand(time(NULL)); - + graphicsLoad(); fontInit(); @@ -1313,7 +1313,7 @@ int akTheme(void) { mkdir("saves", 0777); } ms().dsiWarePrvPath = ms().dsiWarePubPath; - bool savFormat = (ms().secondaryDevice && (!sdFound() || !ms().dsiWareToSD || bs().b4dsMode)); + const bool savFormat = (ms().secondaryDevice && (!isDSiMode() || !sys().scfgSdmmcEnabled() || bs().b4dsMode)); if (savFormat) { ms().dsiWarePubPath = replaceAll(ms().dsiWarePubPath, typeToReplace, getSavExtension()); ms().dsiWarePrvPath = ms().dsiWarePubPath; @@ -1496,7 +1496,7 @@ int akTheme(void) { bootstrapini.SetInt("NDS-BOOTSTRAP", "GAME_SOFT_RESET", 1); bootstrapini.SetInt("NDS-BOOTSTRAP", "PATCH_MPU_REGION", 0); bootstrapini.SetInt("NDS-BOOTSTRAP", "PATCH_MPU_SIZE", 0); - bootstrapini.SetInt("NDS-BOOTSTRAP", "FORCE_SLEEP_PATCH", + bootstrapini.SetInt("NDS-BOOTSTRAP", "FORCE_SLEEP_PATCH", (ms().forceSleepPatch || (memcmp(io_dldi_data->friendlyName, "TTCARD", 6) == 0 && !sys().isRegularDS()) || (memcmp(io_dldi_data->friendlyName, "DSTT", 4) == 0 && !sys().isRegularDS()) @@ -1710,7 +1710,7 @@ int akTheme(void) { bootstrapini.SetInt("NDS-BOOTSTRAP", "DONOR_SDK_VER", SetDonorSDK()); bootstrapini.SetInt("NDS-BOOTSTRAP", "PATCH_MPU_REGION", mpuregion); bootstrapini.SetInt("NDS-BOOTSTRAP", "PATCH_MPU_SIZE", mpusize); - bootstrapini.SetInt("NDS-BOOTSTRAP", "FORCE_SLEEP_PATCH", + bootstrapini.SetInt("NDS-BOOTSTRAP", "FORCE_SLEEP_PATCH", (ms().forceSleepPatch || (memcmp(io_dldi_data->friendlyName, "TTCARD", 6) == 0 && !sys().isRegularDS()) || (memcmp(io_dldi_data->friendlyName, "DSTT", 4) == 0 && !sys().isRegularDS()) @@ -1720,7 +1720,7 @@ int akTheme(void) { if (!isDSiMode() && ms().secondaryDevice && sdFound()) { CIniFile bootstrapiniSD(BOOTSTRAP_INI); bootstrapini.SetInt("NDS-BOOTSTRAP", "DEBUG", bootstrapiniSD.GetInt("NDS-BOOTSTRAP", "DEBUG", 0)); - bootstrapini.SetInt("NDS-BOOTSTRAP", "LOGGING", bootstrapiniSD.GetInt("NDS-BOOTSTRAP", "LOGGING", 0)); + bootstrapini.SetInt("NDS-BOOTSTRAP", "LOGGING", bootstrapiniSD.GetInt("NDS-BOOTSTRAP", "LOGGING", 0)); } displayDiskIcon(!sys().isRunFromSD()); bootstrapini.SaveIniFile( bootstrapinipath ); @@ -2135,7 +2135,7 @@ int akTheme(void) { } } else if (extension(filename, {".xex", ".atr"})) { ms().launchType[ms().secondaryDevice] = TWLSettings::EXEGSDSLaunch; - + ndsToBoot = "sd:/_nds/TWiLightMenu/emulators/A8DS.nds"; if (!isDSiMode() || access(ndsToBoot, F_OK) != 0) { ndsToBoot = "fat:/_nds/TWiLightMenu/emulators/A8DS.nds"; @@ -2143,7 +2143,7 @@ int akTheme(void) { } } else if (extension(filename, {".a26"})) { ms().launchType[ms().secondaryDevice] = TWLSettings::EStellaDSLaunch; - + ndsToBoot = "sd:/_nds/TWiLightMenu/emulators/StellaDS.nds"; if (!isDSiMode() || access(ndsToBoot, F_OK) != 0) { ndsToBoot = "fat:/_nds/TWiLightMenu/emulators/StellaDS.nds"; @@ -2151,7 +2151,7 @@ int akTheme(void) { } } else if (extension(filename, {".a52"})) { ms().launchType[ms().secondaryDevice] = TWLSettings::EA5200DSLaunch; - + ndsToBoot = "sd:/_nds/TWiLightMenu/emulators/A5200DS.nds"; if (!isDSiMode() || access(ndsToBoot, F_OK) != 0) { ndsToBoot = "fat:/_nds/TWiLightMenu/emulators/A5200DS.nds"; @@ -2159,7 +2159,7 @@ int akTheme(void) { } } else if (extension(filename, {".a78"})) { ms().launchType[ms().secondaryDevice] = TWLSettings::EA7800DSLaunch; - + ndsToBoot = "sd:/_nds/TWiLightMenu/emulators/A7800DS.nds"; if (!isDSiMode() || access(ndsToBoot, F_OK) != 0) { ndsToBoot = "fat:/_nds/TWiLightMenu/emulators/A7800DS.nds"; @@ -2175,7 +2175,7 @@ int akTheme(void) { } } else if (extension(filename, {".int"})) { ms().launchType[ms().secondaryDevice] = TWLSettings::ENINTVDSLaunch; - + ndsToBoot = "sd:/_nds/TWiLightMenu/emulators/NINTV-DS.nds"; if (!isDSiMode() || access(ndsToBoot, F_OK) != 0) { ndsToBoot = "fat:/_nds/TWiLightMenu/emulators/NINTV-DS.nds"; @@ -2183,7 +2183,7 @@ int akTheme(void) { } } else if (extension(filename, {".gb", ".sgb", ".gbc"})) { ms().launchType[ms().secondaryDevice] = TWLSettings::EGameYobLaunch; - + ndsToBoot = "sd:/_nds/TWiLightMenu/emulators/gameyob.nds"; if (!isDSiMode() || access(ndsToBoot, F_OK) != 0) { ndsToBoot = "fat:/_nds/TWiLightMenu/emulators/gameyob.nds"; diff --git a/romsel_dsimenutheme/arm7/source/main.c b/romsel_dsimenutheme/arm7/source/main.c index 97aa0d438c..101f94901c 100644 --- a/romsel_dsimenutheme/arm7/source/main.c +++ b/romsel_dsimenutheme/arm7/source/main.c @@ -111,6 +111,8 @@ int main() { *(u16*)0x02FFFC36 = *(u16*)0x0800015E; // Header CRC16 *(u32*)0x02FFFC38 = *(u32*)0x0800000C; // Game Code + *(u32*)0x02FFFDF0 = REG_SCFG_EXT; + REG_SOUNDCNT |= SOUND_ENABLE; writePowerManagement(PM_CONTROL_REG, ( readPowerManagement(PM_CONTROL_REG) & ~PM_SOUND_MUTE ) | PM_SOUND_AMP ); powerOn(POWER_SOUND); @@ -127,7 +129,7 @@ int main() { mmInstall(FIFO_MAXMOD); SetYtrigger(80); - + installSoundFIFO(); my_installSystemFIFO(); @@ -156,7 +158,7 @@ int main() { // 01: Fade Out // 02: Return - // 03: status (Bit 0: hasRegulableBacklight, Bit 1: scfgEnabled, Bit 2: REG_SNDEXTCNT, Bit 3: isDSPhat, Bit 4: i2cBricked) + // 03: status (Bit 0: hasRegulableBacklight, Bit 1: scfgSdmmcEnabled, Bit 2: REG_SNDEXTCNT, Bit 3: isDSPhat, Bit 4: i2cBricked) // 03: Status: Init/Volume/Battery/SD @@ -164,14 +166,18 @@ int main() { // Battery is 7 bits -- bits 0-7 // Volume is 00h to 1Fh = 5 bits -- bits 8-12 // SD status -- bits 13-14 - // Init status -- bits 15-18 (Bit 0 (15): hasRegulableBacklight, Bit 1 (16): scfgEnabled, Bit 2 (17): REG_SNDEXTCNT, Bit 3 (18): isDSPhat, Bit 4 (19): i2cBricked) + // Init status -- bits 15-18 (Bit 0 (15): hasRegulableBacklight, Bit 1 (16): scfgSdmmcEnabled, Bit 2 (17): REG_SNDEXTCNT, Bit 3 (18): isDSPhat, Bit 4 (19): i2cBricked) + + *(vu32*)0x4004820 = 0x8B7F0305; u8 initStatus = (BIT_SET(!!(REG_SNDEXTCNT), SNDEXTCNT_BIT) - | BIT_SET(!!(REG_SCFG_EXT), REGSCFG_BIT) + | BIT_SET(*(vu32*)0x4004820, SCFGSDMMC_BIT) | BIT_SET(!!(pmBacklight & BIT(4) || pmBacklight & BIT(5) || pmBacklight & BIT(6) || pmBacklight & BIT(7)), BACKLIGHT_BIT) | BIT_SET(isPhat(), DSPHAT_BIT) | BIT_SET(i2cBricked, I2CBRICKED_BIT)); + *(vu32*)0x4004820 = 0; + status = (status & ~INIT_MASK) | ((initStatus << INIT_OFF) & INIT_MASK); fifoSendValue32(FIFO_USER_03, status); @@ -196,12 +202,12 @@ int main() { gotCartHeader = true; }*/ - + timeTilVolumeLevelRefresh++; if (timeTilVolumeLevelRefresh == 8) { if ((isDSiMode() || REG_SCFG_EXT != 0) && !i2cBricked) { //vol status = (status & ~VOL_MASK) | ((my_i2cReadRegister(I2C_PM, I2CREGPM_VOL) << VOL_OFF) & VOL_MASK); - status = (status & ~BAT_MASK) | ((my_i2cReadRegister(I2C_PM, I2CREGPM_BATTERY) << BAT_OFF) & BAT_MASK); + status = (status & ~BAT_MASK) | ((my_i2cReadRegister(I2C_PM, I2CREGPM_BATTERY) << BAT_OFF) & BAT_MASK); } else { int battery = (readPowerManagement(PM_BATTERY_REG) & 1)?3:15; int backlight = readPowerManagement(PM_BACKLIGHT_LEVEL); diff --git a/romsel_dsimenutheme/arm9/source/main.cpp b/romsel_dsimenutheme/arm9/source/main.cpp index 4c5d66b42c..81d4820afe 100644 --- a/romsel_dsimenutheme/arm9/source/main.cpp +++ b/romsel_dsimenutheme/arm9/source/main.cpp @@ -1258,7 +1258,7 @@ int dsiMenuTheme(void) { mkdir("saves", 0777); } ms().dsiWarePrvPath = ms().dsiWarePubPath; - bool savFormat = (ms().secondaryDevice && (!sdFound() || !ms().dsiWareToSD || bs().b4dsMode)); + const bool savFormat = (ms().secondaryDevice && (!isDSiMode() || !sys().scfgSdmmcEnabled() || bs().b4dsMode)); if (savFormat) { ms().dsiWarePubPath = replaceAll(ms().dsiWarePubPath, typeToReplace, getSavExtension()); ms().dsiWarePrvPath = ms().dsiWarePubPath; diff --git a/romsel_r4theme/arm7/source/main.c b/romsel_r4theme/arm7/source/main.c index 56c551d9fb..b8ad6f65d0 100644 --- a/romsel_r4theme/arm7/source/main.c +++ b/romsel_r4theme/arm7/source/main.c @@ -111,6 +111,8 @@ int main() { *(u16*)0x02FFFC36 = *(u16*)0x0800015E; // Header CRC16 *(u32*)0x02FFFC38 = *(u32*)0x0800000C; // Game Code + *(u32*)0x02FFFDF0 = REG_SCFG_EXT; + REG_SOUNDCNT |= SOUND_ENABLE; writePowerManagement(PM_CONTROL_REG, ( readPowerManagement(PM_CONTROL_REG) & ~PM_SOUND_MUTE ) | PM_SOUND_AMP ); powerOn(POWER_SOUND); @@ -127,7 +129,7 @@ int main() { mmInstall(FIFO_MAXMOD); SetYtrigger(80); - + installSoundFIFO(); my_installSystemFIFO(); @@ -156,7 +158,7 @@ int main() { // 01: Fade Out // 02: Return - // 03: status (Bit 0: hasRegulableBacklight, Bit 1: scfgEnabled, Bit 2: REG_SNDEXTCNT, Bit 3: isDSPhat, Bit 4: i2cBricked) + // 03: status (Bit 0: hasRegulableBacklight, Bit 1: scfgSdmmcEnabled, Bit 2: REG_SNDEXTCNT, Bit 3: isDSPhat, Bit 4: i2cBricked) // 03: Status: Init/Volume/Battery/SD @@ -164,14 +166,18 @@ int main() { // Battery is 7 bits -- bits 0-7 // Volume is 00h to 1Fh = 5 bits -- bits 8-12 // SD status -- bits 13-14 - // Init status -- bits 15-18 (Bit 0 (15): hasRegulableBacklight, Bit 1 (16): scfgEnabled, Bit 2 (17): REG_SNDEXTCNT, Bit 3 (18): isDSPhat, Bit 4 (19): i2cBricked) + // Init status -- bits 15-18 (Bit 0 (15): hasRegulableBacklight, Bit 1 (16): scfgSdmmcEnabled, Bit 2 (17): REG_SNDEXTCNT, Bit 3 (18): isDSPhat, Bit 4 (19): i2cBricked) + + *(vu32*)0x4004820 = 0x8B7F0305; u8 initStatus = (BIT_SET(!!(REG_SNDEXTCNT), SNDEXTCNT_BIT) - | BIT_SET(!!(REG_SCFG_EXT), REGSCFG_BIT) + | BIT_SET(*(vu32*)0x4004820, SCFGSDMMC_BIT) | BIT_SET(!!(pmBacklight & BIT(4) || pmBacklight & BIT(5) || pmBacklight & BIT(6) || pmBacklight & BIT(7)), BACKLIGHT_BIT) | BIT_SET(isPhat(), DSPHAT_BIT) | BIT_SET(i2cBricked, I2CBRICKED_BIT)); + *(vu32*)0x4004820 = 0; + status = (status & ~INIT_MASK) | ((initStatus << INIT_OFF) & INIT_MASK); fifoSendValue32(FIFO_USER_03, status); @@ -193,12 +199,12 @@ int main() { gotCartHeader = true; }*/ - + timeTilVolumeLevelRefresh++; if (timeTilVolumeLevelRefresh == 8) { if ((isDSiMode() || REG_SCFG_EXT != 0) && !i2cBricked) { //vol status = (status & ~VOL_MASK) | ((my_i2cReadRegister(I2C_PM, I2CREGPM_VOL) << VOL_OFF) & VOL_MASK); - status = (status & ~BAT_MASK) | ((my_i2cReadRegister(I2C_PM, I2CREGPM_BATTERY) << BAT_OFF) & BAT_MASK); + status = (status & ~BAT_MASK) | ((my_i2cReadRegister(I2C_PM, I2CREGPM_BATTERY) << BAT_OFF) & BAT_MASK); } else { int battery = (readPowerManagement(PM_BATTERY_REG) & 1)?3:15; int backlight = readPowerManagement(PM_BACKLIGHT_LEVEL); diff --git a/romsel_r4theme/arm9/source/main.cpp b/romsel_r4theme/arm9/source/main.cpp index 377c27ae3c..8288c22eea 100644 --- a/romsel_r4theme/arm9/source/main.cpp +++ b/romsel_r4theme/arm9/source/main.cpp @@ -292,7 +292,7 @@ int SetDonorSDK() { void SetMPUSettings() { scanKeys(); int pressed = keysHeld(); - + if (pressed & KEY_B){ mpuregion = 1; } else if (pressed & KEY_X){ @@ -379,7 +379,7 @@ void dsCardLaunch() { *(u32*)(0x02000318) = 0x00000013; *(u32*)(0x0200031C) = 0x00000000; *(u16*)(0x02000306) = swiCRC16(0xFFFF, (void*)0x02000308, 0x18); - + unlaunchSetHiyaBoot(); DC_FlushAll(); // Make reboot not fail @@ -978,12 +978,12 @@ int r4Theme(void) { keysSetRepeat(15, 2); srand(time(NULL)); - + bool copyDSiWareSavBack = (ms().previousUsedDevice && bothSDandFlashcard() && ms().launchType[ms().previousUsedDevice] == 3 && ((access(ms().dsiWarePubPath.c_str(), F_OK) == 0 && access("sd:/_nds/TWiLightMenu/tempDSiWare.pub", F_OK) == 0) || (access(ms().dsiWarePrvPath.c_str(), F_OK) == 0 && access("sd:/_nds/TWiLightMenu/tempDSiWare.prv", F_OK) == 0))); - + if (copyDSiWareSavBack) { blackScreen = true; } @@ -994,7 +994,7 @@ int r4Theme(void) { iconTitleInit(); bool menuButtonPressed = false; - + if (ms().theme == TWLSettings::EThemeGBC) { startMenu = false; fadeType = true; // Fade in from white @@ -1481,7 +1481,7 @@ int r4Theme(void) { mkdir("saves", 0777); } ms().dsiWarePrvPath = ms().dsiWarePubPath; - bool savFormat = (ms().secondaryDevice && (!sdFound() || !ms().dsiWareToSD || bs().b4dsMode)); + const bool savFormat = (ms().secondaryDevice && (!isDSiMode() || !sys().scfgSdmmcEnabled() || bs().b4dsMode)); if (savFormat) { ms().dsiWarePubPath = replaceAll(ms().dsiWarePubPath, typeToReplace, getSavExtension()); ms().dsiWarePrvPath = ms().dsiWarePubPath; @@ -1662,7 +1662,7 @@ int r4Theme(void) { bootstrapini.SetInt("NDS-BOOTSTRAP", "GAME_SOFT_RESET", 1); bootstrapini.SetInt("NDS-BOOTSTRAP", "PATCH_MPU_REGION", 0); bootstrapini.SetInt("NDS-BOOTSTRAP", "PATCH_MPU_SIZE", 0); - bootstrapini.SetInt("NDS-BOOTSTRAP", "FORCE_SLEEP_PATCH", + bootstrapini.SetInt("NDS-BOOTSTRAP", "FORCE_SLEEP_PATCH", (ms().forceSleepPatch || (memcmp(io_dldi_data->friendlyName, "TTCARD", 6) == 0 && !sys().isRegularDS()) || (memcmp(io_dldi_data->friendlyName, "DSTT", 4) == 0 && !sys().isRegularDS()) @@ -1870,7 +1870,7 @@ int r4Theme(void) { bootstrapini.SetInt("NDS-BOOTSTRAP", "DONOR_SDK_VER", SetDonorSDK()); bootstrapini.SetInt("NDS-BOOTSTRAP", "PATCH_MPU_REGION", mpuregion); bootstrapini.SetInt("NDS-BOOTSTRAP", "PATCH_MPU_SIZE", mpusize); - bootstrapini.SetInt("NDS-BOOTSTRAP", "FORCE_SLEEP_PATCH", + bootstrapini.SetInt("NDS-BOOTSTRAP", "FORCE_SLEEP_PATCH", (ms().forceSleepPatch || (memcmp(io_dldi_data->friendlyName, "TTCARD", 6) == 0 && !sys().isRegularDS()) || (memcmp(io_dldi_data->friendlyName, "DSTT", 4) == 0 && !sys().isRegularDS()) @@ -1880,7 +1880,7 @@ int r4Theme(void) { if (!isDSiMode() && ms().secondaryDevice && sdFound()) { CIniFile bootstrapiniSD(BOOTSTRAP_INI); bootstrapini.SetInt("NDS-BOOTSTRAP", "DEBUG", bootstrapiniSD.GetInt("NDS-BOOTSTRAP", "DEBUG", 0)); - bootstrapini.SetInt("NDS-BOOTSTRAP", "LOGGING", bootstrapiniSD.GetInt("NDS-BOOTSTRAP", "LOGGING", 0)); + bootstrapini.SetInt("NDS-BOOTSTRAP", "LOGGING", bootstrapiniSD.GetInt("NDS-BOOTSTRAP", "LOGGING", 0)); } bootstrapini.SaveIniFile( bootstrapinipath ); @@ -2284,7 +2284,7 @@ int r4Theme(void) { } } else if (extension(filename, {".xex", ".atr"})) { ms().launchType[ms().secondaryDevice] = TWLSettings::EXEGSDSLaunch; - + ndsToBoot = "sd:/_nds/TWiLightMenu/emulators/A8DS.nds"; if (!isDSiMode() || access(ndsToBoot, F_OK) != 0) { ndsToBoot = "fat:/_nds/TWiLightMenu/emulators/A8DS.nds"; @@ -2292,7 +2292,7 @@ int r4Theme(void) { } } else if (extension(filename, {".a26"})) { ms().launchType[ms().secondaryDevice] = TWLSettings::EStellaDSLaunch; - + ndsToBoot = "sd:/_nds/TWiLightMenu/emulators/StellaDS.nds"; if (!isDSiMode() || access(ndsToBoot, F_OK) != 0) { ndsToBoot = "fat:/_nds/TWiLightMenu/emulators/StellaDS.nds"; @@ -2300,7 +2300,7 @@ int r4Theme(void) { } } else if (extension(filename, {".a52"})) { ms().launchType[ms().secondaryDevice] = TWLSettings::EA5200DSLaunch; - + ndsToBoot = "sd:/_nds/TWiLightMenu/emulators/A5200DS.nds"; if (!isDSiMode() || access(ndsToBoot, F_OK) != 0) { ndsToBoot = "fat:/_nds/TWiLightMenu/emulators/A5200DS.nds"; @@ -2308,7 +2308,7 @@ int r4Theme(void) { } } else if (extension(filename, {".a78"})) { ms().launchType[ms().secondaryDevice] = TWLSettings::EA7800DSLaunch; - + ndsToBoot = "sd:/_nds/TWiLightMenu/emulators/A7800DS.nds"; if (!isDSiMode() || access(ndsToBoot, F_OK) != 0) { ndsToBoot = "fat:/_nds/TWiLightMenu/emulators/A7800DS.nds"; @@ -2324,7 +2324,7 @@ int r4Theme(void) { } } else if (extension(filename, {".int"})) { ms().launchType[ms().secondaryDevice] = TWLSettings::ENINTVDSLaunch; - + ndsToBoot = "sd:/_nds/TWiLightMenu/emulators/NINTV-DS.nds"; if (!isDSiMode() || access(ndsToBoot, F_OK) != 0) { ndsToBoot = "fat:/_nds/TWiLightMenu/emulators/NINTV-DS.nds"; @@ -2332,7 +2332,7 @@ int r4Theme(void) { } } else if (extension(filename, {".gb", ".sgb", ".gbc"})) { ms().launchType[ms().secondaryDevice] = TWLSettings::EGameYobLaunch; - + ndsToBoot = "sd:/_nds/TWiLightMenu/emulators/gameyob.nds"; if (!isDSiMode() || access(ndsToBoot, F_OK) != 0) { ndsToBoot = "fat:/_nds/TWiLightMenu/emulators/gameyob.nds"; diff --git a/settings/arm7/source/main.c b/settings/arm7/source/main.c index f9d9ca2b8f..5de7abe6b6 100644 --- a/settings/arm7/source/main.c +++ b/settings/arm7/source/main.c @@ -179,6 +179,8 @@ int main() { *(u16*)0x02FFFC36 = *(u16*)0x0800015E; // Header CRC16 *(u32*)0x02FFFC38 = *(u32*)0x0800000C; // Game Code + *(u32*)0x02FFFDF0 = REG_SCFG_EXT; + // clear sound registers dmaFillWords(0, (void*)0x04000400, 0x100); @@ -227,7 +229,7 @@ int main() { // 01: Fade Out // 02: Return - // 03: status (Bit 0: hasRegulableBacklight, Bit 1: scfgEnabled, Bit 2: REG_SNDEXTCNT, Bit 3: isDSPhat, Bit 4: i2cBricked) + // 03: status (Bit 0: hasRegulableBacklight, Bit 1: scfgSdmmcEnabled, Bit 2: REG_SNDEXTCNT, Bit 3: isDSPhat, Bit 4: i2cBricked) // 03: Status: Init/Volume/Battery/SD @@ -235,14 +237,18 @@ int main() { // Battery is 7 bits -- bits 0-7 // Volume is 00h to 1Fh = 5 bits -- bits 8-12 // SD status -- bits 13-14 - // Init status -- bits 15-18 (Bit 0 (15): hasRegulableBacklight, Bit 1 (16): scfgEnabled, Bit 2 (17): REG_SNDEXTCNT, Bit 3 (18): isDSPhat, Bit 4 (19): i2cBricked) + // Init status -- bits 15-18 (Bit 0 (15): hasRegulableBacklight, Bit 1 (16): scfgSdmmcEnabled, Bit 2 (17): REG_SNDEXTCNT, Bit 3 (18): isDSPhat, Bit 4 (19): i2cBricked) + + *(vu32*)0x4004820 = 0x8B7F0305; u8 initStatus = (BIT_SET(!!(REG_SNDEXTCNT), SNDEXTCNT_BIT) - | BIT_SET(!!(REG_SCFG_EXT), REGSCFG_BIT) + | BIT_SET(*(vu32*)0x4004820, SCFGSDMMC_BIT) | BIT_SET(!!(pmBacklight & BIT(4) || pmBacklight & BIT(5) || pmBacklight & BIT(6) || pmBacklight & BIT(7)), BACKLIGHT_BIT) | BIT_SET(isPhat(), DSPHAT_BIT) | BIT_SET(i2cBricked, I2CBRICKED_BIT)); + *(vu32*)0x4004820 = 0; + status = (status & ~INIT_MASK) | ((initStatus << INIT_OFF) & INIT_MASK); fifoSendValue32(FIFO_USER_03, status); diff --git a/settings/arm9/source/language.inl b/settings/arm9/source/language.inl index 0fdcc3b60a..5c302906da 100644 --- a/settings/arm9/source/language.inl +++ b/settings/arm9/source/language.inl @@ -255,7 +255,8 @@ STRING(DESCRIPTION_SNDFREQ_1, "32.73kHz is original quality, 47.61kHz is high qu STRING(DESCRIPTION_ROMREADLED_1, "Sets LED as CPU ROM read indicator.") STRING(DESCRIPTION_DMAROMREADLED, "Sets LED as DMA ROM read indicator.") STRING(DESCRIPTION_PRECISEVOLUMECTRL, "Adds more volume levels in between ones from the VOL -/+ buttons. Press SELECT+UP/DOWN to adjust the volume with the extra levels.") -STRING(DESCRIPTION_DSIWARETOSD, "Copies the launched DSiWare from flashcard to a temporary location on the console's SD card. Turning this off will increase load speed, but will decrease compatibility.") +STRING(DESCRIPTION_DSIWARETOSD, "Copies the launched DSiWare from flashcard to a temp. location on the console's SD card. Turning this off will increase load speed, but redirects NAND/SD contents to flashcard.") +STRING(DESCRIPTION_DSIWARETOSD_DSBIOS, "Copies the launched DSiWare from flashcard to a temp. location on the console's SD card. Turning this off will increase load speed, but will decrease compatibility.") STRING(DESCRIPTION_PHOTOLOCATION, "Select the photo folder location you want to use in DSiWare titles.") STRING(DESCRIPTION_TWLNANDLOCATION, "Select which device you want DSiWare titles to read the TWLNAND contents from.") STRING(DESCRIPTION_CACHEBLOCKSIZE, "Depending on the size, some areas in DS(i) games will load slightly faster or slower.") diff --git a/settings/arm9/source/main.cpp b/settings/arm9/source/main.cpp index 7210d757d9..190736faea 100644 --- a/settings/arm9/source/main.cpp +++ b/settings/arm9/source/main.cpp @@ -1327,7 +1327,7 @@ int settingsMode(void) if (flashcardFound()) { bootstrapPage .option(STR_DSIWARETOSD, - STR_DESCRIPTION_DSIWARETOSD, + isDSiMode() ? STR_DESCRIPTION_DSIWARETOSD : STR_DESCRIPTION_DSIWARETOSD_DSBIOS, Option::Bool(&ms().dsiWareToSD), {STR_YES, STR_NO}, {true, false}); diff --git a/settings/nitrofiles/languages/en/language.ini b/settings/nitrofiles/languages/en/language.ini index c9779176af..d505ed0203 100644 --- a/settings/nitrofiles/languages/en/language.ini +++ b/settings/nitrofiles/languages/en/language.ini @@ -247,7 +247,8 @@ DESCRIPTION_SNDFREQ_1=32.73kHz is original quality, 47.61kHz is high quality. Do DESCRIPTION_ROMREADLED_1=Sets LED as CPU ROM read indicator. DESCRIPTION_DMAROMREADLED=Sets LED as DMA ROM read indicator. DESCRIPTION_PRECISEVOLUMECTRL=Adds more volume levels in between ones from the VOL -/+ buttons. Press SELECT+UP/DOWN to adjust the volume with the extra levels. -DESCRIPTION_DSIWARETOSD=Copies the launched DSiWare from flashcard to a temporary location on the console's SD card. Turning this off will increase load speed, but will decrease compatibility. +DESCRIPTION_DSIWARETOSD=Copies the launched DSiWare from flashcard to a temp. location on the console's SD card. Turning this off will increase load speed, but redirects NAND/SD contents to flashcard. +DESCRIPTION_DSIWARETOSD_DSBIOS=Copies the launched DSiWare from flashcard to a temp. location on the console's SD card. Turning this off will increase load speed, but will decrease compatibility. DESCRIPTION_PHOTOLOCATION=Select the photo folder location you want to use in DSiWare titles. DESCRIPTION_TWLNANDLOCATION=Select which device you want DSiWare titles to read the TWLNAND contents from. DESCRIPTION_CACHEBLOCKSIZE=Depending on the size, some areas in DS(i) games will load slightly faster or slower. diff --git a/title/arm7/source/main.c b/title/arm7/source/main.c index ba814a9e86..fb60ac3643 100644 --- a/title/arm7/source/main.c +++ b/title/arm7/source/main.c @@ -123,7 +123,7 @@ extern u16 biosRead16(u32 addr); void biosDump(void* dst, const void* src, u32 len) { u16* _dst = (u16*)dst; - + for (u32 i = 0; i < len; i+=2) { _dst[i>>1] = biosRead16(((u32)src) + i); @@ -194,6 +194,8 @@ int main() { *(u16*)0x02FFFC36 = *(u16*)0x0800015E; // Header CRC16 *(u32*)0x02FFFC38 = *(u32*)0x0800000C; // Game Code + *(u32*)0x02FFFDF0 = REG_SCFG_EXT; + // clear sound registers dmaFillWords(0, (void*)0x04000400, 0x100); @@ -249,7 +251,7 @@ int main() { // 01: Fade Out // 02: Return - // 03: status (Bit 0: hasRegulableBacklight, Bit 1: scfgEnabled, Bit 2: REG_SNDEXTCNT, Bit 3: isDSPhat, Bit 4: i2cBricked) + // 03: status (Bit 0: hasRegulableBacklight, Bit 1: scfgSdmmcEnabled, Bit 2: REG_SNDEXTCNT, Bit 3: isDSPhat, Bit 4: i2cBricked) // 03: Status: Init/Volume/Battery/SD @@ -257,14 +259,18 @@ int main() { // Battery is 7 bits -- bits 0-7 // Volume is 00h to 1Fh = 5 bits -- bits 8-12 // SD status -- bits 13-14 - // Init status -- bits 15-18 (Bit 0 (15): hasRegulableBacklight, Bit 1 (16): scfgEnabled, Bit 2 (17): REG_SNDEXTCNT, Bit 3 (18): isDSPhat, Bit 4 (19): i2cBricked) + // Init status -- bits 15-18 (Bit 0 (15): hasRegulableBacklight, Bit 1 (16): scfgSdmmcEnabled, Bit 2 (17): REG_SNDEXTCNT, Bit 3 (18): isDSPhat, Bit 4 (19): i2cBricked) + + *(vu32*)0x4004820 = 0x8B7F0305; u8 initStatus = (BIT_SET(!!(REG_SNDEXTCNT), SNDEXTCNT_BIT) - | BIT_SET(!!(REG_SCFG_EXT), REGSCFG_BIT) + | BIT_SET(*(vu32*)0x4004820, SCFGSDMMC_BIT) | BIT_SET(!!(pmBacklight & BIT(4) || pmBacklight & BIT(5) || pmBacklight & BIT(6) || pmBacklight & BIT(7)), BACKLIGHT_BIT) | BIT_SET(isPhat(), DSPHAT_BIT) | BIT_SET(i2cBricked, I2CBRICKED_BIT)); + *(vu32*)0x4004820 = 0; + status = (status & ~INIT_MASK) | ((initStatus << INIT_OFF) & INIT_MASK); fifoSendValue32(FIFO_USER_03, status); diff --git a/title/arm9/source/main.cpp b/title/arm9/source/main.cpp index d8fde14a9e..b4e0e72b4e 100644 --- a/title/arm9/source/main.cpp +++ b/title/arm9/source/main.cpp @@ -627,7 +627,7 @@ void lastRunROM() bootstrapini.SetInt("NDS-BOOTSTRAP", "BOOST_VRAM", (perGameSettings_boostVram == -1 ? DEFAULT_BOOST_VRAM : perGameSettings_boostVram)); bootstrapini.SetInt("NDS-BOOTSTRAP", "CARD_READ_DMA", cardReadDMA); bootstrapini.SetInt("NDS-BOOTSTRAP", "ASYNC_CARD_READ", asyncCardRead); - bootstrapini.SetInt("NDS-BOOTSTRAP", "FORCE_SLEEP_PATCH", + bootstrapini.SetInt("NDS-BOOTSTRAP", "FORCE_SLEEP_PATCH", (ms().forceSleepPatch || (memcmp(io_dldi_data->friendlyName, "TTCARD", 6) == 0 && !sys().isRegularDS()) || (memcmp(io_dldi_data->friendlyName, "DSTT", 4) == 0 && !sys().isRegularDS()) @@ -818,7 +818,7 @@ void lastRunROM() fread(&NDSHeader, 1, sizeof(NDSHeader), f_nds_file); fclose(f_nds_file); - bool savFormat = (ms().previousUsedDevice && (!sdFound() || !ms().dsiWareToSD || bs().b4dsMode)); + const bool savFormat = (ms().previousUsedDevice && (!isDSiMode() || !sys().scfgSdmmcEnabled() || bs().b4dsMode)); if (!runTempDSiWare) { ms().dsiWareSrlPath = ms().romPath[ms().previousUsedDevice]; @@ -970,7 +970,7 @@ void lastRunROM() bootstrapini.SetInt("NDS-BOOTSTRAP", "GAME_SOFT_RESET", 1); bootstrapini.SetInt("NDS-BOOTSTRAP", "PATCH_MPU_REGION", 0); bootstrapini.SetInt("NDS-BOOTSTRAP", "PATCH_MPU_SIZE", 0); - bootstrapini.SetInt("NDS-BOOTSTRAP", "FORCE_SLEEP_PATCH", + bootstrapini.SetInt("NDS-BOOTSTRAP", "FORCE_SLEEP_PATCH", (ms().forceSleepPatch || (memcmp(io_dldi_data->friendlyName, "TTCARD", 6) == 0 && !sys().isRegularDS()) || (memcmp(io_dldi_data->friendlyName, "DSTT", 4) == 0 && !sys().isRegularDS()) @@ -2721,7 +2721,7 @@ int titleMode(void) // Create "nds-bootstrap.ini" bs().saveSettings(); } - + scanKeys(); autoRunBit = (*(u32*)0x02000000 & BIT(3)); diff --git a/universal/include/common/arm7status.h b/universal/include/common/arm7status.h index a8aaa05c88..4aa8d48fe1 100644 --- a/universal/include/common/arm7status.h +++ b/universal/include/common/arm7status.h @@ -5,7 +5,7 @@ #define I2CBRICKED_BIT 4 #define DSPHAT_BIT 3 #define SNDEXTCNT_BIT 2 -#define REGSCFG_BIT 1 +#define SCFGSDMMC_BIT 1 #define BACKLIGHT_BIT 0 #define BAT_MASK 0b00000000000011111111 diff --git a/universal/include/common/systemdetails.h b/universal/include/common/systemdetails.h index 9ba529e3c5..4300a407f5 100644 --- a/universal/include/common/systemdetails.h +++ b/universal/include/common/systemdetails.h @@ -22,6 +22,7 @@ class SystemDetails bool dsiWramAccess() { return _dsiWramAccess; } bool dsiWramMirrored() { return _dsiWramMirrored; } bool arm7SCFGLocked() { return _arm7SCFGLocked; } + bool scfgSdmmcEnabled() { return _scfgSdmmcEnabled; } bool isRunFromSD() { return _isRunFromSD; } bool isRegularDS() { return _isRegularDS; } bool fatInitOk() { return _fatInitOk; } @@ -41,6 +42,7 @@ class SystemDetails bool _dsiWramAccess; bool _dsiWramMirrored; bool _arm7SCFGLocked; + bool _scfgSdmmcEnabled; bool _isRunFromSD; bool _isRegularDS; bool _isDSPhat; diff --git a/universal/source/common/systemdetails.cpp b/universal/source/common/systemdetails.cpp index a6fedcba7f..704240f45d 100644 --- a/universal/source/common/systemdetails.cpp +++ b/universal/source/common/systemdetails.cpp @@ -34,6 +34,7 @@ SystemDetails::SystemDetails() _dsiWramAccess = false; _dsiWramMirrored = false; _arm7SCFGLocked = false; + _scfgSdmmcEnabled = false; _isRegularDS = true; _isDSPhat = false; _hasRegulableBacklight = true; @@ -54,9 +55,9 @@ SystemDetails::SystemDetails() *(vu32*)0x03700000 = wordBak; } - if (CHECK_BIT(status, REGSCFG_BIT) == 0) { - _arm7SCFGLocked = true; // If TWiLight Menu++ is being run from DSiWarehax or flashcard, then arm7 SCFG is locked. - } + _arm7SCFGLocked = (*(u32*)0x02FFFDF0 == 0); // If TWiLight Menu++ is being run from DSiWarehax or flashcard, then arm7 SCFG is locked. + + _scfgSdmmcEnabled = (CHECK_BIT(status, SCFGSDMMC_BIT) != 0); if (CHECK_BIT(status, SNDEXTCNT_BIT) != 0) { _isRegularDS = false; // If sound frequency setting is found, then the console is not a DS Phat/Lite