X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=kern%2Fsrc%2Fintr.c;fp=kern%2Fsrc%2Fintr.c;h=e682b3078af39ad64ced05aaac36b92299a3d860;hb=88e57cf7f2581900eb31cb835a18ad414e37786c;hp=0000000000000000000000000000000000000000;hpb=5145ed1e2adefc9c66e20681532a3a7cd6c2de01;p=eightysix diff --git a/kern/src/intr.c b/kern/src/intr.c new file mode 100644 index 0000000..e682b30 --- /dev/null +++ b/kern/src/intr.c @@ -0,0 +1,109 @@ +#include "intr.h" + +/* PIC command and data ports */ +#define PIC1_CMD 0x20 +#define PIC1_DATA 0x21 +#define PIC2_CMD 0xa0 +#define PIC2_DATA 0xa1 + +/* PIC initialization command word 1 bits */ +#define ICW1_ICW4_NEEDED (1 << 0) +#define ICW1_SINGLE (1 << 1) +#define ICW1_INTERVAL4 (1 << 2) +#define ICW1_LEVEL (1 << 3) +#define ICW1_INIT (1 << 4) +/* PIC initialization command word 4 bits */ +#define ICW4_8086 (1 << 0) +#define ICW4_AUTO_EOI (1 << 1) +#define ICW4_BUF_SLAVE (1 << 3) /* 1000 */ +#define ICW4_BUF_MASTER (3 << 2) /* 1100 */ +#define ICW4_SPECIAL (1 << 4) +/* PIC operation command word 2 bits */ +#define OCW2_EOI (1 << 5) + + +#define MAX_INTR 32 +static intr_func_t intrfunc[MAX_INTR]; + +static void (*intr_unhandled)(struct intr_frame *frm); + +void intr_entry_div(); +void intr_entry_trap(); +void intr_entry_nmi(); +void intr_entry_break(); +void intr_entry_ovf(); +void intr_entry_bound(); +void intr_entry_ill(); +void intr_entry_irq0(); +void intr_entry_irq1(); +void intr_entry_irq2(); +void intr_entry_irq3(); +void intr_entry_irq4(); +void intr_entry_irq5(); +void intr_entry_irq6(); +void intr_entry_irq7(); + +extern int _kern_start_seg; +#define KERN_CS ((uint16_t)(&_kern_start_seg)) + + +void init_intr(void) +{ + int i; + + for(i=0; i