aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/qt_sdl
diff options
context:
space:
mode:
authorArisotura <thetotalworm@gmail.com>2020-05-17 05:42:09 +0200
committerArisotura <thetotalworm@gmail.com>2020-05-17 05:42:09 +0200
commitc5c9434ac9abaa0ae9c3125ee6e8bc4653846ebd (patch)
tree056372abb7fac015bef76fa14b43f634eb2c6bb4 /src/frontend/qt_sdl
parent49b24ea2b3b730b2d4acb20231989d1ace84a59b (diff)
verify BIOS and firmware before booting games/firmware
Diffstat (limited to 'src/frontend/qt_sdl')
-rw-r--r--src/frontend/qt_sdl/main.cpp41
-rw-r--r--src/frontend/qt_sdl/main.h2
2 files changed, 36 insertions, 7 deletions
diff --git a/src/frontend/qt_sdl/main.cpp b/src/frontend/qt_sdl/main.cpp
index 8b97320..ec4b04b 100644
--- a/src/frontend/qt_sdl/main.cpp
+++ b/src/frontend/qt_sdl/main.cpp
@@ -570,6 +570,27 @@ void MainWindow::keyPressEvent(QKeyEvent* event)
}
+QString MainWindow::loadErrorStr(int error)
+{
+ switch (error)
+ {
+ case Frontend::Load_BIOS9Missing: return "DS ARM9 BIOS was not found or could not be accessed.";
+ 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.";
+ 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.";
+ 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.";
+
+ default: return "Unknown error during launch; smack Arisotura.";
+ }
+}
+
+
void MainWindow::onOpenFile()
{
emuThread->emuPause(true);
@@ -584,6 +605,11 @@ void MainWindow::onOpenFile()
return;
}
+ // TODO: validate the input file!!
+ // * check that it is a proper ROM
+ // * ensure the binary offsets are sane
+ // * etc
+
// this shit is stupid
char file[1024];
strncpy(file, filename.toStdString().c_str(), 1023); file[1023] = '\0';
@@ -594,7 +620,7 @@ void MainWindow::onOpenFile()
Config::LastROMFolder[pos] = '\0';
char* ext = &file[strlen(file)-3];
- int slot; bool res;
+ int slot; int res;
if (!strcasecmp(ext, "gba"))
{
slot = 1;
@@ -606,11 +632,11 @@ void MainWindow::onOpenFile()
res = Frontend::LoadROM(file, Frontend::ROMSlot_NDS);
}
- if (!res)
+ if (res != Frontend::Load_OK)
{
QMessageBox::critical(this,
"melonDS",
- "Failed to load the ROM.\n\nMake sure the file is accessible and isn't used by another application.");
+ loadErrorStr(res));
emuThread->emuUnpause();
}
else if (slot == 1)
@@ -631,11 +657,12 @@ void MainWindow::onBootFirmware()
emuThread->emuPause(true);
- bool res = Frontend::LoadBIOS();
- if (!res)
+ int res = Frontend::LoadBIOS();
+ if (res != Frontend::Load_OK)
{
- // TODO!
-
+ QMessageBox::critical(this,
+ "melonDS",
+ loadErrorStr(res));
emuThread->emuUnpause();
}
else
diff --git a/src/frontend/qt_sdl/main.h b/src/frontend/qt_sdl/main.h
index bb5e903..ee0094f 100644
--- a/src/frontend/qt_sdl/main.h
+++ b/src/frontend/qt_sdl/main.h
@@ -110,6 +110,8 @@ private slots:
void onOpenEmuSettings();
private:
+ QString loadErrorStr(int error);
+
MainWindowPanel* panel;
QAction* actOpenROM;