Skip to content

Commit ad3e8b4

Browse files
committed
Add Pico Loader as a game loader setting for flashcards
1 parent 4d4f0d1 commit ad3e8b4

File tree

37 files changed

+823
-112
lines changed

37 files changed

+823
-112
lines changed

quickmenu/arm7/source/main.c

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include <maxmod7.h>
3333
#include "common/isPhatCheck.h"
3434
#include "common/arm7status.h"
35+
#include "common/picoLoader7.h"
3536

3637
#define REG_SCFG_WL *(vu16*)0x4004020
3738

@@ -81,6 +82,20 @@ void ReturntoDSiMenu(void) {
8182
}
8283
}
8384

85+
typedef void (*pico_loader_7_func_t)(void);
86+
87+
static void resetDSPico() {
88+
memset((void*)0x40000B0, 0, 0x30);
89+
90+
REG_IME = IME_DISABLE;
91+
REG_IE = 0;
92+
REG_IF = ~0;
93+
94+
auto header7 = (pload_header7_t*)0x06000000;
95+
// header7->dldiDriver = (void*)0x037F8000;
96+
((pico_loader_7_func_t)header7->entryPoint)();
97+
}
98+
8499
//---------------------------------------------------------------------------------
85100
void changeBacklightLevel(void) {
86101
//---------------------------------------------------------------------------------
@@ -359,11 +374,11 @@ int main() {
359374
*(u32*)(0x2FFFD0C) = 0;
360375
}
361376
rebootTimer++;
362-
}
363-
364-
if (*(u32*)(0x2FFFD0C) == 0x454D4D43) {
377+
} else if (*(u32*)(0x2FFFD0C) == 0x454D4D43) {
365378
my_sdmmc_get_cid(true, (u32*)0x2FFD7BC); // Get eMMC CID
366379
*(u32*)(0x2FFFD0C) = 0;
380+
} else if (*(u32*)(0x2FFFD0C) == 0x4F434950) { // 'PICO'
381+
resetDSPico();
367382
}
368383
swiWaitForVBlank();
369384
}

