#include "input.h"
#include "gbaregs.h"
-#include "intr.h"
+#include "util.h"
-static void keyintr(void);
+/*
+#define NUM_KEYS 10
-static uint16_t bnstate;
+static int rep_start, rep_rep;
+static unsigned long first_press[16], last_press[16];
+static uint16_t repmask;
-void select_input(uint16_t bmask)
+void key_repeat(int start, int rep, uint16_t mask)
{
- 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);
- }
+ rep_start = start;
+ rep_rep = rep;
+ repmask = mask;
}
+*/
-uint16_t get_input(void)
+void update_keyb(void)
{
- uint16_t s;
-
- mask(INTR_KEY);
- s = bnstate;
- bnstate = 0;
- unmask(INTR_KEY);
-
- return s;
+ static uint16_t prevstate;
+ /*
+ int i;
+ unsigned long msec = timer_msec;
+ */
+
+ //keystate = (~REG_KEYINPUT & 0x3ff);
+ keydelta = keystate ^ prevstate;
+ prevstate = keystate;
+
+ /*
+ for(i=0; i<NUM_KEYS; i++) {
+ uint16_t bit = 1 << i;
+ if(!(bit & repmask)) {
+ continue;
+ }
+
+ if(keystate & bit) {
+ if(keydelta & bit) {
+ first_press[i] = msec;
+ } else {
+ if(msec - first_press[i] >= rep_start && msec - last_press[i] >= rep_rep) {
+ keydelta |= bit;
+ last_press[i] = msec;
+ }
+ }
+ }
+ }
+ */
}
-static void keyintr(void)
-{
- bnstate |= ~REG_KEYINPUT;
-}