From 81cd68cbac0bc374ae29448d9a067cb97f7318b3 Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Tue, 19 Jan 2016 23:12:25 -0800 Subject: [PATCH] GB IO: Implement key reading --- src/gb/io.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/gb/io.c b/src/gb/io.c index 8e6d176b2..763c18e77 100644 --- a/src/gb/io.c +++ b/src/gb/io.c @@ -85,8 +85,25 @@ void GBIOWrite(struct GB* gb, unsigned address, uint8_t value) { gb->memory.io[address] = value; } +static uint8_t _readKeys(struct GB* gb) { + uint8_t keys = *gb->keySource; + switch (gb->memory.io[REG_JOYP] & 0x30) { + case 0x10: + keys >>= 4; + break; + case 0x20: + break; + default: + // ??? + break; + } + return (gb->memory.io[REG_JOYP] | 0xF) ^ (keys & 0xF); +} + uint8_t GBIORead(struct GB* gb, unsigned address) { switch (address) { + case REG_JOYP: + return _readKeys(gb); case REG_IF: break; case REG_IE: