Core: Minor preparatory work

This commit is contained in:
Jeffrey Pfau 2016-02-07 20:07:08 -08:00
parent 2eaaaa8491
commit fc905657ad
4 changed files with 26 additions and 11 deletions

View File

@ -113,9 +113,13 @@ void mCoreLoadConfig(struct mCore* core) {
#ifndef MINIMAL_CORE
mCoreConfigLoad(&core->config);
#endif
mCoreConfigMap(&core->config, &core->opts);
mCoreLoadForeignConfig(core, &core->config);
}
void mCoreLoadForeignConfig(struct mCore* core, const struct mCoreConfig* config) {
mCoreConfigMap(config, &core->opts);
#ifndef MINIMAL_CORE
mDirectorySetMapOptions(&core->dirs, &core->opts);
#endif
core->loadConfig(core);
core->loadConfig(core, config);
}

View File

@ -38,7 +38,7 @@ struct mCore {
void (*deinit)(struct mCore*);
void (*setSync)(struct mCore*, struct mCoreSync*);
void (*loadConfig)(struct mCore*);
void (*loadConfig)(struct mCore*, const struct mCoreConfig*);
void (*desiredVideoDimensions)(struct mCore*, unsigned* width, unsigned* height);
void (*setVideoBuffer)(struct mCore*, color_t* buffer, size_t stride);
@ -46,6 +46,8 @@ struct mCore {
struct blip_t* (*getAudioChannel)(struct mCore*, int ch);
void (*setAVStream)(struct mCore*, struct mAVStream*);
bool (*isROM)(struct VFile* vf);
bool (*loadROM)(struct mCore*, struct VFile* vf);
bool (*loadSave)(struct mCore*, struct VFile* vf);
@ -91,5 +93,6 @@ void mCoreTakeScreenshot(struct mCore* core);
void mCoreInitConfig(struct mCore* core, const char* port);
void mCoreLoadConfig(struct mCore* core);
void mCoreLoadForeignConfig(struct mCore* core, const struct mCoreConfig* config);
#endif

View File

@ -60,8 +60,9 @@ static void _GBCoreSetSync(struct mCore* core, struct mCoreSync* sync) {
gb->sync = sync;
}
static void _GBCoreLoadConfig(struct mCore* core) {
static void _GBCoreLoadConfig(struct mCore* core, const struct mCoreConfig* config) {
UNUSED(core);
UNUSED(config);
// TODO
}

View File

@ -20,6 +20,7 @@ struct GBACore {
struct GBAVideoSoftwareRenderer renderer;
int keys;
struct mCPUComponent* components[GBA_COMPONENT_MAX];
struct Configuration* overrides;
};
static bool _GBACoreInit(struct mCore* core) {
@ -34,6 +35,7 @@ static bool _GBACoreInit(struct mCore* core) {
}
core->cpu = cpu;
core->board = gba;
gbacore->overrides = 0;
GBACreate(gba);
// TODO: Restore debugger and cheats
@ -67,10 +69,13 @@ static void _GBACoreSetSync(struct mCore* core, struct mCoreSync* sync) {
gba->sync = sync;
}
static void _GBACoreLoadConfig(struct mCore* core) {
static void _GBACoreLoadConfig(struct mCore* core, const struct mCoreConfig* config) {
struct GBA* gba = core->board;
#if !defined(MINIMAL_CORE) || MINIMAL_CORE < 2
struct GBACore* gbacore = (struct GBACore*) core;
gbacore->overrides = mCoreConfigGetOverrides(&core->config);
struct VFile* bios = 0;
if (core->opts.useBios) {
bios = VFileOpen(core->opts.bios, O_RDONLY);
@ -80,7 +85,7 @@ static void _GBACoreLoadConfig(struct mCore* core) {
}
#endif
const char* idleOptimization = mCoreConfigGetValue(&core->config, "idleOptimization");
const char* idleOptimization = mCoreConfigGetValue(config, "idleOptimization");
if (idleOptimization) {
if (strcasecmp(idleOptimization, "ignore") == 0) {
gba->idleOptimization = IDLE_LOOP_IGNORE;
@ -122,6 +127,11 @@ static struct blip_t* _GBACoreGetAudioChannel(struct mCore* core, int ch) {
}
}
static void _GBACoreSetAVStream(struct mCore* core, struct mAVStream* stream) {
struct GBA* gba = core->board;
gba->stream = stream;
}
static bool _GBACoreLoadROM(struct mCore* core, struct VFile* vf) {
return GBALoadROM2(core->board, vf);
}
@ -169,11 +179,7 @@ static void _GBACoreReset(struct mCore* core) {
struct GBACartridgeOverride override;
const struct GBACartridge* cart = (const struct GBACartridge*) gba->memory.rom;
memcpy(override.id, &cart->id, sizeof(override.id));
struct Configuration* overrides = 0;
#if !defined(MINIMAL_CORE) || MINIMAL_CORE < 2
overrides = mCoreConfigGetOverrides(&core->config);
#endif
if (GBAOverrideFind(overrides, &override)) {
if (GBAOverrideFind(gbacore->overrides, &override)) {
GBAOverrideApply(gba, &override);
}
}
@ -251,6 +257,7 @@ struct mCore* GBACoreCreate(void) {
core->setVideoBuffer = _GBACoreSetVideoBuffer;
core->getVideoBuffer = _GBACoreGetVideoBuffer;
core->getAudioChannel = _GBACoreGetAudioChannel;
core->setAVStream = _GBACoreSetAVStream;
core->isROM = GBAIsROM;
core->loadROM = _GBACoreLoadROM;
core->loadBIOS = _GBACoreLoadBIOS;