X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Finput.c;fp=src%2Finput.c;h=6a66dd1c77d81c023a77975a565aa31ae8666a2b;hb=6a650e3e08da161fcebeb9181da60e110893fa8b;hp=0000000000000000000000000000000000000000;hpb=bbe2ec049a812155c75da5ecc303bf3793c9cca8;p=gbajam21 diff --git a/src/input.c b/src/input.c new file mode 100644 index 0000000..6a66dd1 --- /dev/null +++ b/src/input.c @@ -0,0 +1,39 @@ +#include "input.h" +#include "gbaregs.h" +#include "intr.h" + +static void keyintr(void); + +static uint16_t bnstate; + +void select_input(uint16_t bmask) +{ + bnstate = 0; + + mask(INTR_KEY); + if(bmask) { + REG_KEYCNT = bmask | KEYCNT_IE; + interrupt(INTR_KEY, keyintr); + unmask(INTR_KEY); + } else { + REG_KEYCNT = 0; + interrupt(INTR_KEY, 0); + } +} + +uint16_t get_input(void) +{ + uint16_t s; + + mask(INTR_KEY); + s = bnstate; + bnstate = 0; + unmask(INTR_KEY); + + return s; +} + +static void keyintr(void) +{ + bnstate |= ~REG_KEYINPUT; +}