diff options
Diffstat (limited to 'kernel/interrupts.c')
| -rw-r--r-- | kernel/interrupts.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/kernel/interrupts.c b/kernel/interrupts.c index c6acf61..902538b 100644 --- a/kernel/interrupts.c +++ b/kernel/interrupts.c @@ -1,13 +1,17 @@ +#define FOOLOS_MODULE_NAME "interrupts" + +#include "lib/logger/log.h" // logger facilities + #include "interrupts.h" #include "lib/int/stdint.h" #include "x86.h" -#include "../lib/logger/log.h" // logger facilities -#define FOOLOS_MODULE_NAME "interrupts" +void int_clock_handler(); +void int_kb_handler(); +void int_install_ir(int irq, uint16_t flags, uint16_t sel, void *addr); void int_default_handler(); -void int_install_ir(int irq, uint16_t flags, uint16_t sel, void *addr); // the interrupt descriptor table static struct int_desc @@ -125,6 +129,25 @@ void int_init(uint16_t sel) int_install_ir(17, 0b10001110, 0x08,&int_irq17); int_install_ir(18, 0b10001110, 0x08,&int_irq18); + // setup some custom interrupts + // remember that we shifted all interrupts with the pic by 32 + + // install PIT interrupt handler (irq 0 => 32) + int_install_ir(32, 0b10001110, 0x08,&int_clock_handler); + + // install keyboard interrupt handler (irq 1 => 33) + int_install_ir(33, 0b10001110, 0x08,&int_kb_handler); + + #ifdef FOOLOS_COMPILE_FLOPPY + // install floppy interrupt handler (irq 6 => 38) + int_install_ir(38, 0b10001110, 0x08,&int_floppy_handler); + #endif + + int_install(); + + // now we can enable interrupts back again + x86_int_enable(); + } void int_install() |
