aboutsummaryrefslogtreecommitdiff
path: root/src/frontend
diff options
context:
space:
mode:
authorArisotura <thetotalworm@gmail.com>2020-06-02 00:39:09 +0200
committerGitHub <noreply@github.com>2020-06-02 00:39:09 +0200
commitd6332f96f162849ad0dde2738cacd3fae6e76e5d (patch)
tree649c101a956cb3640140a95c1f380e5a2f89d51d /src/frontend
parent993048dd241b59747a7b30edfc861eedd4c005c9 (diff)
parent6c0ec5ebd8f991b6f8778afd98dc7a22f2b77d4d (diff)
Merge pull request #638 from Arisotura/melonDSi
merge melonDSi
Diffstat (limited to 'src/frontend')
-rw-r--r--src/frontend/FrontendUtil.h9
-rw-r--r--src/frontend/Util_ROM.cpp162
-rw-r--r--src/frontend/qt_sdl/EmuSettingsDialog.cpp66
-rw-r--r--src/frontend/qt_sdl/EmuSettingsDialog.h5
-rw-r--r--src/frontend/qt_sdl/EmuSettingsDialog.ui129
-rw-r--r--src/frontend/qt_sdl/PlatformConfig.cpp14
-rw-r--r--src/frontend/qt_sdl/PlatformConfig.h7
-rw-r--r--src/frontend/qt_sdl/main.cpp48
8 files changed, 412 insertions, 28 deletions
diff --git a/src/frontend/FrontendUtil.h b/src/frontend/FrontendUtil.h
index 6b83cbc..099583f 100644
--- a/src/frontend/FrontendUtil.h
+++ b/src/frontend/FrontendUtil.h
@@ -46,6 +46,15 @@ enum
Load_FirmwareBad,
Load_FirmwareNotBootable,
+ Load_DSiBIOS9Missing,
+ Load_DSiBIOS9Bad,
+
+ Load_DSiBIOS7Missing,
+ Load_DSiBIOS7Bad,
+
+ Load_DSiNANDMissing,
+ Load_DSiNANDBad,
+
// TODO: more precise errors for ROM loading
Load_ROMLoadError,
};
diff --git a/src/frontend/Util_ROM.cpp b/src/frontend/Util_ROM.cpp
index 3f64b9d..8116a93 100644
--- a/src/frontend/Util_ROM.cpp
+++ b/src/frontend/Util_ROM.cpp
@@ -96,6 +96,42 @@ int VerifyDSBIOS()
return Load_OK;
}
+int VerifyDSiBIOS()
+{
+ FILE* f;
+ long len;
+
+ // TODO: check the first 32 bytes
+
+ f = Platform::OpenLocalFile(Config::DSiBIOS9Path, "rb");
+ if (!f) return Load_DSiBIOS9Missing;
+
+ fseek(f, 0, SEEK_END);
+ len = ftell(f);
+ if (len != 0x10000)
+ {
+ fclose(f);
+ return Load_DSiBIOS9Bad;
+ }
+
+ fclose(f);
+
+ f = Platform::OpenLocalFile(Config::DSiBIOS7Path, "rb");
+ if (!f) return Load_DSiBIOS7Missing;
+
+ fseek(f, 0, SEEK_END);
+ len = ftell(f);
+ if (len != 0x10000)
+ {
+ fclose(f);
+ return Load_DSiBIOS7Bad;
+ }
+
+ fclose(f);
+
+ return Load_OK;
+}
+
int VerifyDSFirmware()
{
FILE* f;
@@ -123,6 +159,45 @@ int VerifyDSFirmware()
return Load_OK;
}
+int VerifyDSiFirmware()
+{
+ FILE* f;
+ long len;
+
+ f = Platform::OpenLocalFile(Config::DSiFirmwarePath, "rb");
+ if (!f) return Load_FirmwareMissing;
+
+ fseek(f, 0, SEEK_END);
+ len = ftell(f);
+ if (len != 0x20000)
+ {
+ // not 128KB
+ // TODO: check whether those work
+ fclose(f);
+ return Load_FirmwareBad;
+ }
+
+ fclose(f);
+
+ return Load_OK;
+}
+
+int VerifyDSiNAND()
+{
+ FILE* f;
+ long len;
+
+ f = Platform::OpenLocalFile(Config::DSiNANDPath, "rb");
+ if (!f) return Load_DSiNANDMissing;
+
+ // TODO: some basic checks
+ // check that it has the nocash footer, and all
+
+ fclose(f);
+
+ return Load_OK;
+}
+
int LoadBIOS()
{
int res;
@@ -130,8 +205,22 @@ int LoadBIOS()
res = VerifyDSBIOS();
if (res != Load_OK) return res;
- res = VerifyDSFirmware();
- if (res != Load_OK) return res;
+ if (Config::ConsoleType == 1)
+ {
+ res = VerifyDSiBIOS();
+ if (res != Load_OK) return res;
+
+ res = VerifyDSiFirmware();
+ if (res != Load_OK) return res;
+
+ res = VerifyDSiNAND();
+ if (res != Load_OK) return res;
+ }
+ else
+ {
+ res = VerifyDSFirmware();
+ if (res != Load_OK) return res;
+ }
// TODO:
// original code in the libui frontend called NDS::LoadGBAROM() if needed
@@ -141,6 +230,7 @@ int LoadBIOS()
ROMPath[ROMSlot_NDS][0] = '\0';
SRAMPath[ROMSlot_NDS][0] = '\0';
+ NDS::SetConsoleType(Config::ConsoleType);
NDS::LoadBIOS();
SavestateLoaded = false;
@@ -153,16 +243,39 @@ int LoadROM(const char* file, int slot)
int res;
bool directboot = Config::DirectBoot != 0;
+ if (Config::ConsoleType == 1 && slot == 1)
+ {
+ // cannot load a GBA ROM into a DSi
+ return Load_ROMLoadError;
+ }
+
res = VerifyDSBIOS();
if (res != Load_OK) return res;
- res = VerifyDSFirmware();
- if (res != Load_OK)
+ if (Config::ConsoleType == 1)
{
- if (res == Load_FirmwareNotBootable)
- directboot = true;
- else
- return res;
+ res = VerifyDSiBIOS();
+ if (res != Load_OK) return res;
+
+ res = VerifyDSiFirmware();
+ if (res != Load_OK) return res;
+
+ res = VerifyDSiNAND();
+ if (res != Load_OK) return res;
+
+ GBACart::Eject();
+ ROMPath[ROMSlot_GBA][0] = '\0';
+ }
+ else
+ {
+ res = VerifyDSFirmware();
+ if (res != Load_OK)
+ {
+ if (res == Load_FirmwareNotBootable)
+ directboot = true;
+ else
+ return res;
+ }
}
char oldpath[1024];
@@ -176,6 +289,8 @@ int LoadROM(const char* file, int slot)
SetupSRAMPath(0);
SetupSRAMPath(1);
+ NDS::SetConsoleType(Config::ConsoleType);
+
if (slot == ROMSlot_NDS && NDS::LoadROM(ROMPath[slot], SRAMPath[slot], directboot))
{
SavestateLoaded = false;
@@ -224,17 +339,36 @@ int Reset()
res = VerifyDSBIOS();
if (res != Load_OK) return res;
- res = VerifyDSFirmware();
- if (res != Load_OK)
+ if (Config::ConsoleType == 1)
{
- if (res == Load_FirmwareNotBootable)
- directboot = true;
- else
- return res;
+ res = VerifyDSiBIOS();
+ if (res != Load_OK) return res;
+
+ res = VerifyDSiFirmware();
+ if (res != Load_OK) return res;
+
+ res = VerifyDSiNAND();
+ if (res != Load_OK) return res;
+
+ GBACart::Eject();
+ ROMPath[ROMSlot_GBA][0] = '\0';
+ }
+ else
+ {
+ res = VerifyDSFirmware();
+ if (res != Load_OK)
+ {
+ if (res == Load_FirmwareNotBootable)
+ directboot = true;
+ else
+ return res;
+ }
}
SavestateLoaded = false;
+ NDS::SetConsoleType(Config::ConsoleType);
+
if (ROMPath[ROMSlot_NDS][0] == '\0')
{
NDS::LoadBIOS();
diff --git a/src/frontend/qt_sdl/EmuSettingsDialog.cpp b/src/frontend/qt_sdl/EmuSettingsDialog.cpp
index 5c2efc0..09faf4e 100644
--- a/src/frontend/qt_sdl/EmuSettingsDialog.cpp
+++ b/src/frontend/qt_sdl/EmuSettingsDialog.cpp
@@ -42,6 +42,16 @@ EmuSettingsDialog::EmuSettingsDialog(QWidget* parent) : QDialog(parent), ui(new
ui->txtBIOS9Path->setText(Config::BIOS9Path);
ui->txtBIOS7Path->setText(Config::BIOS7Path);
ui->txtFirmwarePath->setText(Config::FirmwarePath);
+
+ ui->txtDSiBIOS9Path->setText(Config::DSiBIOS9Path);
+ ui->txtDSiBIOS7Path->setText(Config::DSiBIOS7Path);
+ ui->txtDSiFirmwarePath->setText(Config::DSiFirmwarePath);
+ ui->txtDSiNANDPath->setText(Config::DSiNANDPath);
+
+ ui->cbxConsoleType->addItem("DS");
+ ui->cbxConsoleType->addItem("DSi (experimental)");
+ ui->cbxConsoleType->setCurrentIndex(Config::ConsoleType);
+
ui->chkDirectBoot->setChecked(Config::DirectBoot != 0);
}
@@ -99,7 +109,15 @@ void EmuSettingsDialog::on_EmuSettingsDialog_accepted()
strncpy(Config::BIOS9Path, ui->txtBIOS9Path->text().toStdString().c_str(), 1023); Config::BIOS9Path[1023] = '\0';
strncpy(Config::BIOS7Path, ui->txtBIOS7Path->text().toStdString().c_str(), 1023); Config::BIOS7Path[1023] = '\0';
strncpy(Config::FirmwarePath, ui->txtFirmwarePath->text().toStdString().c_str(), 1023); Config::FirmwarePath[1023] = '\0';
+
+ strncpy(Config::DSiBIOS9Path, ui->txtDSiBIOS9Path->text().toStdString().c_str(), 1023); Config::DSiBIOS9Path[1023] = '\0';
+ strncpy(Config::DSiBIOS7Path, ui->txtDSiBIOS7Path->text().toStdString().c_str(), 1023); Config::DSiBIOS7Path[1023] = '\0';
+ strncpy(Config::DSiFirmwarePath, ui->txtDSiFirmwarePath->text().toStdString().c_str(), 1023); Config::DSiFirmwarePath[1023] = '\0';
+ strncpy(Config::DSiNANDPath, ui->txtDSiNANDPath->text().toStdString().c_str(), 1023); Config::DSiNANDPath[1023] = '\0';
+
+ Config::ConsoleType = ui->cbxConsoleType->currentIndex();
Config::DirectBoot = ui->chkDirectBoot->isChecked() ? 1:0;
+
Config::Save();
closeDlg();
@@ -145,3 +163,51 @@ void EmuSettingsDialog::on_btnFirmwareBrowse_clicked()
ui->txtFirmwarePath->setText(file);
}
+
+void EmuSettingsDialog::on_btnDSiBIOS9Browse_clicked()
+{
+ QString file = QFileDialog::getOpenFileName(this,
+ "Select DSi-mode ARM9 BIOS...",
+ EmuDirectory,
+ "BIOS files (*.bin *.rom);;Any file (*.*)");
+
+ if (file.isEmpty()) return;
+
+ ui->txtDSiBIOS9Path->setText(file);
+}
+
+void EmuSettingsDialog::on_btnDSiBIOS7Browse_clicked()
+{
+ QString file = QFileDialog::getOpenFileName(this,
+ "Select DSi-mode ARM7 BIOS...",
+ EmuDirectory,
+ "BIOS files (*.bin *.rom);;Any file (*.*)");
+
+ if (file.isEmpty()) return;
+
+ ui->txtDSiBIOS7Path->setText(file);
+}
+
+void EmuSettingsDialog::on_btnDSiFirmwareBrowse_clicked()
+{
+ QString file = QFileDialog::getOpenFileName(this,
+ "Select DSi DS-mode firmware...",
+ EmuDirectory,
+ "Firmware files (*.bin *.rom);;Any file (*.*)");
+
+ if (file.isEmpty()) return;
+
+ ui->txtDSiFirmwarePath->setText(file);
+}
+
+void EmuSettingsDialog::on_btnDSiNANDBrowse_clicked()
+{
+ QString file = QFileDialog::getOpenFileName(this,
+ "Select DSi NAND...",
+ EmuDirectory,
+ "NAND files (*.bin *.rom);;Any file (*.*)");
+
+ if (file.isEmpty()) return;
+
+ ui->txtDSiNANDPath->setText(file);
+}
diff --git a/src/frontend/qt_sdl/EmuSettingsDialog.h b/src/frontend/qt_sdl/EmuSettingsDialog.h
index 7378641..f604ba5 100644
--- a/src/frontend/qt_sdl/EmuSettingsDialog.h
+++ b/src/frontend/qt_sdl/EmuSettingsDialog.h
@@ -58,6 +58,11 @@ private slots:
void on_btnBIOS7Browse_clicked();
void on_btnFirmwareBrowse_clicked();
+ void on_btnDSiBIOS9Browse_clicked();
+ void on_btnDSiBIOS7Browse_clicked();
+ void on_btnDSiFirmwareBrowse_clicked();
+ void on_btnDSiNANDBrowse_clicked();
+
private:
void verifyFirmware();
diff --git a/src/frontend/qt_sdl/EmuSettingsDialog.ui b/src/frontend/qt_sdl/EmuSettingsDialog.ui
index c70c3a2..4894fa5 100644
--- a/src/frontend/qt_sdl/EmuSettingsDialog.ui
+++ b/src/frontend/qt_sdl/EmuSettingsDialog.ui
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>490</width>
- <height>217</height>
+ <height>392</height>
</rect>
</property>
<property name="sizePolicy">
@@ -120,12 +120,137 @@
</widget>
</item>
<item>
+ <widget class="QGroupBox" name="groupBox_3">
+ <property name="title">
+ <string>DSi mode</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <item row="0" column="2">
+ <widget class="QPushButton" name="btnDSiBIOS9Browse">
+ <property name="text">
+ <string>Browse...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_5">
+ <property name="text">
+ <string>DSi ARM9 BIOS:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="2">
+ <widget class="QPushButton" name="btnDSiFirmwareBrowse">
+ <property name="text">
+ <string>Browse...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="txtDSiBIOS7Path">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;DSi-mode ARM7 BIOS&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;Size should be 64 KB&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLineEdit" name="txtDSiFirmwarePath">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;DSi-mode firmware (used for DS-mode backwards compatibility)&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;Size should be 128 KB&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_6">
+ <property name="text">
+ <string>DSi ARM7 BIOS:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_7">
+ <property name="text">
+ <string>DSi firmware:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QPushButton" name="btnDSiBIOS7Browse">
+ <property name="text">
+ <string>Browse...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="txtDSiBIOS9Path">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;DSi-mode ARM9 BIOS&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;Size should be 64 KB&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_8">
+ <property name="text">
+ <string>DSi NAND:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QLineEdit" name="txtDSiNANDPath">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;DSi NAND dump&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;Should have 'nocash footer' at the end&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="2">
+ <widget class="QPushButton" name="btnDSiNANDBrowse">
+ <property name="text">
+ <string>Browse...</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
- <string>Startup</string>
+ <string>General</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
+ <widget class="QLabel" name="label_4">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Console type:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="cbxConsoleType">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The type of console to emulate&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" colspan="2">
<widget class="QCheckBox" name="chkDirectBoot">
<property name="whatsThis">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;When loading a ROM, completely skip the regular boot process (&amp;quot;Nintendo DS&amp;quot; screen) to boot the ROM directly.&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;Note: if your firmware dump isn't bootable, the ROM will be booted directly regardless of this setting.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
diff --git a/src/frontend/qt_sdl/PlatformConfig.cpp b/src/frontend/qt_sdl/PlatformConfig.cpp
index 03fd2ac..06128d7 100644
--- a/src/frontend/qt_sdl/PlatformConfig.cpp
+++ b/src/frontend/qt_sdl/PlatformConfig.cpp
@@ -47,10 +47,17 @@ int ScreenUseGL;
int ScreenVSync;
int ScreenVSyncInterval;
+int _3DRenderer;
+int Threaded3D;
+
+int GL_ScaleFactor;
+int GL_Antialias;
+
int LimitFPS;
int AudioSync;
int ShowOSD;
+int ConsoleType;
int DirectBoot;
int SocketBindAnyAddr;
@@ -129,10 +136,17 @@ ConfigEntry PlatformConfigFile[] =
{"ScreenVSync", 0, &ScreenVSync, 0, NULL, 0},
{"ScreenVSyncInterval", 0, &ScreenVSyncInterval, 1, NULL, 0},
+ {"3DRenderer", 0, &_3DRenderer, 1, NULL, 0},
+ {"Threaded3D", 0, &Threaded3D, 1, NULL, 0},
+
+ {"GL_ScaleFactor", 0, &GL_ScaleFactor, 1, NULL, 0},
+ {"GL_Antialias", 0, &GL_Antialias, 0, NULL, 0},
+
{"LimitFPS", 0, &LimitFPS, 0, NULL, 0},
{"AudioSync", 0, &AudioSync, 1, NULL, 0},
{"ShowOSD", 0, &ShowOSD, 1, NULL, 0},
+ {"ConsoleType", 0, &ConsoleType, 0, NULL, 0},
{"DirectBoot", 0, &DirectBoot, 1, NULL, 0},
{"SockBindAnyAddr", 0, &SocketBindAnyAddr, 0, NULL, 0},
diff --git a/src/frontend/qt_sdl/PlatformConfig.h b/src/frontend/qt_sdl/PlatformConfig.h
index cc288b6..791bb07 100644
--- a/src/frontend/qt_sdl/PlatformConfig.h
+++ b/src/frontend/qt_sdl/PlatformConfig.h
@@ -60,10 +60,17 @@ extern int ScreenUseGL;
extern int ScreenVSync;
extern int ScreenVSyncInterval;
+extern int _3DRenderer;
+extern int Threaded3D;
+
+extern int GL_ScaleFactor;
+extern int GL_Antialias;
+
extern int LimitFPS;
extern int AudioSync;
extern int ShowOSD;
+extern int ConsoleType;
extern int DirectBoot;
extern int SocketBindAnyAddr;
diff --git a/src/frontend/qt_sdl/main.cpp b/src/frontend/qt_sdl/main.cpp
index a3207c7..fa542ad 100644
--- a/src/frontend/qt_sdl/main.cpp
+++ b/src/frontend/qt_sdl/main.cpp
@@ -1360,17 +1360,40 @@ QString MainWindow::loadErrorStr(int error)
{
switch (error)
{
- case Frontend::Load_BIOS9Missing: return "DS ARM9 BIOS was not found or could not be accessed. Check your emu settings.";
- case Frontend::Load_BIOS9Bad: return "DS ARM9 BIOS is not a valid BIOS dump.";
-
- case Frontend::Load_BIOS7Missing: return "DS ARM7 BIOS was not found or could not be accessed. Check your emu settings.";
- case Frontend::Load_BIOS7Bad: return "DS ARM7 BIOS is not a valid BIOS dump.";
-
- case Frontend::Load_FirmwareMissing: return "DS firmware was not found or could not be accessed. Check your emu settings.";
- case Frontend::Load_FirmwareBad: return "DS firmware is not a valid firmware dump.";
- case Frontend::Load_FirmwareNotBootable: return "DS firmware is not bootable.";
-
- case Frontend::Load_ROMLoadError: return "Failed to load the ROM. Make sure the file is accessible and isn't used by another application.";
+ case Frontend::Load_BIOS9Missing:
+ return "DS ARM9 BIOS was not found or could not be accessed. Check your emu settings.";
+ case Frontend::Load_BIOS9Bad:
+ return "DS ARM9 BIOS is not a valid BIOS dump.";
+
+ case Frontend::Load_BIOS7Missing:
+ return "DS ARM7 BIOS was not found or could not be accessed. Check your emu settings.";
+ case Frontend::Load_BIOS7Bad:
+ return "DS ARM7 BIOS is not a valid BIOS dump.";
+
+ case Frontend::Load_FirmwareMissing:
+ return "DS firmware was not found or could not be accessed. Check your emu settings.";
+ case Frontend::Load_FirmwareBad:
+ return "DS firmware is not a valid firmware dump.";
+ case Frontend::Load_FirmwareNotBootable:
+ return "DS firmware is not bootable.";
+
+ case Frontend::Load_DSiBIOS9Missing:
+ return "DSi ARM9 BIOS was not found or could not be accessed. Check your emu settings.";
+ case Frontend::Load_DSiBIOS9Bad:
+ return "DSi ARM9 BIOS is not a valid BIOS dump.";
+
+ case Frontend::Load_DSiBIOS7Missing:
+ return "DSi ARM7 BIOS was not found or could not be accessed. Check your emu settings.";
+ case Frontend::Load_DSiBIOS7Bad:
+ return "DSi ARM7 BIOS is not a valid BIOS dump.";
+
+ case Frontend::Load_DSiNANDMissing:
+ return "DSi NAND was not found or could not be accessed. Check your emu settings.";
+ case Frontend::Load_DSiNANDBad:
+ return "DSi NAND is not a valid NAND dump.";
+
+ case Frontend::Load_ROMLoadError:
+ return "Failed to load the ROM. Make sure the file is accessible and isn't used by another application.";
default: return "Unknown error during launch; smack Arisotura.";
}
@@ -1384,7 +1407,7 @@ void MainWindow::onOpenFile()
QString filename = QFileDialog::getOpenFileName(this,
"Open ROM",
Config::LastROMFolder,
- "DS ROMs (*.nds *.srl);;GBA ROMs (*.gba);;Any file (*.*)");
+ "DS ROMs (*.nds *.dsi *.srl);;GBA ROMs (*.gba);;Any file (*.*)");
if (filename.isEmpty())
{
emuThread->emuUnpause();
@@ -1889,6 +1912,7 @@ int main(int argc, char** argv)
Config::Load();
#define SANITIZE(var, min, max) { if (var < min) var = min; else if (var > max) var = max; }
+ SANITIZE(Config::ConsoleType, 0, 1);
SANITIZE(Config::_3DRenderer, 0, 1);
SANITIZE(Config::ScreenVSyncInterval, 1, 20);
SANITIZE(Config::GL_ScaleFactor, 1, 16);