aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/frontend/FrontendUtil.h3
-rw-r--r--src/frontend/Util_ROM.cpp16
-rw-r--r--src/frontend/qt_sdl/main.cpp44
-rw-r--r--src/frontend/qt_sdl/main.h9
4 files changed, 69 insertions, 3 deletions
diff --git a/src/frontend/FrontendUtil.h b/src/frontend/FrontendUtil.h
index 91f3cdd..eb4cb38 100644
--- a/src/frontend/FrontendUtil.h
+++ b/src/frontend/FrontendUtil.h
@@ -40,6 +40,9 @@ extern bool SavestateLoaded;
// initialize the ROM handling utility
void Init_ROM();
+// load the BIOS/firmware and boot from it
+bool LoadBIOS();
+
// load a ROM file to the specified cart slot
// note: loading a ROM to the NDS slot resets emulation
bool LoadROM(const char* file, int slot);
diff --git a/src/frontend/Util_ROM.cpp b/src/frontend/Util_ROM.cpp
index ffee69a..cf40a78 100644
--- a/src/frontend/Util_ROM.cpp
+++ b/src/frontend/Util_ROM.cpp
@@ -57,6 +57,22 @@ void SetupSRAMPath(int slot)
strncpy(SRAMPath[slot] + strlen(ROMPath[slot]) - 3, "sav", 3);
}
+bool LoadBIOS()
+{
+ // TODO:
+ // original code in the libui frontend called NDS::LoadGBAROM() if needed
+ // should this be carried over here?
+ // is that behavior consistent with that of LoadROM() below?
+
+ ROMPath[ROMSlot_NDS][0] = '\0';
+ SRAMPath[ROMSlot_NDS][0] = '\0';
+
+ NDS::LoadBIOS();
+
+ // TODO: error reporting?
+ return true;
+}
+
bool LoadROM(const char* file, int slot)
{
char oldpath[1024];
diff --git a/src/frontend/qt_sdl/main.cpp b/src/frontend/qt_sdl/main.cpp
index e9b9122..cadcec9 100644
--- a/src/frontend/qt_sdl/main.cpp
+++ b/src/frontend/qt_sdl/main.cpp
@@ -394,10 +394,17 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
QMenuBar* menubar = new QMenuBar();
{
QMenu* menu = menubar->addMenu("File");
- QAction* act;
- act = menu->addAction("Open file...");
- connect(act, &QAction::triggered, this, &MainWindow::onOpenFile);
+ actOpenROM = menu->addAction("Open file...");
+ connect(actOpenROM, &QAction::triggered, this, &MainWindow::onOpenFile);
+
+ actBootFirmware = menu->addAction("Launch DS menu");
+ connect(actBootFirmware, &QAction::triggered, this, &MainWindow::onBootFirmware);
+
+ menu->addSeparator();
+
+ actQuit = menu->addAction("Quit");
+ connect(actQuit, &QAction::triggered, this, &MainWindow::onQuit);
}
setMenuBar(menubar);
@@ -411,6 +418,12 @@ MainWindow::~MainWindow()
}
+void MainWindow::keyPressEvent(QKeyEvent* event)
+{
+ printf("key press. %d %d %08X %08X\n", event->key(), event->nativeScanCode(), event->modifiers(), event->nativeModifiers());
+}
+
+
void MainWindow::onOpenFile()
{
emuThread->emuPause(true);
@@ -465,6 +478,31 @@ void MainWindow::onOpenFile()
}
}
+void MainWindow::onBootFirmware()
+{
+ // TODO: ensure the firmware is actually bootable!!
+ // TODO: check the whole GBA cart shito
+
+ emuThread->emuPause(true);
+
+ bool res = Frontend::LoadBIOS();
+ if (!res)
+ {
+ // TODO!
+
+ emuThread->emuUnpause();
+ }
+ else
+ {
+ emuThread->emuRun();
+ }
+}
+
+void MainWindow::onQuit()
+{
+ QApplication::quit();
+}
+
void MainWindow::onTitleUpdate(QString title)
{
diff --git a/src/frontend/qt_sdl/main.h b/src/frontend/qt_sdl/main.h
index a1093fe..9ccbddd 100644
--- a/src/frontend/qt_sdl/main.h
+++ b/src/frontend/qt_sdl/main.h
@@ -75,13 +75,22 @@ public:
explicit MainWindow(QWidget* parent = nullptr);
~MainWindow();
+protected:
+ void keyPressEvent(QKeyEvent* event) override;
+
private slots:
void onOpenFile();
+ void onBootFirmware();
+ void onQuit();
void onTitleUpdate(QString title);
private:
MainWindowPanel* panel;
+
+ QAction* actOpenROM;
+ QAction* actBootFirmware;
+ QAction* actQuit;
};
#endif // MAIN_H