quickmenu/arm9/source/cheat.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ bool CheatCodelist::parse(const std::string& aFileName)
5959
{
6060
const char* usrcheatPath = sys().isRunFromSD() ? "sd:/_nds/TWiLightMenu/extras/usrcheat.dat" : "fat:/_nds/TWiLightMenu/extras/usrcheat.dat";
6161
loadPerGameSettings(aFileName.substr(aFileName.find_last_of('/') + 1));
62-
if (ms().secondaryDevice && !(perGameSettings_useBootstrap == -1 ? ms().useBootstrap : perGameSettings_useBootstrap) && ms().kernelUseable) {
62+
if (ms().secondaryDevice && !(perGameSettings_fcGameLoader == -1 ? (ms().fcGameLoader == TWLSettings::ENdsBootstrap) : (perGameSettings_fcGameLoader == TWLSettings::ENdsBootstrap)) && ms().kernelUseable) {
6363
if ((memcmp(io_dldi_data->friendlyName, "R4iDSN", 6) == 0)
6464
|| (memcmp(io_dldi_data->friendlyName, "R4iTT", 5) == 0)
6565
|| (memcmp(io_dldi_data->friendlyName, "Acekard AK2", 0xB) == 0)

quickmenu/arm9/source/language.inl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ STRING(BOOTSTRAP_NIGHTLY_NOT_FOUND, "nds-bootstrap (Nightly)\nnot found.")
4242
STRING(BOOTSTRAP_RELEASE_NOT_FOUND, "nds-bootstrap (Release)\nnot found.")
4343
STRING(BOOTSTRAP_HB_NIGHTLY_NOT_FOUND, "nds-bootstrap for homebrew\n(Nightly) not found.")
4444
STRING(BOOTSTRAP_HB_RELEASE_NOT_FOUND, "nds-bootstrap for homebrew\n(Release) not found.")
45+
STRING(PICO_LOADER_NOT_FOUND, "Pico Loader not found.")
4546
STRING(FAILED_TO_COPY_WIDESCREEN, "Failed to copy widescreen\ncode for the game.")
4647
STRING(FLASHCARD_UNSUPPORTED, "Flashcard may be unsupported.")
4748
STRING(FLASHCARD_NAME, "Flashcard name:")

quickmenu/arm9/source/main.cpp

Lines changed: 91 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#include "common/logging.h"
3434
#include "common/nds_loader_arm9.h"
3535
#include "common/nds_bootstrap_loader.h"
36+
#include "DSpicoLauncher.h"
3637
#include "common/stringtool.h"
3738
#include "common/systemdetails.h"
3839
#include "common/tonccpy.h"
@@ -2548,7 +2549,96 @@ int dsClassicMenu(void) {
25482549

25492550
unlaunchRomBoot(ms().romPath[ms().secondaryDevice]);
25502551
} else if (useBackend) {
2551-
if ((((perGameSettings_useBootstrap == -1 ? ms().useBootstrap : perGameSettings_useBootstrap) && !ms().homebrewBootstrap) || !ms().secondaryDevice) || (dsiFeatures() && unitCode[ms().secondaryDevice] > 0 && (perGameSettings_dsiMode == -1 ? DEFAULT_DSI_MODE : perGameSettings_dsiMode))
2552+
if ((perGameSettings_fcGameLoader == -1 ? (ms().fcGameLoader == TWLSettings::EPicoLoader) : (perGameSettings_fcGameLoader == TWLSettings::EPicoLoader)) && !ms().homebrewBootstrap && ms().secondaryDevice && (dsiFeatures() || unitCode[ms().secondaryDevice] < 3)) {
2553+
std::string path = argarray[0];
2554+
std::string savename = replaceAll(filename[ms().secondaryDevice], typeToReplace, getSavExtension());
2555+
std::string ramdiskname = replaceAll(filename[ms().secondaryDevice], typeToReplace, getImgExtension());
2556+
std::string romFolderNoSlash = romfolder[ms().secondaryDevice];
2557+
RemoveTrailingSlashes(romFolderNoSlash);
2558+
std::string savepath = romFolderNoSlash + "/saves/" + savename;
2559+
std::string ramdiskpath = romFolderNoSlash + "/ramdisks/" + ramdiskname;
2560+
if (isHomebrew[ms().secondaryDevice]) {
2561+
// Do nothing
2562+
} else if (ms().saveLocation == TWLSettings::ETWLMFolder) {
2563+
std::string twlmSavesFolder = sys().isRunFromSD() ? "sd:/_nds/TWiLightMenu/saves" : "fat:/_nds/TWiLightMenu/saves";
2564+
mkdir(twlmSavesFolder.c_str(), 0777);
2565+
savepath = twlmSavesFolder + "/" + savename;
2566+
} else if (ms().saveLocation == TWLSettings::EGamesFolder) {
2567+
savepath = romFolderNoSlash + "/" + savename;
2568+
} else {
2569+
mkdir("saves", 0777);
2570+
}
2571+
2572+
if (!isHomebrew[ms().secondaryDevice]) {
2573+
// Create or expand save if game isn't homebrew
2574+
u32 orgsavesize = getFileSize(savepath.c_str());
2575+
u32 savesize = 524288; // 512KB (default size)
2576+
2577+
u32 gameTidHex = 0;
2578+
tonccpy(&gameTidHex, gameTid[ms().secondaryDevice], 4);
2579+
2580+
for (int i = 0; i < (int)sizeof(ROMList)/8; i++) {
2581+
ROMListEntry* curentry = &ROMList[i];
2582+
if (gameTidHex == curentry->GameCode) {
2583+
if (curentry->SaveMemType != 0xFFFFFFFF) savesize = sramlen[curentry->SaveMemType];
2584+
break;
2585+
}
2586+
}
2587+
2588+
if ((orgsavesize == 0 && savesize > 0) || (orgsavesize < savesize)) {
2589+
while (!screenFadedOut()) {
2590+
swiWaitForVBlank();
2591+
}
2592+
whiteScreen = true;
2593+
fadeSpeed = true; // Fast fading
2594+
clearText();
2595+
printSmall(false, 0, 88, (orgsavesize == 0) ? STR_CREATING_SAVE : STR_EXPANDING_SAVE, Alignment::center);
2596+
updateText(false);
2597+
2598+
fadeType = true; // Fade in from white
2599+
2600+
FILE *pFile = fopen(savepath.c_str(), orgsavesize > 0 ? "r+" : "wb");
2601+
if (pFile) {
2602+
showProgressBar = true;
2603+
u32 i = (orgsavesize>0 ? orgsavesize : 0);
2604+
while (1) {
2605+
i += 0x8000;
2606+
if (i > savesize) i = savesize;
2607+
progressBarLength = i/(savesize/192);
2608+
fseek(pFile, i - 1, SEEK_SET);
2609+
fputc('\0', pFile);
2610+
if (i == savesize) break;
2611+
}
2612+
fclose(pFile);
2613+
showProgressBar = false;
2614+
}
2615+
clearText();
2616+
printSmall(false, 0, 88, (orgsavesize == 0) ? STR_SAVE_CREATED : STR_SAVE_EXPANDED, Alignment::center);
2617+
updateText(false);
2618+
for (int i = 0; i < 30; i++) swiWaitForVBlank();
2619+
fadeType = false; // Fade out
2620+
}
2621+
}
2622+
2623+
ms().launchType[ms().secondaryDevice] = TWLSettings::ESDFlashcardLaunch;
2624+
ms().previousUsedDevice = ms().secondaryDevice;
2625+
ms().saveSettings();
2626+
2627+
int err = picoLaunchRom(path, savepath);
2628+
2629+
char text[64];
2630+
snprintf (text, sizeof(text), STR_START_FAILED_ERROR.c_str(), err);
2631+
whiteScreen = true;
2632+
fadeSpeed = true; // Fast fading
2633+
clearText();
2634+
printSmall(false, 4, 4, text);
2635+
if (err == 1) {
2636+
printSmall(false, 4, 24, STR_PICO_LOADER_NOT_FOUND);
2637+
}
2638+
fadeType = true; // Fade in
2639+
stop();
2640+
} else
2641+
if ((((perGameSettings_fcGameLoader == -1 ? (ms().fcGameLoader == TWLSettings::ENdsBootstrap) : (perGameSettings_fcGameLoader == TWLSettings::ENdsBootstrap)) && !ms().homebrewBootstrap) || !ms().secondaryDevice) || (dsiFeatures() && unitCode[ms().secondaryDevice] > 0 && (perGameSettings_dsiMode == -1 ? DEFAULT_DSI_MODE : perGameSettings_dsiMode))
25522642
|| (ms().secondaryDevice && !ms().kernelUseable)
25532643
|| (unitCode[ms().secondaryDevice] == 3 && !ms().homebrewBootstrap)) {
25542644
std::string path = argarray[0];

quickmenu/arm9/source/perGameSettings.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ int perGameSettings_bootstrapFile = -1;
3232
int perGameSettings_wideScreen = -1;
3333
int perGameSettings_dsiwareBooter = -1;
3434
int perGameSettings_useBootstrap = -1;
35+
int perGameSettings_fcGameLoader = -1;
3536
int perGameSettings_saveRelocation = -1;
3637

3738
char pergamefilepath[256];
@@ -59,6 +60,7 @@ void loadPerGameSettings (std::string filename) {
5960
perGameSettings_wideScreen = pergameini.GetInt("GAMESETTINGS", "WIDESCREEN", -1);
6061
perGameSettings_dsiwareBooter = pergameini.GetInt("GAMESETTINGS", "DSIWARE_BOOTER", -1);
6162
perGameSettings_useBootstrap = pergameini.GetInt("GAMESETTINGS", "USE_BOOTSTRAP", -1);
63+
perGameSettings_fcGameLoader = pergameini.GetInt("GAMESETTINGS", "FC_GAME_LOADER", -1);
6264
perGameSettings_saveRelocation = pergameini.GetInt("GAMESETTINGS", "SAVE_RELOCATION", -1);
6365
}
6466

quickmenu/arm9/source/perGameSettings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ extern int perGameSettings_wideScreen;
2020
extern int perGameSettings_expandRomSpace;
2121
extern int perGameSettings_dsiwareBooter;
2222
extern int perGameSettings_useBootstrap;
23+
extern int perGameSettings_fcGameLoader;
2324
extern int perGameSettings_saveRelocation;
2425

2526
void loadPerGameSettings(std::string filename);

quickmenu/nitrofiles/languages/en/language.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ BOOTSTRAP_NIGHTLY_NOT_FOUND = nds-bootstrap (Nightly)\nnot found.
3939
BOOTSTRAP_RELEASE_NOT_FOUND = nds-bootstrap (Release)\nnot found.
4040
BOOTSTRAP_HB_NIGHTLY_NOT_FOUND = nds-bootstrap for homebrew\n(Nightly) not found.
4141
BOOTSTRAP_HB_RELEASE_NOT_FOUND = nds-bootstrap for homebrew\n(Release) not found.
42+
PICO_LOADER_NOT_FOUND = Pico Loader not found.
4243
FAILED_TO_COPY_WIDESCREEN = Failed to copy widescreen\ncode for the game.
4344
FLASHCARD_UNSUPPORTED = Flashcard may be unsupported.
4445
FLASHCARD_NAME = Flashcard name:

romsel_aktheme/arm9/source/cheat.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ bool CheatCodelist::parse(const std::string& aFileName)
6565
if (romData(aFileName,gamecode,romcrc32))
6666
{
6767
const char* usrcheatPath = sys().isRunFromSD() ? "sd:/_nds/TWiLightMenu/extras/usrcheat.dat" : "fat:/_nds/TWiLightMenu/extras/usrcheat.dat";
68-
if (ms().secondaryDevice && !(perGameSettings_useBootstrapCheat == -1 ? ms().useBootstrap : perGameSettings_useBootstrapCheat) && ms().kernelUseable) {
68+
if (ms().secondaryDevice && !(perGameSettings_fcGameLoaderCheat == -1 ? (ms().fcGameLoader == TWLSettings::ENdsBootstrap) : (perGameSettings_fcGameLoaderCheat == TWLSettings::ENdsBootstrap)) && ms().kernelUseable) {
6969
if ((memcmp(io_dldi_data->friendlyName, "R4iDSN", 6) == 0)
7070
|| (memcmp(io_dldi_data->friendlyName, "R4iTT", 5) == 0)
7171
|| (memcmp(io_dldi_data->friendlyName, "Acekard AK2", 0xB) == 0)
@@ -584,7 +584,7 @@ static void updateDB(u8 value,u32 offset,FILE* db)
584584
void CheatCodelist::onGenerate(void)
585585
{
586586
const char* usrcheatPath = sys().isRunFromSD() ? "sd:/_nds/TWiLightMenu/extras/usrcheat.dat" : "fat:/_nds/TWiLightMenu/extras/usrcheat.dat";
587-
if (ms().secondaryDevice && !(perGameSettings_useBootstrapCheat == -1 ? ms().useBootstrap : perGameSettings_useBootstrapCheat)) {
587+
if (ms().secondaryDevice && !(perGameSettings_fcGameLoaderCheat == -1 ? (ms().fcGameLoader == TWLSettings::ENdsBootstrap) : (perGameSettings_fcGameLoaderCheat == TWLSettings::ENdsBootstrap))) {
588588
if ((memcmp(io_dldi_data->friendlyName, "R4(DS) - Revolution for DS", 26) == 0)
589589
|| (memcmp(io_dldi_data->friendlyName, "R4TF", 4) == 0)
590590
|| (memcmp(io_dldi_data->friendlyName, "R4iDSN", 6) == 0)

romsel_aktheme/arm9/source/fileBrowse.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1751,7 +1751,7 @@ std::string browseForFile(const std::vector<std::string_view> extensionList) {
17511751
proceedToLaunch = cannotLaunchMsg(gameTid[cursorPosOnScreen][0]);
17521752
refreshBanners(screenOffset, fileOffset, dirContents);
17531753
}
1754-
bool useBootstrapAnyway = ((perGameSettings_useBootstrap == -1 ? ms().useBootstrap : perGameSettings_useBootstrap) || !ms().secondaryDevice);
1754+
const bool useBootstrapAnyway = ((perGameSettings_fcGameLoader == -1 ? (ms().fcGameLoader == TWLSettings::ENdsBootstrap) : (perGameSettings_fcGameLoader == TWLSettings::ENdsBootstrap)) || !ms().secondaryDevice);
17551755
if (proceedToLaunch && useBootstrapAnyway && bnrRomType[cursorPosOnScreen] == 0 && !isDSiWare[cursorPosOnScreen]
17561756
&& isHomebrew[cursorPosOnScreen] == 0
17571757
&& checkIfDSiMode(dirContents.at(fileOffset).name)) {

romsel_aktheme/arm9/source/main.cpp

Lines changed: 96 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include "ndsheaderbanner.h"
2929
#include "gbaswitch.h"
3030
#include "common/nds_loader_arm9.h"
31+
#include "DSpicoLauncher.h"
3132
#include "fileBrowse.h"
3233
#include "perGameSettings.h"
3334
#include "errorScreen.h"
@@ -1674,7 +1675,101 @@ int akTheme(void) {
16741675

16751676
unlaunchRomBoot(argarray[0]);
16761677
} else if (useBackend) {
1677-
if ((((perGameSettings_useBootstrap == -1 ? ms().useBootstrap : perGameSettings_useBootstrap) && !ms().homebrewBootstrap) || !ms().secondaryDevice) || (dsiFeatures() && romUnitCode[cursorPosOnScreen] > 0 && (perGameSettings_dsiMode == -1 ? DEFAULT_DSI_MODE : perGameSettings_dsiMode))
1678+
if ((perGameSettings_fcGameLoader == -1 ? (ms().fcGameLoader == TWLSettings::EPicoLoader) : (perGameSettings_fcGameLoader == TWLSettings::EPicoLoader)) && !ms().homebrewBootstrap && ms().secondaryDevice && (dsiFeatures() || romUnitCode[cursorPosOnScreen] < 3)) {
1679+
std::string path = argarray[0];
1680+
std::string savename = replaceAll(filename, typeToReplace, getSavExtension());
1681+
std::string ramdiskname = replaceAll(filename, typeToReplace, getImgExtension(perGameSettings_ramDiskNo));
1682+
std::string romFolderNoSlash = ms().romfolder[ms().secondaryDevice];
1683+
RemoveTrailingSlashes(romFolderNoSlash);
1684+
std::string savepath = romFolderNoSlash + "/saves/" + savename;
1685+
std::string ramdiskpath = romFolderNoSlash + "/ramdisks/" + ramdiskname;
1686+
if (isHomebrew[cursorPosOnScreen]) {
1687+
// Do nothing
1688+
} else if (ms().saveLocation == TWLSettings::ETWLMFolder) {
1689+
std::string twlmSavesFolder = sys().isRunFromSD() ? "sd:/_nds/TWiLightMenu/saves" : "fat:/_nds/TWiLightMenu/saves";
1690+
mkdir(twlmSavesFolder.c_str(), 0777);
1691+
savepath = twlmSavesFolder + "/" + savename;
1692+
} else if (ms().saveLocation == TWLSettings::EGamesFolder) {
1693+
savepath = romFolderNoSlash + "/" + savename;
1694+
} else {
1695+
mkdir("saves", 0777);
1696+
}
1697+
1698+
if (!isHomebrew[cursorPosOnScreen]) {
1699+
// Create or expand save if game isn't homebrew
1700+
u32 orgsavesize = getFileSize(savepath.c_str());
1701+
u32 savesize = 524288; // 512KB (default size)
1702+
1703+
u32 gameTidHex = 0;
1704+
tonccpy(&gameTidHex, gameTid[cursorPosOnScreen], 4);
1705+
1706+
for (int i = 0; i < (int)sizeof(ROMList)/8; i++) {
1707+
ROMListEntry* curentry = &ROMList[i];
1708+
if (gameTidHex == curentry->GameCode) {
1709+
if (curentry->SaveMemType != 0xFFFFFFFF) savesize = sramlen[curentry->SaveMemType];
1710+
break;
1711+
}
1712+
}
1713+
1714+
if ((orgsavesize == 0 && savesize > 0) || (orgsavesize < savesize)) {
1715+
clearText(false);
1716+
dialogboxHeight = 0;
1717+
showdialogbox = true;
1718+
printSmall(false, 0, 74, "Save management", Alignment::center, FontPalette::formTitleText);
1719+
printSmall(false, 0, 90, (orgsavesize == 0) ? "Creating save file..." : "Expanding save file...", Alignment::center, FontPalette::formText);
1720+
updateText(false);
1721+
1722+
FILE *pFile = fopen(savepath.c_str(), orgsavesize > 0 ? "r+" : "wb");
1723+
if (pFile) {
1724+
displayDiskIcon(ms().secondaryDevice);
1725+
fseek(pFile, savesize - 1, SEEK_SET);
1726+
fputc('\0', pFile);
1727+
displayDiskIcon(false);
1728+
fclose(pFile);
1729+
}
1730+
clearText(false);
1731+
printSmall(false, 0, 74, "Save management", Alignment::center, FontPalette::formTitleText);
1732+
printSmall(false, 0, 90, (orgsavesize == 0) ? "Save file created!" : "Save file expanded!", Alignment::center, FontPalette::formText);
1733+
updateText(false);
1734+
for (int i = 0; i < 30; i++) swiWaitForVBlank();
1735+
}
1736+
}
1737+
1738+
if (!isArgv) {
1739+
ms().romPath[ms().secondaryDevice] = argarray[0];
1740+
}
1741+
ms().launchType[ms().secondaryDevice] = TWLSettings::ESDFlashcardLaunch;
1742+
ms().previousUsedDevice = ms().secondaryDevice;
1743+
displayDiskIcon(!sys().isRunFromSD());
1744+
ms().saveSettings();
1745+
1746+
int err = picoLaunchRom(path, savepath);
1747+
displayDiskIcon(false);
1748+
1749+
char text[32];
1750+
snprintf (text, sizeof(text), "Start failed. Error %i", err);
1751+
clearText(false);
1752+
dialogboxHeight = (err==1 ? 1 : 0);
1753+
showdialogbox = true;
1754+
printSmall(false, 0, 74, "Error!", Alignment::center, FontPalette::formTitleText);
1755+
printSmall(false, 0, 90, text, Alignment::center, FontPalette::formText);
1756+
if (err == 1) {
1757+
printSmall(false, 0, 102, "Pico Loader not found.", Alignment::center, FontPalette::formText);
1758+
}
1759+
printSmall(false, 0, (err==1 ? 124 : 108), " Back", Alignment::center, FontPalette::formText);
1760+
updateText(false);
1761+
int pressed = 0;
1762+
do {
1763+
scanKeys();
1764+
pressed = keysDownRepeat();
1765+
checkSdEject();
1766+
swiWaitForVBlank();
1767+
} while (!(pressed & KEY_B));
1768+
vector<char *> argarray;
1769+
argarray.push_back((char*)(sys().isRunFromSD() ? "sd:/_nds/TWiLightMenu/akmenu.srldr" : "fat:/_nds/TWiLightMenu/akmenu.srldr"));
1770+
runNdsFile(argarray[0], argarray.size(), (const char**)&argarray[0], sys().isRunFromSD(), true, false, false, true, true, false, -1);
1771+
} else
1772+
if ((((perGameSettings_fcGameLoader == -1 ? (ms().fcGameLoader == TWLSettings::ENdsBootstrap) : (perGameSettings_fcGameLoader == TWLSettings::ENdsBootstrap)) && !ms().homebrewBootstrap) || !ms().secondaryDevice) || (dsiFeatures() && romUnitCode[cursorPosOnScreen] > 0 && (perGameSettings_dsiMode == -1 ? DEFAULT_DSI_MODE : perGameSettings_dsiMode))
16781773
|| (ms().secondaryDevice && !ms().kernelUseable)
16791774
|| (romUnitCode[cursorPosOnScreen] == 3 && !ms().homebrewBootstrap)) {
16801775
std::string path = argarray[0];

0 commit comments

Comments
 (0)