From 71df3f4f28a6001827340560e8c99f123d1899a5 Mon Sep 17 00:00:00 2001 From: rogerman Date: Thu, 15 Nov 2018 01:04:06 -0800 Subject: [PATCH] NDSSystem.cpp: Fix interactions between external firmware loading and BIOS loading. Always ensure that loading external firmware is dependent on loading both ARM9 and ARM7 BIOS files. --- desmume/src/NDSSystem.cpp | 4 ++-- desmume/src/frontend/cocoa/cocoa_core.mm | 5 +++-- .../frontend/cocoa/userinterface/EmuControllerDelegate.mm | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/desmume/src/NDSSystem.cpp b/desmume/src/NDSSystem.cpp index d01e06c80..2d56bea3f 100755 --- a/desmume/src/NDSSystem.cpp +++ b/desmume/src/NDSSystem.cpp @@ -2645,7 +2645,7 @@ void NDS_Reset() bool didLoadExtFirmware = false; extFirmwareObj = new CFIRMWARE(); - if (CommonSettings.UseExtFirmware) + if (CommonSettings.UseExtFirmware && NDS_ARM7.BIOS_loaded && NDS_ARM9.BIOS_loaded) { didLoadExtFirmware = extFirmwareObj->load(CommonSettings.ExtFirmwarePath); } @@ -2673,7 +2673,7 @@ void NDS_Reset() //1. we have the ARM7 and ARM9 bioses (its doubtful that our HLE bios implement the necessary functions) //2. firmware is available //3. user has requested booting from firmware - bool canBootFromFirmware = (NDS_ARM7.BIOS_loaded && NDS_ARM9.BIOS_loaded && CommonSettings.BootFromFirmware && didLoadExtFirmware); + bool canBootFromFirmware = (CommonSettings.BootFromFirmware && didLoadExtFirmware); bool bootResult = false; if (canBootFromFirmware) diff --git a/desmume/src/frontend/cocoa/cocoa_core.mm b/desmume/src/frontend/cocoa/cocoa_core.mm index cf5ff0a46..3ca245346 100644 --- a/desmume/src/frontend/cocoa/cocoa_core.mm +++ b/desmume/src/frontend/cocoa/cocoa_core.mm @@ -448,6 +448,7 @@ volatile bool execute = true; - (void) setEmuFlagUseExternalBios:(BOOL)enable { execControl->SetEnableExternalBIOS((enable) ? true : false); + [self updateFirmwareMACAddressString]; } - (BOOL) emuFlagUseExternalBios @@ -743,7 +744,7 @@ volatile bool execute = true; - (void) updateFirmwareMACAddressString { - if ([self emuFlagUseExternalFirmware]) + if ([self emuFlagUseExternalBios] && [self emuFlagUseExternalFirmware]) { [self setFirmwareMACAddressSelectionString:[NSString stringWithFormat:@"Ext. Firmware %@", [self extFirmwareMACAddressString]]]; } @@ -854,7 +855,7 @@ volatile bool execute = true; { [self setCoreState:ExecutionBehavior_Pause]; - if (![self emuFlagUseExternalFirmware]) + if (![self emuFlagUseExternalBios] || ![self emuFlagUseExternalFirmware]) { [[self cdsFirmware] writeUserDefaultWFCUserID]; [[self cdsFirmware] updateFirmwareConfigSessionValues]; diff --git a/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.mm b/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.mm index 102dcdea8..2b2fc752e 100644 --- a/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.mm +++ b/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.mm @@ -1709,7 +1709,7 @@ [self pauseCore]; CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; - if (![cdsCore emuFlagUseExternalFirmware]) + if (![cdsCore emuFlagUseExternalBios] || ![cdsCore emuFlagUseExternalFirmware]) { [[cdsCore cdsFirmware] updateFirmwareConfigSessionValues]; } @@ -1914,7 +1914,7 @@ } // Unload the ROM. - if (![cdsCore emuFlagUseExternalFirmware]) + if (![cdsCore emuFlagUseExternalBios] || ![cdsCore emuFlagUseExternalFirmware]) { [[cdsCore cdsFirmware] writeUserDefaultWFCUserID]; }