diff options
Diffstat (limited to 'i686')
-rw-r--r-- | i686/idt.h | 1 | ||||
-rw-r--r-- | i686/isr.c | 9 | ||||
-rw-r--r-- | i686/lidt.c | 3 |
3 files changed, 11 insertions, 2 deletions
@@ -17,6 +17,7 @@ void abort_handler(struct interrupt_frame *frame); void syscall_handler(struct interrupt_frame *frame); void irq0x00(struct interrupt_frame *frame); // timer interrupt void irq0x01(struct interrupt_frame *frame); // keyboard interrupt +void irq0x0c(struct interrupt_frame *frame); // mouse interrupt /* lidt.c */ void idt_install(); @@ -36,5 +36,12 @@ __attribute__((interrupt)) void irq0x01(struct interrupt_frame *) { ps2_keyboard_irq_handler(); - pic_clear(0x00); + pic_clear(0x01); +} + +__attribute__((interrupt)) void +irq0x0c(struct interrupt_frame *) +{ + printf("irq 0x0c\n"); + pic_clear(0x0c); } diff --git a/i686/lidt.c b/i686/lidt.c index 5cb66b6..8a70bf3 100644 --- a/i686/lidt.c +++ b/i686/lidt.c @@ -41,9 +41,10 @@ idt_install() for (int i = 0; i <= 0x13; ++i) Gate(&interrupt_table[i], &abort_handler, 0x10); // irq 0x20~0x2f + for (int i = 0x22; i <= 0x2f; ++i) Gate(&interrupt_table[i], &abort_handler, 0x10); Gate(&interrupt_table[0x20], &irq0x00, 0x10); Gate(&interrupt_table[0x21], &irq0x01, 0x10); - for (int i = 0x22; i <= 0x2f; ++i) Gate(&interrupt_table[i], &abort_handler, 0x10); + Gate(&interrupt_table[0x2c], &irq0x0c, 0x10); // syscall 0x80 Gate(&interrupt_table[0x80], &abort_handler, 0x10); |