aboutsummaryrefslogtreecommitdiff
path: root/i686
diff options
context:
space:
mode:
Diffstat (limited to 'i686')
-rw-r--r--i686/idt.h1
-rw-r--r--i686/isr.c9
-rw-r--r--i686/lidt.c3
3 files changed, 11 insertions, 2 deletions
diff --git a/i686/idt.h b/i686/idt.h
index f96e2b1..45744dc 100644
--- a/i686/idt.h
+++ b/i686/idt.h
@@ -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();
diff --git a/i686/isr.c b/i686/isr.c
index 3f99425..6fbe200 100644
--- a/i686/isr.c
+++ b/i686/isr.c
@@ -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);