aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/qt_sdl/ROMManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend/qt_sdl/ROMManager.cpp')
-rw-r--r--src/frontend/qt_sdl/ROMManager.cpp51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/frontend/qt_sdl/ROMManager.cpp b/src/frontend/qt_sdl/ROMManager.cpp
index 49f4c45..206332b 100644
--- a/src/frontend/qt_sdl/ROMManager.cpp
+++ b/src/frontend/qt_sdl/ROMManager.cpp
@@ -595,6 +595,10 @@ void Reset()
LoadBIOSFiles();
InstallFirmware();
+ if (Config::ConsoleType == 1)
+ {
+ InstallNAND(&DSi::ARM7iBIOS[0x8308]);
+ }
NDS::Reset();
SetBatteryLevels();
@@ -657,6 +661,9 @@ bool LoadBIOS()
if (!InstallFirmware())
return false;
+ if (Config::ConsoleType == 1 && !InstallNAND(&DSi::ARM7iBIOS[0x8308]))
+ return false;
+
if (NDS::NeedsDirectBoot())
return false;
@@ -948,6 +955,47 @@ void LoadUserSettingsFromConfig(SPI_Firmware::Firmware& firmware)
firmware.UpdateChecksums();
}
+static Platform::FileHandle* OpenNANDFile() noexcept
+{
+ std::string nandpath = Config::DSiNANDPath;
+ std::string instnand = nandpath + Platform::InstanceFileSuffix();
+
+ FileHandle* nandfile = Platform::OpenLocalFile(instnand, FileMode::ReadWriteExisting);
+ if ((!nandfile) && (Platform::InstanceID() > 0))
+ {
+ FileHandle* orig = Platform::OpenLocalFile(nandpath, FileMode::Read);
+ if (!orig)
+ {
+ Log(LogLevel::Error, "Failed to open DSi NAND\n");
+ return nullptr;
+ }
+
+ QFile::copy(QString::fromStdString(nandpath), QString::fromStdString(instnand));
+
+ nandfile = Platform::OpenLocalFile(instnand, FileMode::ReadWriteExisting);
+ }
+
+ return nandfile;
+}
+
+bool InstallNAND(const u8* es_keyY)
+{
+ Platform::FileHandle* nandfile = OpenNANDFile();
+ if (!nandfile)
+ return false;
+
+ if (auto nand = std::make_unique<DSi_NAND::NANDImage>(nandfile, es_keyY); *nand)
+ {
+ DSi::NANDImage = std::move(nand);
+ return true;
+ }
+ else
+ {
+ DSi::NANDImage = nullptr;
+ return false;
+ }
+}
+
bool InstallFirmware()
{
using namespace SPI_Firmware;
@@ -1089,6 +1137,9 @@ bool LoadROM(QStringList filepath, bool reset)
NDS::SetConsoleType(Config::ConsoleType);
NDS::EjectCart();
LoadBIOSFiles();
+ if (Config::ConsoleType == 1)
+ InstallNAND(&DSi::ARM7iBIOS[0x8308]);
+
NDS::Reset();
SetBatteryLevels();
}