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); pthread_sigmask(SIG_BLOCK, &signals, 0);
#endif #endif
threadContext->sync.audioWait = threadContext->core->opts.audioSync;
threadContext->sync.videoFrameWait = threadContext->core->opts.videoSync;
MutexLock(&threadContext->stateMutex); MutexLock(&threadContext->stateMutex);
ThreadCreate(&threadContext->thread, _mCoreThreadRun, threadContext); ThreadCreate(&threadContext->thread, _mCoreThreadRun, threadContext);
while (threadContext->state < THREAD_RUNNING) { while (threadContext->state < THREAD_RUNNING) {

View File

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

View File

@ -51,13 +51,8 @@ enum mPlatform {
static bool mSDLInit(struct mSDLRenderer* renderer); static bool mSDLInit(struct mSDLRenderer* renderer);
static void mSDLDeinit(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); static int mSDLRun(struct mSDLRenderer* renderer, struct mArguments* args);
int main(int argc, char** argv) { int main(int argc, char** argv) {
struct mSDLRenderer renderer = {}; struct mSDLRenderer renderer = {};
@ -151,6 +146,7 @@ int main(int argc, char** argv) {
mCoreConfigLoadDefaults(&renderer.core->config, &opts); mCoreConfigLoadDefaults(&renderer.core->config, &opts);
// TODO: Load from config
renderer.viewportWidth = opts.width; renderer.viewportWidth = opts.width;
renderer.viewportHeight = opts.height; renderer.viewportHeight = opts.height;
#if SDL_VERSION_ATLEAST(2, 0, 0) #if SDL_VERSION_ATLEAST(2, 0, 0)
@ -159,6 +155,7 @@ int main(int argc, char** argv) {
#else #else
renderer.fullscreen = opts.fullscreen; renderer.fullscreen = opts.fullscreen;
#endif #endif
renderer.ratio = graphicsOpts.multiplier; renderer.ratio = graphicsOpts.multiplier;
if (renderer.ratio == 0) { if (renderer.ratio == 0) {
renderer.ratio = 1; renderer.ratio = 1;
@ -203,76 +200,25 @@ int main(int argc, char** argv) {
return ret; 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) { int mSDLRun(struct mSDLRenderer* renderer, struct mArguments* args) {
struct mCoreThread thread = { struct mCoreThread thread = {
.core = renderer->core, .core = renderer->core
.sync = {
.audioWait = true
}
}; };
if (!mCoreLoadFile(renderer->core, args->fname)) { if (!mCoreLoadFile(renderer->core, args->fname)) {
return 1; return 1;
} }
mCoreAutoloadSave(renderer->core); mCoreAutoloadSave(renderer->core);
// TODO: Create debugger
renderer->audio.samples = 1024; renderer->audio.samples = renderer->core->opts.audioBuffers;
renderer->audio.sampleRate = 44100; renderer->audio.sampleRate = 44100;
bool didFail = !mSDLInitAudio(&renderer->audio, 0); bool didFail = !mSDLInitAudio(&renderer->audio, 0);
if (!didFail) { 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.core = renderer->core;
renderer->audio.sync = &thread.sync; 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"); 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)) { if (mCoreThreadHasCrashed(&thread)) {
didFail = true; didFail = true;
printf("The game crashed!\n"); printf("The game crashed!\n");