mirror of https://github.com/mgba-emu/mgba.git
GB, GBA: Automatic BIOS detection
This commit is contained in:
parent
38e3858852
commit
1bc8dfe42b
1
CHANGES
1
CHANGES
|
@ -12,6 +12,7 @@ Features:
|
||||||
- 3DS: Adjustable screen darkening
|
- 3DS: Adjustable screen darkening
|
||||||
- Ability to temporarily load a savegame
|
- Ability to temporarily load a savegame
|
||||||
- Load specific files out of archives
|
- Load specific files out of archives
|
||||||
|
- Automatic BIOS detection
|
||||||
Bugfixes:
|
Bugfixes:
|
||||||
- SDL: Fix axes being mapped wrong
|
- SDL: Fix axes being mapped wrong
|
||||||
- GBA Memory: Fix mirror on non-overdumped Classic NES games
|
- GBA Memory: Fix mirror on non-overdumped Classic NES games
|
||||||
|
|
|
@ -104,13 +104,6 @@ static void _GBCoreLoadConfig(struct mCore* core, const struct mCoreConfig* conf
|
||||||
gb->video.frameskip = core->opts.frameskip;
|
gb->video.frameskip = core->opts.frameskip;
|
||||||
|
|
||||||
#if !defined(MINIMAL_CORE) || MINIMAL_CORE < 2
|
#if !defined(MINIMAL_CORE) || MINIMAL_CORE < 2
|
||||||
struct VFile* bios = 0;
|
|
||||||
if (core->opts.useBios && core->opts.bios) {
|
|
||||||
bios = VFileOpen(core->opts.bios, O_RDONLY);
|
|
||||||
}
|
|
||||||
if (bios) {
|
|
||||||
GBLoadBIOS(gb, bios);
|
|
||||||
}
|
|
||||||
struct GBCore* gbcore = (struct GBCore*) core;
|
struct GBCore* gbcore = (struct GBCore*) core;
|
||||||
gbcore->overrides = mCoreConfigGetOverridesConst(config);
|
gbcore->overrides = mCoreConfigGetOverridesConst(config);
|
||||||
#endif
|
#endif
|
||||||
|
@ -216,6 +209,35 @@ static void _GBCoreReset(struct mCore* core) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined(MINIMAL_CORE) || MINIMAL_CORE < 2
|
||||||
|
struct VFile* bios = 0;
|
||||||
|
if (core->opts.useBios) {
|
||||||
|
if (!core->opts.bios) {
|
||||||
|
char path[PATH_MAX];
|
||||||
|
GBDetectModel(gb);
|
||||||
|
mCoreConfigDirectory(path, PATH_MAX);
|
||||||
|
switch (gb->model) {
|
||||||
|
case GB_MODEL_DMG:
|
||||||
|
case GB_MODEL_SGB: // TODO
|
||||||
|
strncat(path, PATH_SEP "gb_bios.bin", PATH_MAX - strlen(path));
|
||||||
|
break;
|
||||||
|
case GB_MODEL_CGB:
|
||||||
|
case GB_MODEL_AGB:
|
||||||
|
strncat(path, PATH_SEP "gbc_bios.bin", PATH_MAX - strlen(path));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
bios = VFileOpen(path, O_RDONLY);
|
||||||
|
} else {
|
||||||
|
bios = VFileOpen(core->opts.bios, O_RDONLY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (bios) {
|
||||||
|
GBLoadBIOS(gb, bios);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
LR35902Reset(core->cpu);
|
LR35902Reset(core->cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,8 @@ static void GBInit(void* cpu, struct mCPUComponent* component) {
|
||||||
|
|
||||||
gb->timer.p = gb;
|
gb->timer.p = gb;
|
||||||
|
|
||||||
|
gb->model = GB_MODEL_AUTODETECT;
|
||||||
|
|
||||||
gb->biosVf = 0;
|
gb->biosVf = 0;
|
||||||
gb->romVf = 0;
|
gb->romVf = 0;
|
||||||
gb->sramVf = 0;
|
gb->sramVf = 0;
|
||||||
|
|
|
@ -118,14 +118,6 @@ static void _GBACoreLoadConfig(struct mCore* core, const struct mCoreConfig* con
|
||||||
#if !defined(MINIMAL_CORE) || MINIMAL_CORE < 2
|
#if !defined(MINIMAL_CORE) || MINIMAL_CORE < 2
|
||||||
struct GBACore* gbacore = (struct GBACore*) core;
|
struct GBACore* gbacore = (struct GBACore*) core;
|
||||||
gbacore->overrides = mCoreConfigGetOverridesConst(config);
|
gbacore->overrides = mCoreConfigGetOverridesConst(config);
|
||||||
|
|
||||||
struct VFile* bios = 0;
|
|
||||||
if (core->opts.useBios && core->opts.bios) {
|
|
||||||
bios = VFileOpen(core->opts.bios, O_RDONLY);
|
|
||||||
}
|
|
||||||
if (bios) {
|
|
||||||
GBALoadBIOS(gba, bios);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char* idleOptimization = mCoreConfigGetValue(config, "idleOptimization");
|
const char* idleOptimization = mCoreConfigGetValue(config, "idleOptimization");
|
||||||
|
@ -247,10 +239,6 @@ static void _GBACoreReset(struct mCore* core) {
|
||||||
#endif
|
#endif
|
||||||
GBAVideoAssociateRenderer(&gba->video, renderer);
|
GBAVideoAssociateRenderer(&gba->video, renderer);
|
||||||
}
|
}
|
||||||
ARMReset(core->cpu);
|
|
||||||
if (core->opts.skipBios && gba->pristineRom) {
|
|
||||||
GBASkipBIOS(core->board);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct GBACartridgeOverride override;
|
struct GBACartridgeOverride override;
|
||||||
const struct GBACartridge* cart = (const struct GBACartridge*) gba->memory.rom;
|
const struct GBACartridge* cart = (const struct GBACartridge*) gba->memory.rom;
|
||||||
|
@ -260,6 +248,28 @@ static void _GBACoreReset(struct mCore* core) {
|
||||||
GBAOverrideApply(gba, &override);
|
GBAOverrideApply(gba, &override);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined(MINIMAL_CORE) || MINIMAL_CORE < 2
|
||||||
|
struct VFile* bios = 0;
|
||||||
|
if (core->opts.useBios) {
|
||||||
|
if (!core->opts.bios) {
|
||||||
|
char path[PATH_MAX];
|
||||||
|
mCoreConfigDirectory(path, PATH_MAX);
|
||||||
|
strncat(path, PATH_SEP "gba_bios.bin", PATH_MAX - strlen(path));
|
||||||
|
bios = VFileOpen(path, O_RDONLY);
|
||||||
|
} else {
|
||||||
|
bios = VFileOpen(core->opts.bios, O_RDONLY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (bios) {
|
||||||
|
GBALoadBIOS(gba, bios);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ARMReset(core->cpu);
|
||||||
|
if (core->opts.skipBios && gba->pristineRom) {
|
||||||
|
GBASkipBIOS(core->board);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _GBACoreRunFrame(struct mCore* core) {
|
static void _GBACoreRunFrame(struct mCore* core) {
|
||||||
|
|
Loading…
Reference in New Issue