SDL: Remove mSDLRunGBA

This commit is contained in:
Jeffrey Pfau 2016-02-04 22:16:33 -08:00
parent 407335e2f4
commit a718a08e47
3 changed files with 30 additions and 63 deletions

View File

@ -162,6 +162,9 @@ bool mCoreThreadStart(struct mCoreThread* threadContext) {
pthread_sigmask(SIG_BLOCK, &signals, 0);
#endif
threadContext->sync.audioWait = threadContext->core->opts.audioSync;
threadContext->sync.videoFrameWait = threadContext->core->opts.videoSync;
MutexLock(&threadContext->stateMutex);
ThreadCreate(&threadContext->thread, _mCoreThreadRun, threadContext);
while (threadContext->state < THREAD_RUNNING) {

View File

@ -8,6 +8,7 @@
#include "core/core.h"
#include "core/log.h"
#include "gba/gba.h"
#include "gba/context/overrides.h"
#include "gba/renderers/video-software.h"
#include "gba/serialize.h"
#include "util/memory.h"
@ -134,10 +135,22 @@ static void _GBACoreUnloadROM(struct mCore* core) {
}
static void _GBACoreReset(struct mCore* core) {
struct GBA* gba = (struct GBA*) core->board;
ARMReset(core->cpu);
if (core->opts.skipBios) {
GBASkipBIOS(core->board);
}
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)) {
GBAOverrideApply(gba, &override);
}
}
static void _GBACoreRunFrame(struct mCore* core) {

View File

@ -51,13 +51,8 @@ enum mPlatform {
static bool mSDLInit(struct mSDLRenderer* renderer);
static void mSDLDeinit(struct mSDLRenderer* renderer);
// TODO: Clean up signatures
#ifdef M_CORE_GBA
static int mSDLRunGBA(struct mSDLRenderer* renderer, struct mArguments* args, struct mCoreOptions* opts, struct mCoreConfig* config);
#endif
static int mSDLRun(struct mSDLRenderer* renderer, struct mArguments* args);
int main(int argc, char** argv) {
struct mSDLRenderer renderer = {};
@ -151,6 +146,7 @@ int main(int argc, char** argv) {
mCoreConfigLoadDefaults(&renderer.core->config, &opts);
// TODO: Load from config
renderer.viewportWidth = opts.width;
renderer.viewportHeight = opts.height;
#if SDL_VERSION_ATLEAST(2, 0, 0)
@ -159,6 +155,7 @@ int main(int argc, char** argv) {
#else
renderer.fullscreen = opts.fullscreen;
#endif
renderer.ratio = graphicsOpts.multiplier;
if (renderer.ratio == 0) {
renderer.ratio = 1;
@ -203,76 +200,25 @@ int main(int argc, char** argv) {
return ret;
}
#ifdef M_CORE_GBA
int mSDLRunGBA(struct mSDLRenderer* renderer, struct mArguments* args, struct mCoreOptions* opts, struct mCoreConfig* config) {
struct GBAThread context = {
.userData = renderer
};
context.debugger = createDebugger(args, &context);
GBAMapOptionsToContext(opts, &context);
GBAMapArgumentsToContext(args, &context);
context.overrides = mCoreConfigGetOverrides(config);
bool didFail = false;
renderer->audio.samples = context.audioBuffers;
renderer->audio.sampleRate = 44100;
if (opts->sampleRate) {
renderer->audio.sampleRate = opts->sampleRate;
}
if (!mSDLInitAudio(&renderer->audio, &context)) {
didFail = true;
}
if (!didFail) {
#if SDL_VERSION_ATLEAST(2, 0, 0)
mSDLSetScreensaverSuspendable(&renderer->events, opts->suspendScreensaver);
mSDLSuspendScreensaver(&renderer->events);
#endif
if (GBAThreadStart(&context)) {
renderer->runloop(renderer, &context);
GBAThreadJoin(&context);
} else {
didFail = true;
printf("Could not run game. Are you sure the file exists and is a Game Boy Advance game?\n");
}
#if SDL_VERSION_ATLEAST(2, 0, 0)
mSDLResumeScreensaver(&renderer->events);
mSDLSetScreensaverSuspendable(&renderer->events, false);
#endif
if (GBAThreadHasCrashed(&context)) {
didFail = true;
printf("The game crashed!\n");
}
}
free(context.debugger);
mDirectorySetDeinit(&context.dirs);
return didFail;
}
#endif
int mSDLRun(struct mSDLRenderer* renderer, struct mArguments* args) {
struct mCoreThread thread = {
.core = renderer->core,
.sync = {
.audioWait = true
}
.core = renderer->core
};
if (!mCoreLoadFile(renderer->core, args->fname)) {
return 1;
}
mCoreAutoloadSave(renderer->core);
// TODO: Create debugger
renderer->audio.samples = 1024;
renderer->audio.samples = renderer->core->opts.audioBuffers;
renderer->audio.sampleRate = 44100;
bool didFail = !mSDLInitAudio(&renderer->audio, 0);
if (!didFail) {
#if SDL_VERSION_ATLEAST(2, 0, 0)
mSDLSetScreensaverSuspendable(&renderer->events, renderer->core->opts.suspendScreensaver);
mSDLSuspendScreensaver(&renderer->events);
#endif
renderer->audio.core = renderer->core;
renderer->audio.sync = &thread.sync;
@ -285,6 +231,11 @@ int mSDLRun(struct mSDLRenderer* renderer, struct mArguments* args) {
printf("Could not run game. Are you sure the file exists and is a compatible game?\n");
}
#if SDL_VERSION_ATLEAST(2, 0, 0)
mSDLResumeScreensaver(&renderer->events);
mSDLSetScreensaverSuspendable(&renderer->events, false);
#endif
if (mCoreThreadHasCrashed(&thread)) {
didFail = true;
printf("The game crashed!\n");