Skip to content

Commit

Permalink
Fix dynamic reload of games
Browse files Browse the repository at this point in the history
  • Loading branch information
Francois CARON committed Nov 22, 2024
1 parent 0420113 commit 5e2ffe1
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 20 deletions.
1 change: 1 addition & 0 deletions yabause/src/ctrl/include/yabause.h
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ typedef struct
int IsPal;
int isRotated;
u8 isSTV;
u8 isReloadingImage;
u8 IsSSH2Running;
u64 OneFrameTime;
u64 tickfreq;
Expand Down
3 changes: 2 additions & 1 deletion yabause/src/port/qt/YabauseThread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,8 @@ bool YabauseThread::pauseEmulation( bool pause, bool reset )

bool YabauseThread::resetEmulation()
{
if (yabsys.isSTV == 2) mInit = -1;
if (yabsys.isReloadingImage == 2) mInit = -1;
yabsys.isReloadingImage = 0;
if ( mInit < 0 ) {
initEmulation();
}
Expand Down
14 changes: 8 additions & 6 deletions yabause/src/port/qt/ui/UISettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -454,14 +454,16 @@ void UISettings::on_cbCartridge_currentIndexChanged( int id )
leCartridgeModemIP->setVisible(mCartridgeTypes[id].ipFlag);
lCartridgeModemPort->setVisible(mCartridgeTypes[id].ipFlag);
leCartridgeModemPort->setVisible(mCartridgeTypes[id].ipFlag);
if (id == CART_ROMSTV)
if ((mLastCart == CART_ROMSTV) && (id != CART_ROMSTV))
{
yabsys.isSTV = 2;
mLastCart = s->value( "Cartridge/Type", mCartridgeTypes.at( 7 ).id ).toInt();
yabsys.isReloadingImage = 2;
mLastCart = id;
}
if ((mLastCart == CART_ROMSTV) && (id != CART_ROMSTV))
if (id == CART_ROMSTV)
{
yabsys.isSTV = 2;
yabsys.isReloadingImage = 2;
} else {
mLastCart = s->value( "Cartridge/Type", mCartridgeTypes.at( 7 ).id ).toInt();
}
if (mCartridgeTypes[id].pathFlag) {
QString const & str = leCartridge->text();
Expand All @@ -481,7 +483,7 @@ void UISettings::on_cbCartridge_currentIndexChanged( int id )
}

void UISettings::on_cbSTVGame_currentIndexChanged( int id ) {
yabsys.isSTV = 2;
yabsys.isReloadingImage = 2;
}

void UISettings::loadCores()
Expand Down
25 changes: 16 additions & 9 deletions yabause/src/port/qt/ui/UIYabause.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,10 @@ void UIYabause::runActionsAlreadyPaused() {
const QString fn = CommonDialogs::getOpenFileName( QtYabause::volatileSettings()->value( "Recents/ISOs" ).toString(), QtYabause::translate( "Select your iso/cue/bin/zip/chd file" ), QtYabause::translate( "CD Images (*.iso *.ISO *.cue *.CUE *.bin *.BIN *.mds *.MDS *.ccd *.CCD *.zip *.ZIP *.chd *.CHD)" ) );
needReset = (loadGameFromFile(fn)==0);
}
if (needReset) mYabauseThread->resetEmulation();
if (needReset) {
yabsys.isReloadingImage = 2;
mYabauseThread->resetEmulation();
}
}
break;
case ACTION_RESET:
Expand All @@ -318,8 +321,10 @@ void UIYabause::runActionsAlreadyPaused() {
break;
case ACTION_LOADCDROM:
mYabauseThread->OpenTray();
if (loadCDRom() == 0)
if (loadCDRom() == 0) {
yabsys.isReloadingImage = 2;
mYabauseThread->resetEmulation();
}
break;
default:
break;
Expand Down Expand Up @@ -348,11 +353,14 @@ void UIYabause::runActions() {
mYabauseThread->OpenTray();
needReset = (loadGameFromFile(*((QString*)bundle))==0);
delete (QString*)bundle;
if (needReset)mYabauseThread->resetEmulation();
if (needReset){
yabsys.isReloadingImage = 2;
mYabauseThread->resetEmulation();
}
} else {
const QString fn = CommonDialogs::getOpenFileName( QtYabause::volatileSettings()->value( "Recents/ISOs" ).toString(), QtYabause::translate( "Select your iso/cue/bin/zip/chd file" ), QtYabause::translate( "CD Images (*.iso *.ISO *.cue *.CUE *.bin *.BIN *.mds *.MDS *.ccd *.CCD *.zip *.ZIP *.chd *.CHD)" ) );
loadGameFromFile(fn);
if (yabsys.isSTV == 2)
if (yabsys.isReloadingImage == 2)
mYabauseThread->resetEmulation();
}
}
Expand Down Expand Up @@ -381,7 +389,7 @@ void UIYabause::runActions() {
break;
case ACTION_LOADCDROM:
loadCDRom();
if (yabsys.isSTV == 2)
if (yabsys.isReloadingImage == 2)
mYabauseThread->resetEmulation();
break;
default:
Expand Down Expand Up @@ -747,7 +755,7 @@ void UIYabause::on_aFileSettings_triggered()
mYabauseThread->reloadControllers();
refreshStatesActions();

if (yabsys.isSTV == 2) mYabauseThread->resetEmulation();
if (yabsys.isReloadingImage == 2) mYabauseThread->resetEmulation();
}
}

Expand Down Expand Up @@ -786,14 +794,13 @@ int UIYabause::loadCDRom()
// vs->setValue( "autostart", false );
s->setValue( "General/CdRom", QtYabause::defaultCDCore().id );
mYabauseThread->SetCdInserted(true);
mYabauseThread->CloseTray();
} else {
s->setValue("General/CdRom", DummyCD.id);
}
if ((yabsys.isSTV == 1)||(s->value( "Cartridge/Type", 0 ).toInt() == CART_ROMSTV)) {
int cartId = s->value("Cartridge/LastCart", CART_NONE).toInt();
s->setValue("Cartridge/Type", cartId);
yabsys.isSTV = 2;
yabsys.isReloadingImage = 2;
}
refreshStatesActions();
return fn.isEmpty();
Expand Down Expand Up @@ -1209,7 +1216,7 @@ int UIYabause::loadGameFromFile(QString const& fileName)
int cartId = s->value("Cartridge/LastCart", CART_NONE).toInt();
s->setValue("Cartridge/Type", cartId);
ret = 0;
yabsys.isSTV = 2;
yabsys.isReloadingImage = 2;
}
refreshStatesActions();

Expand Down
6 changes: 2 additions & 4 deletions yabause/src/sys/memory/src/cs2.c
Original file line number Diff line number Diff line change
Expand Up @@ -826,10 +826,8 @@ int Cs2ForceCloseTray( int coreid, const char * cdpath ){
if (Cs2Area == NULL) {
return -1;
}
if (Cs2Area->cdi->id != coreid) {
if ((ret = Cs2ChangeCDCore(coreid, cdpath)) != 0) {
return ret;
}
if ((ret = Cs2ChangeCDCore(coreid, cdpath)) != 0) {
return ret;
}
Cs2Reset();

Expand Down

0 comments on commit 5e2ffe1

Please sign in to comment.