summaryrefslogtreecommitdiff
path: root/kernel/interrupts.c
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-08-31 13:15:41 +0200
committerMiguel <m.i@gmx.at>2018-08-31 13:15:41 +0200
commit418a23ebe1af6974e3f1446896ae09b184a9e2a2 (patch)
tree8e6fe0cca1b93516daf056cabc83c2840323b565 /kernel/interrupts.c
parent331ed2b6273c79e0eaa236c4615205823608dc6b (diff)
override video mode from grub
Diffstat (limited to 'kernel/interrupts.c')
-rw-r--r--kernel/interrupts.c42
1 files changed, 20 insertions, 22 deletions
diff --git a/kernel/interrupts.c b/kernel/interrupts.c
index 74377ad..6e7e2ff 100644
--- a/kernel/interrupts.c
+++ b/kernel/interrupts.c
@@ -8,10 +8,28 @@
#define INT_MAX 255 // size of our interrupts table
+// the interrupt descriptor table
+static struct int_desc
+{
+ uint16_t addrLo;
+ uint16_t sel;
+ uint8_t zeros;
+ uint8_t flags;
+ uint16_t addrHi;
+
+} idt[INT_MAX];
+
+// interrupt descriptor table descriptor
+static struct idt_desc
+{
+ uint16_t size;
+ uint16_t baseLo;
+ uint16_t baseHi;
+} idtd;
uint32_t interrupt_handler(uint32_t num, uint32_t esp)
{
- if(num!=990)klog("int: %d %d",num,esp);
+ if(num!=0)klog("int: %d %d",num,esp);
return esp;
}
@@ -28,27 +46,7 @@ void defklog(uint32_t eip, uint16_t cs, uint32_t flags)
}
void int_install_ir(int irq, uint16_t flags, uint16_t sel, void *addr);
-//void mouse_handler();
-// the interrupt descriptor table
-static struct int_desc
-{
- uint16_t addrLo;
- uint16_t sel;
- uint8_t zeros;
- uint8_t flags;
- uint16_t addrHi;
-
-} idt[INT_MAX];
-
-// interrupt descriptor table descriptor
-static struct idt_desc
-{
- uint16_t size;
- uint16_t baseLo;
- uint16_t baseHi;
-
-} idtd;
void exception_handle()
{
@@ -169,7 +167,7 @@ void interrupts_init(uint16_t sel)
//mouse interrupt handler (irq 12 => 34)
int_install_ir(44, 0b10001110, 0x08,&int12);
- //system calls (can be called from ring3 (0b11))
+ //our system calls (can be called from ring3 (0b11))
int_install_ir(0x80, 0b11101110, 0x08,&int128);
int_install();