mirror of
https://github.com/libretro/mgba.git
synced 2024-12-03 13:50:44 +00:00
Core: Unify peripheral attachment
This commit is contained in:
parent
5646ba7d60
commit
e063e05662
@ -110,8 +110,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);
|
||||||
|
@ -54,6 +54,12 @@ struct mKeyCallback {
|
|||||||
uint16_t (*readKeys)(struct mKeyCallback*);
|
uint16_t (*readKeys)(struct mKeyCallback*);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum mPeripheral {
|
||||||
|
mPERIPH_ROTATION = 1,
|
||||||
|
mPERIPH_RUMBLE,
|
||||||
|
mPERIPH_CUSTOM = 0x1000
|
||||||
|
};
|
||||||
|
|
||||||
struct mRotationSource {
|
struct mRotationSource {
|
||||||
void (*sample)(struct mRotationSource*);
|
void (*sample)(struct mRotationSource*);
|
||||||
|
|
||||||
|
@ -408,14 +408,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) {
|
||||||
@ -620,8 +624,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;
|
||||||
|
@ -405,14 +405,18 @@ 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;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t _GBACoreBusRead8(struct mCore* core, uint32_t address) {
|
static uint32_t _GBACoreBusRead8(struct mCore* core, uint32_t address) {
|
||||||
@ -619,8 +623,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;
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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
Block a user