all repos — mgba @ 3341cc386567c7713aaa3ccab67677635293ba29

mGBA Game Boy Advance Emulator

DS I/O: Add extended key input
Vicki Pfau vi@endrift.com
Wed, 22 Feb 2017 16:44:16 -0800
commit

3341cc386567c7713aaa3ccab67677635293ba29

parent

198efff5772c5715afe715e3e97f6f9431e3512e

1 files changed, 16 insertions(+), 2 deletions(-)

jump to
M src/ds/io.csrc/ds/io.c

@@ -193,8 +193,20 @@

return value; } +static uint16_t DSIOReadExKeyInput(struct DS* ds) { + uint16_t input = 0; + if (ds->keyCallback) { + input = ds->keyCallback->readKeys(ds->keyCallback); + } else if (ds->keySource) { + input = *ds->keySource; + } + input = ~(input >> 10) & 0x3; + input |= 0x3C; + return input; +} + static uint16_t DSIOReadKeyInput(struct DS* ds) { - uint16_t input = 0x3FF; + uint16_t input = 0; if (ds->keyCallback) { input = ds->keyCallback->readKeys(ds->keyCallback); } else if (ds->keySource) {

@@ -212,7 +224,7 @@ if (ud != 0x0C0) {

input |= ud; } }*/ - return 0x3FF ^ input; + return ~input & 0x3FF; } static void DSIOUpdateTimer(struct DSCommon* dscore, uint32_t address) {

@@ -327,6 +339,8 @@ DSIOUpdateTimer(&ds->ds7, address);

break; case DS_REG_KEYINPUT: return DSIOReadKeyInput(ds); + case DS7_REG_EXTKEYIN: + return DSIOReadExKeyInput(ds); case DS_REG_DMA0FILL_LO: case DS_REG_DMA0FILL_HI: case DS_REG_DMA1FILL_LO: