mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-02 12:00:01 -06:00
start moving ROM/firmware loading to the emuthread to avoid cursed bugs
This commit is contained in:
@ -541,7 +541,8 @@ void EmuThread::handleMessages()
|
||||
break;
|
||||
|
||||
case msg_EmuStop:
|
||||
if (msg.stopExternal) emuInstance->nds->Stop();
|
||||
if (msg.param.value<bool>())
|
||||
emuInstance->nds->Stop();
|
||||
emuStatus = emuStatus_Paused;
|
||||
emuActive = false;
|
||||
|
||||
@ -574,6 +575,26 @@ void EmuThread::handleMessages()
|
||||
emuInstance->deinitOpenGL();
|
||||
useOpenGL = false;
|
||||
break;
|
||||
|
||||
case msg_BootROM:
|
||||
bootResult = 0;
|
||||
if (!emuInstance->loadROM(msg.param.value<QStringList>(), true))
|
||||
break;
|
||||
|
||||
assert(emuInstance->nds != nullptr);
|
||||
emuInstance->nds->Start();
|
||||
bootResult = 1;
|
||||
break;
|
||||
|
||||
case msg_BootFirmware:
|
||||
bootResult = 0;
|
||||
if (!emuInstance->bootToMenu())
|
||||
break;
|
||||
|
||||
assert(emuInstance->nds != nullptr);
|
||||
emuInstance->nds->Start();
|
||||
bootResult = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
msgSemaphore.release();
|
||||
@ -626,7 +647,7 @@ void EmuThread::emuTogglePause()
|
||||
|
||||
void EmuThread::emuStop(bool external)
|
||||
{
|
||||
sendMessage({.type = msg_EmuStop, .stopExternal = external});
|
||||
sendMessage({.type = msg_EmuStop, .param = external});
|
||||
waitMessage();
|
||||
}
|
||||
|
||||
@ -660,6 +681,32 @@ bool EmuThread::emuIsActive()
|
||||
return emuActive;
|
||||
}
|
||||
|
||||
int EmuThread::bootROM(QStringList filename)
|
||||
{
|
||||
sendMessage(msg_EmuPause);
|
||||
sendMessage({.type = msg_BootROM, .param = filename});
|
||||
waitMessage(2);
|
||||
if (!bootResult)
|
||||
return bootResult;
|
||||
|
||||
sendMessage(msg_EmuRun);
|
||||
waitMessage();
|
||||
return bootResult;
|
||||
}
|
||||
|
||||
int EmuThread::bootFirmware()
|
||||
{
|
||||
sendMessage(msg_EmuPause);
|
||||
sendMessage(msg_BootFirmware);
|
||||
waitMessage(2);
|
||||
if (!bootResult)
|
||||
return bootResult;
|
||||
|
||||
sendMessage(msg_EmuRun);
|
||||
waitMessage();
|
||||
return bootResult;
|
||||
}
|
||||
|
||||
void EmuThread::updateRenderer()
|
||||
{
|
||||
if (videoRenderer != lastVideoRenderer)
|
||||
|
Reference in New Issue
Block a user