starting to separate platform-specific code to facilitate a PC build
[gbajam22] / src / gba / input.c
1 #include "input.h"
2 #include "gbaregs.h"
3 #include "intr.h"
4
5 static void keyintr(void);
6
7 static uint16_t bnstate;
8
9 void select_input(uint16_t bmask)
10 {
11         bnstate = 0;
12
13         mask(INTR_KEY);
14         if(bmask) {
15                 REG_KEYCNT = bmask | KEYCNT_IE;
16                 interrupt(INTR_KEY, keyintr);
17                 unmask(INTR_KEY);
18         } else {
19                 REG_KEYCNT = 0;
20                 interrupt(INTR_KEY, 0);
21         }
22 }
23
24 uint16_t get_input(void)
25 {
26         uint16_t s;
27
28         mask(INTR_KEY);
29         s = bnstate;
30         bnstate = 0;
31         unmask(INTR_KEY);
32
33         return s;
34 }
35
36 static void keyintr(void)
37 {
38         bnstate |= ~REG_KEYINPUT;
39 }