mirror of https://github.com/mgba-emu/mgba.git
SDL: Remove mSDLRunGBA
This commit is contained in:
parent
407335e2f4
commit
a718a08e47
|
@ -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) {
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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");
|
||||||
|
|
Loading…
Reference in New Issue