mirror of https://github.com/mgba-emu/mgba.git
Merge branch 'master' into medusa
This commit is contained in:
commit
3f71924c34
1
CHANGES
1
CHANGES
|
@ -92,6 +92,7 @@ Misc:
|
||||||
- FFmpeg: Return false if a file fails to open
|
- FFmpeg: Return false if a file fails to open
|
||||||
- FFmpeg: Force MP4 files to YUV420P
|
- FFmpeg: Force MP4 files to YUV420P
|
||||||
- Qt: Make "Mute" able to be bound to a key
|
- Qt: Make "Mute" able to be bound to a key
|
||||||
|
- Core: Restore sleep callback
|
||||||
|
|
||||||
medusa alpha 1: (2017-04-08)
|
medusa alpha 1: (2017-04-08)
|
||||||
Features:
|
Features:
|
||||||
|
|
|
@ -117,8 +117,7 @@ struct mCore {
|
||||||
void (*getGameTitle)(const struct mCore*, char* title);
|
void (*getGameTitle)(const struct mCore*, char* title);
|
||||||
void (*getGameCode)(const struct mCore*, char* title);
|
void (*getGameCode)(const struct mCore*, char* title);
|
||||||
|
|
||||||
void (*setRotation)(struct mCore*, struct mRotationSource*);
|
void (*setPeripheral)(struct mCore*, int type, void*);
|
||||||
void (*setRumble)(struct mCore*, struct mRumble*);
|
|
||||||
|
|
||||||
uint32_t (*busRead8)(struct mCore*, uint32_t address);
|
uint32_t (*busRead8)(struct mCore*, uint32_t address);
|
||||||
uint32_t (*busRead16)(struct mCore*, uint32_t address);
|
uint32_t (*busRead16)(struct mCore*, uint32_t address);
|
||||||
|
|
|
@ -38,6 +38,7 @@ struct mCoreCallbacks {
|
||||||
void (*videoFrameStarted)(void* context);
|
void (*videoFrameStarted)(void* context);
|
||||||
void (*videoFrameEnded)(void* context);
|
void (*videoFrameEnded)(void* context);
|
||||||
void (*coreCrashed)(void* context);
|
void (*coreCrashed)(void* context);
|
||||||
|
void (*sleep)(void* context);
|
||||||
};
|
};
|
||||||
|
|
||||||
DECLARE_VECTOR(mCoreCallbacksList, struct mCoreCallbacks);
|
DECLARE_VECTOR(mCoreCallbacksList, struct mCoreCallbacks);
|
||||||
|
@ -53,8 +54,10 @@ struct mKeyCallback {
|
||||||
uint16_t (*readKeys)(struct mKeyCallback*);
|
uint16_t (*readKeys)(struct mKeyCallback*);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mStopCallback {
|
enum mPeripheral {
|
||||||
void (*stop)(struct mStopCallback*);
|
mPERIPH_ROTATION = 1,
|
||||||
|
mPERIPH_RUMBLE,
|
||||||
|
mPERIPH_CUSTOM = 0x1000
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mRotationSource {
|
struct mRotationSource {
|
||||||
|
|
|
@ -62,6 +62,7 @@ struct mCoreThread {
|
||||||
ThreadCallback resetCallback;
|
ThreadCallback resetCallback;
|
||||||
ThreadCallback cleanCallback;
|
ThreadCallback cleanCallback;
|
||||||
ThreadCallback frameCallback;
|
ThreadCallback frameCallback;
|
||||||
|
ThreadCallback sleepCallback;
|
||||||
void* userData;
|
void* userData;
|
||||||
void (*run)(struct mCoreThread*);
|
void (*run)(struct mCoreThread*);
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,10 @@ struct GBAVideoRenderer;
|
||||||
|
|
||||||
extern const int GBA_LUX_LEVELS[10];
|
extern const int GBA_LUX_LEVELS[10];
|
||||||
|
|
||||||
|
enum {
|
||||||
|
mPERIPH_GBA_LUMINANCE = 0x1000
|
||||||
|
};
|
||||||
|
|
||||||
struct GBALuminanceSource {
|
struct GBALuminanceSource {
|
||||||
void (*sample)(struct GBALuminanceSource*);
|
void (*sample)(struct GBALuminanceSource*);
|
||||||
|
|
||||||
|
|
|
@ -99,7 +99,6 @@ struct GBA {
|
||||||
|
|
||||||
struct mAVStream* stream;
|
struct mAVStream* stream;
|
||||||
struct mKeyCallback* keyCallback;
|
struct mKeyCallback* keyCallback;
|
||||||
struct mStopCallback* stopCallback;
|
|
||||||
struct mCoreCallbacksList coreCallbacks;
|
struct mCoreCallbacksList coreCallbacks;
|
||||||
|
|
||||||
enum GBAIdleLoopOptimization idleOptimization;
|
enum GBAIdleLoopOptimization idleOptimization;
|
||||||
|
|
|
@ -120,6 +120,16 @@ void _crashed(void* context) {
|
||||||
_changeState(thread, THREAD_CRASHED, true);
|
_changeState(thread, THREAD_CRASHED, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _coreSleep(void* context) {
|
||||||
|
struct mCoreThread* thread = context;
|
||||||
|
if (!thread) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (thread->sleepCallback) {
|
||||||
|
thread->sleepCallback(thread);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static THREAD_ENTRY _mCoreThreadRun(void* context) {
|
static THREAD_ENTRY _mCoreThreadRun(void* context) {
|
||||||
struct mCoreThread* threadContext = context;
|
struct mCoreThread* threadContext = context;
|
||||||
#ifdef USE_PTHREADS
|
#ifdef USE_PTHREADS
|
||||||
|
@ -143,6 +153,7 @@ static THREAD_ENTRY _mCoreThreadRun(void* context) {
|
||||||
.videoFrameStarted = _frameStarted,
|
.videoFrameStarted = _frameStarted,
|
||||||
.videoFrameEnded = _frameEnded,
|
.videoFrameEnded = _frameEnded,
|
||||||
.coreCrashed = _crashed,
|
.coreCrashed = _crashed,
|
||||||
|
.sleep = _coreSleep,
|
||||||
.context = threadContext
|
.context = threadContext
|
||||||
};
|
};
|
||||||
core->addCoreCallbacks(core, &callbacks);
|
core->addCoreCallbacks(core, &callbacks);
|
||||||
|
|
|
@ -393,12 +393,15 @@ static void _DSCoreGetGameCode(const struct mCore* core, char* title) {
|
||||||
DSGetGameCode(core->board, title);
|
DSGetGameCode(core->board, title);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _DSCoreSetRotation(struct mCore* core, struct mRotationSource* rotation) {
|
static void _DSCoreSetPeripheral(struct mCore* core, int type, void* periph) {
|
||||||
}
|
|
||||||
|
|
||||||
static void _DSCoreSetRumble(struct mCore* core, struct mRumble* rumble) {
|
|
||||||
struct DS* ds = core->board;
|
struct DS* ds = core->board;
|
||||||
ds->rumble = rumble;
|
switch (type) {
|
||||||
|
case mPERIPH_RUMBLE:
|
||||||
|
ds->rumble = periph;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t _DSCoreBusRead8(struct mCore* core, uint32_t address) {
|
static uint32_t _DSCoreBusRead8(struct mCore* core, uint32_t address) {
|
||||||
|
@ -558,8 +561,7 @@ struct mCore* DSCoreCreate(void) {
|
||||||
core->frequency = _DSCoreFrequency;
|
core->frequency = _DSCoreFrequency;
|
||||||
core->getGameTitle = _DSCoreGetGameTitle;
|
core->getGameTitle = _DSCoreGetGameTitle;
|
||||||
core->getGameCode = _DSCoreGetGameCode;
|
core->getGameCode = _DSCoreGetGameCode;
|
||||||
core->setRotation = _DSCoreSetRotation;
|
core->setPeripheral = _DSCoreSetPeripheral;
|
||||||
core->setRumble = _DSCoreSetRumble;
|
|
||||||
core->busRead8 = _DSCoreBusRead8;
|
core->busRead8 = _DSCoreBusRead8;
|
||||||
core->busRead16 = _DSCoreBusRead16;
|
core->busRead16 = _DSCoreBusRead16;
|
||||||
core->busRead32 = _DSCoreBusRead32;
|
core->busRead32 = _DSCoreBusRead32;
|
||||||
|
|
|
@ -298,7 +298,7 @@ void mGUIRun(struct mGUIRunner* runner, const char* path) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (runner->core->platform(runner->core) == PLATFORM_GBA) {
|
if (runner->core->platform(runner->core) == PLATFORM_GBA) {
|
||||||
((struct GBA*) runner->core->board)->luminanceSource = &runner->luminanceSource.d;
|
runner->core->setPeripheral(runner->core, mPERIPH_GBA_LUMINANCE, &runner->luminanceSource.d);
|
||||||
}
|
}
|
||||||
mLOG(GUI_RUNNER, DEBUG, "Loading config...");
|
mLOG(GUI_RUNNER, DEBUG, "Loading config...");
|
||||||
mCoreLoadForeignConfig(runner->core, &runner->config);
|
mCoreLoadForeignConfig(runner->core, &runner->config);
|
||||||
|
|
|
@ -428,14 +428,18 @@ static void _GBCoreGetGameCode(const struct mCore* core, char* title) {
|
||||||
GBGetGameCode(core->board, title);
|
GBGetGameCode(core->board, title);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _GBCoreSetRotation(struct mCore* core, struct mRotationSource* rotation) {
|
static void _GBCoreSetPeripheral(struct mCore* core, int type, void* periph) {
|
||||||
struct GB* gb = core->board;
|
struct GB* gb = core->board;
|
||||||
gb->memory.rotation = rotation;
|
switch (type) {
|
||||||
}
|
case mPERIPH_ROTATION:
|
||||||
|
gb->memory.rotation = periph;
|
||||||
static void _GBCoreSetRumble(struct mCore* core, struct mRumble* rumble) {
|
break;
|
||||||
struct GB* gb = core->board;
|
case mPERIPH_RUMBLE:
|
||||||
gb->memory.rumble = rumble;
|
gb->memory.rumble = periph;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t _GBCoreBusRead8(struct mCore* core, uint32_t address) {
|
static uint32_t _GBCoreBusRead8(struct mCore* core, uint32_t address) {
|
||||||
|
@ -642,8 +646,7 @@ struct mCore* GBCoreCreate(void) {
|
||||||
core->frequency = _GBCoreFrequency;
|
core->frequency = _GBCoreFrequency;
|
||||||
core->getGameTitle = _GBCoreGetGameTitle;
|
core->getGameTitle = _GBCoreGetGameTitle;
|
||||||
core->getGameCode = _GBCoreGetGameCode;
|
core->getGameCode = _GBCoreGetGameCode;
|
||||||
core->setRotation = _GBCoreSetRotation;
|
core->setPeripheral = _GBCoreSetPeripheral;
|
||||||
core->setRumble = _GBCoreSetRumble;
|
|
||||||
core->busRead8 = _GBCoreBusRead8;
|
core->busRead8 = _GBCoreBusRead8;
|
||||||
core->busRead16 = _GBCoreBusRead16;
|
core->busRead16 = _GBCoreBusRead16;
|
||||||
core->busRead32 = _GBCoreBusRead32;
|
core->busRead32 = _GBCoreBusRead32;
|
||||||
|
|
|
@ -424,14 +424,21 @@ static void _GBACoreGetGameCode(const struct mCore* core, char* title) {
|
||||||
GBAGetGameCode(core->board, title);
|
GBAGetGameCode(core->board, title);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _GBACoreSetRotation(struct mCore* core, struct mRotationSource* rotation) {
|
static void _GBACoreSetPeripheral(struct mCore* core, int type, void* periph) {
|
||||||
struct GBA* gba = core->board;
|
struct GBA* gba = core->board;
|
||||||
gba->rotationSource = rotation;
|
switch (type) {
|
||||||
}
|
case mPERIPH_ROTATION:
|
||||||
|
gba->rotationSource = periph;
|
||||||
static void _GBACoreSetRumble(struct mCore* core, struct mRumble* rumble) {
|
break;
|
||||||
struct GBA* gba = core->board;
|
case mPERIPH_RUMBLE:
|
||||||
gba->rumble = rumble;
|
gba->rumble = periph;
|
||||||
|
break;
|
||||||
|
case mPERIPH_GBA_LUMINANCE:
|
||||||
|
gba->luminanceSource = periph;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t _GBACoreBusRead8(struct mCore* core, uint32_t address) {
|
static uint32_t _GBACoreBusRead8(struct mCore* core, uint32_t address) {
|
||||||
|
@ -640,8 +647,7 @@ struct mCore* GBACoreCreate(void) {
|
||||||
core->frequency = _GBACoreFrequency;
|
core->frequency = _GBACoreFrequency;
|
||||||
core->getGameTitle = _GBACoreGetGameTitle;
|
core->getGameTitle = _GBACoreGetGameTitle;
|
||||||
core->getGameCode = _GBACoreGetGameCode;
|
core->getGameCode = _GBACoreGetGameCode;
|
||||||
core->setRotation = _GBACoreSetRotation;
|
core->setPeripheral = _GBACoreSetPeripheral;
|
||||||
core->setRumble = _GBACoreSetRumble;
|
|
||||||
core->busRead8 = _GBACoreBusRead8;
|
core->busRead8 = _GBACoreBusRead8;
|
||||||
core->busRead16 = _GBACoreBusRead16;
|
core->busRead16 = _GBACoreBusRead16;
|
||||||
core->busRead32 = _GBACoreBusRead32;
|
core->busRead32 = _GBACoreBusRead32;
|
||||||
|
|
|
@ -89,8 +89,6 @@ static void GBAInit(void* cpu, struct mCPUComponent* component) {
|
||||||
|
|
||||||
gba->stream = NULL;
|
gba->stream = NULL;
|
||||||
gba->keyCallback = NULL;
|
gba->keyCallback = NULL;
|
||||||
gba->stopCallback = NULL;
|
|
||||||
gba->stopCallback = NULL;
|
|
||||||
mCoreCallbacksListInit(&gba->coreCallbacks, 0);
|
mCoreCallbacksListInit(&gba->coreCallbacks, 0);
|
||||||
|
|
||||||
gba->biosChecksum = GBAChecksum(gba->memory.bios, SIZE_BIOS);
|
gba->biosChecksum = GBAChecksum(gba->memory.bios, SIZE_BIOS);
|
||||||
|
@ -449,11 +447,14 @@ void GBAHalt(struct GBA* gba) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void GBAStop(struct GBA* gba) {
|
void GBAStop(struct GBA* gba) {
|
||||||
if (!gba->stopCallback) {
|
size_t c;
|
||||||
return;
|
for (c = 0; c < mCoreCallbacksListSize(&gba->coreCallbacks); ++c) {
|
||||||
|
struct mCoreCallbacks* callbacks = mCoreCallbacksListGetPointer(&gba->coreCallbacks, c);
|
||||||
|
if (callbacks->sleep) {
|
||||||
|
callbacks->sleep(callbacks->context);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
gba->cpu->nextEvent = gba->cpu->cycles;
|
gba->cpu->nextEvent = gba->cpu->cycles;
|
||||||
gba->stopCallback->stop(gba->stopCallback);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GBADebug(struct GBA* gba, uint16_t flags) {
|
void GBADebug(struct GBA* gba, uint16_t flags) {
|
||||||
|
|
|
@ -242,7 +242,7 @@ static void _setup(struct mGUIRunner* runner) {
|
||||||
mCoreLoadForeignConfig(runner->core, &runner->config);
|
mCoreLoadForeignConfig(runner->core, &runner->config);
|
||||||
}
|
}
|
||||||
|
|
||||||
runner->core->setRotation(runner->core, &rotation.d);
|
runner->core->setPeripheral(runner->core, mPERIPH_ROTATION, &rotation.d);
|
||||||
if (hasSound != NO_SOUND) {
|
if (hasSound != NO_SOUND) {
|
||||||
runner->core->setAVStream(runner->core, &stream);
|
runner->core->setAVStream(runner->core, &stream);
|
||||||
}
|
}
|
||||||
|
|
|
@ -398,7 +398,7 @@ bool retro_load_game(const struct retro_game_info* game) {
|
||||||
blip_set_rates(core->getAudioChannel(core, 0), core->frequency(core), 32768);
|
blip_set_rates(core->getAudioChannel(core, 0), core->frequency(core), 32768);
|
||||||
blip_set_rates(core->getAudioChannel(core, 1), core->frequency(core), 32768);
|
blip_set_rates(core->getAudioChannel(core, 1), core->frequency(core), 32768);
|
||||||
|
|
||||||
core->setRumble(core, &rumble);
|
core->setPeripheral(core, mPERIPH_RUMBLE, &rumble);
|
||||||
|
|
||||||
savedata = anonymousMemoryMap(SIZE_CART_FLASH1M);
|
savedata = anonymousMemoryMap(SIZE_CART_FLASH1M);
|
||||||
struct VFile* save = VFileFromMemory(savedata, SIZE_CART_FLASH1M);
|
struct VFile* save = VFileFromMemory(savedata, SIZE_CART_FLASH1M);
|
||||||
|
@ -409,8 +409,7 @@ bool retro_load_game(const struct retro_game_info* game) {
|
||||||
|
|
||||||
#ifdef M_CORE_GBA
|
#ifdef M_CORE_GBA
|
||||||
if (core->platform(core) == PLATFORM_GBA) {
|
if (core->platform(core) == PLATFORM_GBA) {
|
||||||
struct GBA* gba = core->board;
|
core->setPeripheral(core, mPERIPH_GBA_LUMINANCE, &lux);
|
||||||
gba->luminanceSource = &lux;
|
|
||||||
|
|
||||||
const char* sysDir = 0;
|
const char* sysDir = 0;
|
||||||
if (core->opts.useBios && environCallback(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, &sysDir)) {
|
if (core->opts.useBios && environCallback(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, &sysDir)) {
|
||||||
|
|
|
@ -203,11 +203,11 @@ void mPSP2Setup(struct mGUIRunner* runner) {
|
||||||
rotation.d.readTiltX = _readTiltX;
|
rotation.d.readTiltX = _readTiltX;
|
||||||
rotation.d.readTiltY = _readTiltY;
|
rotation.d.readTiltY = _readTiltY;
|
||||||
rotation.d.readGyroZ = _readGyroZ;
|
rotation.d.readGyroZ = _readGyroZ;
|
||||||
runner->core->setRotation(runner->core, &rotation.d);
|
runner->core->setPeripheral(runner->core, mPERIPH_ROTATION, &rotation.d);
|
||||||
|
|
||||||
rumble.d.setRumble = _setRumble;
|
rumble.d.setRumble = _setRumble;
|
||||||
CircleBufferInit(&rumble.history, RUMBLE_PWM);
|
CircleBufferInit(&rumble.history, RUMBLE_PWM);
|
||||||
runner->core->setRumble(runner->core, &rumble.d);
|
runner->core->setPeripheral(runner->core, mPERIPH_RUMBLE, &rumble.d);
|
||||||
|
|
||||||
frameLimiter = true;
|
frameLimiter = true;
|
||||||
backdrop = vita2d_load_PNG_buffer(_binary_backdrop_png_start);
|
backdrop = vita2d_load_PNG_buffer(_binary_backdrop_png_start);
|
||||||
|
|
|
@ -87,8 +87,8 @@ GameController::GameController(QObject* parent)
|
||||||
|
|
||||||
m_threadContext.startCallback = [](mCoreThread* context) {
|
m_threadContext.startCallback = [](mCoreThread* context) {
|
||||||
GameController* controller = static_cast<GameController*>(context->userData);
|
GameController* controller = static_cast<GameController*>(context->userData);
|
||||||
context->core->setRotation(context->core, controller->m_inputController->rotationSource());
|
context->core->setPeripheral(context->core, mPERIPH_ROTATION, controller->m_inputController->rotationSource());
|
||||||
context->core->setRumble(context->core, controller->m_inputController->rumble());
|
context->core->setPeripheral(context->core, mPERIPH_RUMBLE, controller->m_inputController->rumble());
|
||||||
|
|
||||||
#ifdef M_CORE_GBA
|
#ifdef M_CORE_GBA
|
||||||
GBA* gba = static_cast<GBA*>(context->core->board);
|
GBA* gba = static_cast<GBA*>(context->core->board);
|
||||||
|
@ -99,7 +99,7 @@ GameController::GameController(QObject* parent)
|
||||||
switch (context->core->platform(context->core)) {
|
switch (context->core->platform(context->core)) {
|
||||||
#ifdef M_CORE_GBA
|
#ifdef M_CORE_GBA
|
||||||
case PLATFORM_GBA:
|
case PLATFORM_GBA:
|
||||||
gba->luminanceSource = &controller->m_lux;
|
context->core->setPeripheral(context->core, mPERIPH_GBA_LUMINANCE, &controller->m_lux);
|
||||||
gba->audio.psg.forceDisableCh[0] = !controller->m_audioChannels[0];
|
gba->audio.psg.forceDisableCh[0] = !controller->m_audioChannels[0];
|
||||||
gba->audio.psg.forceDisableCh[1] = !controller->m_audioChannels[1];
|
gba->audio.psg.forceDisableCh[1] = !controller->m_audioChannels[1];
|
||||||
gba->audio.psg.forceDisableCh[2] = !controller->m_audioChannels[2];
|
gba->audio.psg.forceDisableCh[2] = !controller->m_audioChannels[2];
|
||||||
|
@ -217,18 +217,16 @@ GameController::GameController(QObject* parent)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO: Put back
|
m_threadContext.sleepCallback = [](mCoreThread* context) {
|
||||||
/*m_threadContext.stopCallback = [](mCoreThread* context) {
|
|
||||||
if (!context) {
|
if (!context) {
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
GameController* controller = static_cast<GameController*>(context->userData);
|
GameController* controller = static_cast<GameController*>(context->userData);
|
||||||
if (!mCoreSaveState(context->core, 0, controller->m_saveStateFlags)) {
|
if (!mCoreSaveState(context->core, 0, controller->m_saveStateFlags)) {
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
QMetaObject::invokeMethod(controller, "closeGame");
|
QMetaObject::invokeMethod(controller, "closeGame");
|
||||||
return true;
|
};
|
||||||
};*/
|
|
||||||
|
|
||||||
m_threadContext.logger.d.log = [](mLogger* logger, int category, enum mLogLevel level, const char* format, va_list args) {
|
m_threadContext.logger.d.log = [](mLogger* logger, int category, enum mLogLevel level, const char* format, va_list args) {
|
||||||
mThreadLogger* logContext = reinterpret_cast<mThreadLogger*>(logger);
|
mThreadLogger* logContext = reinterpret_cast<mThreadLogger*>(logger);
|
||||||
|
@ -643,6 +641,8 @@ void GameController::cleanGame() {
|
||||||
if (!m_gameOpen || mCoreThreadIsActive(&m_threadContext)) {
|
if (!m_gameOpen || mCoreThreadIsActive(&m_threadContext)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_audioProcessor->pause();
|
||||||
mCoreThreadJoin(&m_threadContext);
|
mCoreThreadJoin(&m_threadContext);
|
||||||
|
|
||||||
if (m_tileCache) {
|
if (m_tileCache) {
|
||||||
|
|
|
@ -130,7 +130,7 @@ int main(int argc, char** argv) {
|
||||||
mSDLPlayerLoadConfig(&renderer.player, mCoreConfigGetInput(&renderer.core->config));
|
mSDLPlayerLoadConfig(&renderer.player, mCoreConfigGetInput(&renderer.core->config));
|
||||||
|
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
||||||
renderer.core->setRumble(renderer.core, &renderer.player.rumble.d);
|
renderer.core->setPeripheral(renderer.core, mPERIPH_RUMBLE, &renderer.player.rumble.d);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
|
@ -641,8 +641,8 @@ void _guiPrepare(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void _setup(struct mGUIRunner* runner) {
|
void _setup(struct mGUIRunner* runner) {
|
||||||
runner->core->setRotation(runner->core, &rotation);
|
runner->core->setPeripheral(runner->core, mPERIPH_ROTATION, &rotation);
|
||||||
runner->core->setRumble(runner->core, &rumble);
|
runner->core->setPeripheral(runner->core, mPERIPH_RUMBLE, &rumble);
|
||||||
|
|
||||||
_mapKey(&runner->core->inputMap, GCN1_INPUT, PAD_BUTTON_A, GBA_KEY_A);
|
_mapKey(&runner->core->inputMap, GCN1_INPUT, PAD_BUTTON_A, GBA_KEY_A);
|
||||||
_mapKey(&runner->core->inputMap, GCN1_INPUT, PAD_BUTTON_B, GBA_KEY_B);
|
_mapKey(&runner->core->inputMap, GCN1_INPUT, PAD_BUTTON_B, GBA_KEY_B);
|
||||||
|
|
Loading…
Reference in New Issue