aboutsummaryrefslogtreecommitdiff
path: root/src/frontend
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend')
-rw-r--r--src/frontend/FrontendUtil.h4
-rw-r--r--src/frontend/Util_ROM.cpp14
-rw-r--r--src/frontend/qt_sdl/Platform.cpp4
-rw-r--r--src/frontend/qt_sdl/main.cpp37
4 files changed, 51 insertions, 8 deletions
diff --git a/src/frontend/FrontendUtil.h b/src/frontend/FrontendUtil.h
index d838b63..faa29de 100644
--- a/src/frontend/FrontendUtil.h
+++ b/src/frontend/FrontendUtil.h
@@ -65,6 +65,10 @@ int LoadBIOS();
// note: loading a ROM to the NDS slot resets emulation
int LoadROM(const char* file, int slot);
+// unload the ROM loaded in the specified cart slot
+// simulating ejection of the cartridge
+void UnloadROM(int slot);
+
// reset execution of the current ROM
int Reset();
diff --git a/src/frontend/Util_ROM.cpp b/src/frontend/Util_ROM.cpp
index e13eb2c..ec3186a 100644
--- a/src/frontend/Util_ROM.cpp
+++ b/src/frontend/Util_ROM.cpp
@@ -202,6 +202,20 @@ int LoadROM(const char* file, int slot)
}
}
+void UnloadROM(int slot)
+{
+ if (slot == ROMSlot_NDS)
+ {
+ // TODO!
+ }
+ else if (slot == ROMSlot_GBA)
+ {
+ GBACart::Eject();
+ }
+
+ ROMPath[slot][0] = '\0';
+}
+
int Reset()
{
int res;
diff --git a/src/frontend/qt_sdl/Platform.cpp b/src/frontend/qt_sdl/Platform.cpp
index 6a5b466..dd838d7 100644
--- a/src/frontend/qt_sdl/Platform.cpp
+++ b/src/frontend/qt_sdl/Platform.cpp
@@ -55,7 +55,7 @@
char* EmuDirectory;
-void Stop(bool internal);
+void emuStop();
namespace Platform
@@ -133,7 +133,7 @@ void DeInit()
void StopEmu()
{
- //Stop(true);
+ emuStop();
}
diff --git a/src/frontend/qt_sdl/main.cpp b/src/frontend/qt_sdl/main.cpp
index a73362d..67272af 100644
--- a/src/frontend/qt_sdl/main.cpp
+++ b/src/frontend/qt_sdl/main.cpp
@@ -115,8 +115,6 @@ EmuThread::EmuThread(QObject* parent) : QThread(parent)
connect(this, SIGNAL(windowEmuStop()), mainWindow, SLOT(onEmuStop()));
connect(this, SIGNAL(windowEmuPause()), mainWindow->actPause, SLOT(trigger()));
connect(this, SIGNAL(windowEmuReset()), mainWindow->actReset, SLOT(trigger()));
-
- emit windowEmuStop();
}
void EmuThread::run()
@@ -140,7 +138,6 @@ void EmuThread::run()
}
Input::Init();
- /*Touching = false;*/
u32 nframes = 0;
u32 starttick = SDL_GetTicks();
@@ -376,7 +373,6 @@ void EmuThread::emuPause()
EmuRunning = 2;
while (EmuStatus != 2);
- //emit windowEmuPause();
if (audioDevice) SDL_PauseAudioDevice(audioDevice, 1);
}
@@ -384,7 +380,6 @@ void EmuThread::emuUnpause()
{
EmuRunning = PrevEmuStatus;
- //emit windowEmuUnpause();
if (audioDevice) SDL_PauseAudioDevice(audioDevice, 0);
}
@@ -703,6 +698,18 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
panel->setMinimumSize(256, 384);
+ for (int i = 0; i < 9; i++)
+ {
+ actSaveState[i]->setEnabled(false);
+ actLoadState[i]->setEnabled(false);
+ }
+ actUndoStateLoad->setEnabled(false);
+
+ actPause->setEnabled(false);
+ actReset->setEnabled(false);
+ actStop->setEnabled(false);
+
+
actSavestateSRAMReloc->setChecked(Config::SavestateRelocSRAM != 0);
actScreenRotation[Config::ScreenRotation]->setChecked(true);
@@ -1051,7 +1058,10 @@ void MainWindow::onReset()
void MainWindow::onStop()
{
- //
+ if (!RunningSomething) return;
+
+ emuThread->emuPause();
+ NDS::Stop();
}
@@ -1168,6 +1178,8 @@ void MainWindow::onEmuStart()
void MainWindow::onEmuStop()
{
+ emuThread->emuPause();
+
for (int i = 0; i < 9; i++)
{
actSaveState[i]->setEnabled(false);
@@ -1181,6 +1193,19 @@ void MainWindow::onEmuStop()
}
+void emuStop()
+{
+ RunningSomething = false;
+
+ Frontend::UnloadROM(Frontend::ROMSlot_NDS);
+ Frontend::UnloadROM(Frontend::ROMSlot_GBA);
+
+ emit emuThread->windowEmuStop();
+
+ //OSD::AddMessage(0xFFC040, "Shutdown");
+}
+
+
int main(int argc, char** argv)
{