stable floor cones
[gbajam22] / src / intr.c
1 #include "intr.h"
2
3 #define MAX_INTR        14
4 static void (*intr_table[MAX_INTR])(void);
5
6 __attribute__ ((target("arm"), section(".iwram")))
7 static void intr_handler(void)
8 {
9         int i;
10         uint16_t iflags;
11
12         iflags = REG_IF;
13
14         for(i=0; i<MAX_INTR; i++) {
15                 if((iflags & (1 << i)) && intr_table[i]) {
16                         intr_table[i]();
17                 }
18         }
19
20         REG_IF = iflags;        /* ack intr */
21 }
22
23 void intr_init(void)
24 {
25         INTR_VECTOR = (uint32_t)intr_handler;
26 }
27
28 void interrupt(int intr, void (*handler)(void))
29 {
30         intr_table[intr] = handler;
31 }