added input handling
[gbajam21] / src / input.c
diff --git a/src/input.c b/src/input.c
new file mode 100644 (file)
index 0000000..6a66dd1
--- /dev/null
@@ -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;
+}