SGB: Use GB/GBC mode if SGB bios rom cannot be found/loaded
This commit is contained in:
parent
6592805fc0
commit
e310ff30d8
4 changed files with 20 additions and 9 deletions
|
@ -66,7 +66,7 @@ shared_ptr<BaseCartridge> BaseCartridge::CreateCartridge(Console* console, Virtu
|
|||
return nullptr;
|
||||
}
|
||||
} else if(fileExt == ".gb" || fileExt == ".gbc") {
|
||||
if(cart->LoadGameboy(romFile)) {
|
||||
if(cart->LoadGameboy(romFile, true)) {
|
||||
return cart;
|
||||
} else {
|
||||
return nullptr;
|
||||
|
@ -620,9 +620,9 @@ void BaseCartridge::LoadSpc()
|
|||
SetupCpuHalt();
|
||||
}
|
||||
|
||||
bool BaseCartridge::LoadGameboy(VirtualFile &romFile)
|
||||
bool BaseCartridge::LoadGameboy(VirtualFile &romFile, bool sgbEnabled)
|
||||
{
|
||||
_gameboy.reset(Gameboy::Create(_console, romFile));
|
||||
_gameboy.reset(Gameboy::Create(_console, romFile, sgbEnabled));
|
||||
if(!_gameboy) {
|
||||
return false;
|
||||
}
|
||||
|
@ -632,10 +632,16 @@ bool BaseCartridge::LoadGameboy(VirtualFile &romFile)
|
|||
|
||||
if(_gameboy->IsSgb()) {
|
||||
EmulationConfig cfg = _console->GetSettings()->GetEmulationConfig();
|
||||
if(!FirmwareHelper::LoadSgbFirmware(_console, &_prgRom, _prgRomSize, cfg.UseSgb2)) {
|
||||
return false;
|
||||
if(FirmwareHelper::LoadSgbFirmware(_console, &_prgRom, _prgRomSize, cfg.UseSgb2)) {
|
||||
LoadRom();
|
||||
if(_coprocessorType != CoprocessorType::SGB) {
|
||||
//SGB bios file isn't a recognized SGB bios, try again without SGB mode
|
||||
return LoadGameboy(romFile, false);
|
||||
}
|
||||
} else {
|
||||
//Couldn't load the SGB bios, try again with in GB/GBC mode
|
||||
return LoadGameboy(romFile, false);
|
||||
}
|
||||
LoadRom();
|
||||
} else {
|
||||
_coprocessorType = CoprocessorType::Gameboy;
|
||||
SetupCpuHalt();
|
||||
|
|
|
@ -74,7 +74,7 @@ private:
|
|||
|
||||
void LoadRom();
|
||||
void LoadSpc();
|
||||
bool LoadGameboy(VirtualFile& romFile);
|
||||
bool LoadGameboy(VirtualFile& romFile, bool sgbEnabled);
|
||||
void SetupCpuHalt();
|
||||
void InitCoprocessor();
|
||||
void LoadEmbeddedFirmware();
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#include "../Utilities/VirtualFile.h"
|
||||
#include "../Utilities/Serializer.h"
|
||||
|
||||
Gameboy* Gameboy::Create(Console* console, VirtualFile &romFile)
|
||||
Gameboy* Gameboy::Create(Console* console, VirtualFile &romFile, bool sgbEnabled)
|
||||
{
|
||||
vector<uint8_t> romData;
|
||||
romFile.ReadFile(romData);
|
||||
|
@ -63,6 +63,11 @@ Gameboy* Gameboy::Create(Console* console, VirtualFile &romFile)
|
|||
}
|
||||
}
|
||||
|
||||
if(!sgbEnabled && model == GameboyModel::SuperGameboy) {
|
||||
//SGB bios isn't available, use gameboy color mode instead
|
||||
model = GameboyModel::GameboyColor;
|
||||
}
|
||||
|
||||
gb->_model = model;
|
||||
|
||||
bool cgbMode = gb->_model == GameboyModel::GameboyColor;
|
||||
|
|
|
@ -60,7 +60,7 @@ private:
|
|||
public:
|
||||
static constexpr int HeaderOffset = 0x134;
|
||||
|
||||
static Gameboy* Create(Console* console, VirtualFile& romFile);
|
||||
static Gameboy* Create(Console* console, VirtualFile& romFile, bool sgbEnabled);
|
||||
virtual ~Gameboy();
|
||||
|
||||
void PowerOn(SuperGameboy* superGameboy = nullptr);
|
||||
|
|
Loading…
Add table
Reference in a new issue