Core: Add keysRead callback

This commit is contained in:
Vicki Pfau 2019-03-08 09:55:51 -08:00
parent 4aff301638
commit 0425fa805c
4 changed files with 20 additions and 0 deletions

View File

@ -26,6 +26,7 @@ Misc:
- LR35902: Support PC-relative opcode decoding
- Qt: Improve camera initialization
- Qt: Support switching webcams
- Core: Add keysRead callback
0.7.1: (2019-02-24)
Bugfixes:

View File

@ -86,6 +86,7 @@ struct mCoreCallbacks {
void (*videoFrameEnded)(void* context);
void (*coreCrashed)(void* context);
void (*sleep)(void* context);
void (*keysRead)(void* context);
};
DECLARE_VECTOR(mCoreCallbacksList, struct mCoreCallbacks);

View File

@ -576,6 +576,15 @@ static uint8_t _readKeysFiltered(struct GB* gb) {
uint8_t GBIORead(struct GB* gb, unsigned address) {
switch (address) {
case REG_JOYP:
{
size_t c;
for (c = 0; c < mCoreCallbacksListSize(&gb->coreCallbacks); ++c) {
struct mCoreCallbacks* callbacks = mCoreCallbacksListGetPointer(&gb->coreCallbacks, c);
if (callbacks->keysRead) {
callbacks->keysRead(callbacks->context);
}
}
}
return _readKeysFiltered(gb);
case REG_IE:
return gb->memory.ie;

View File

@ -725,6 +725,15 @@ uint16_t GBAIORead(struct GBA* gba, uint32_t address) {
break;
case REG_KEYINPUT:
{
size_t c;
for (c = 0; c < mCoreCallbacksListSize(&gba->coreCallbacks); ++c) {
struct mCoreCallbacks* callbacks = mCoreCallbacksListGetPointer(&gba->coreCallbacks, c);
if (callbacks->keysRead) {
callbacks->keysRead(callbacks->context);
}
}
}
if (gba->rr && gba->rr->isPlaying(gba->rr)) {
return 0x3FF ^ gba->rr->queryInput(gba->rr);
} else {