From e59104ffb55abe522c82d658f1f285149cca2cb1 Mon Sep 17 00:00:00 2001 From: Loic Guegan Date: Sun, 2 May 2021 14:46:18 +0200 Subject: Debug GDT enable multitasking --- src/core/idt.cc | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src/core/idt.cc') diff --git a/src/core/idt.cc b/src/core/idt.cc index 495b332..b8b57c7 100644 --- a/src/core/idt.cc +++ b/src/core/idt.cc @@ -6,7 +6,7 @@ u32 idt[IDT_MAX_ENTRIES][4] __attribute__((aligned(4096)));; IDT_REGISTER IDTR; -extern u64 INT_DEFAULT,INT_0,INT_14,INT_KBD,INT_CLK; +extern u64 INT_DEFAULT,INT_0,INT_10,INT_14,INT_KBD,INT_CLK,INT_SYSCALL; void idt_enable_interrupt(void){ IDTR.base=((u64)idt); @@ -28,6 +28,10 @@ void idt_enable_interrupt(void){ d.offset=(u64)&INT_14; idt_write_descriptor(d, i); } + else if(i==10){ + d.offset=(u64)&INT_10; + idt_write_descriptor(d, i); + } else if(i==60){ // Keyboard d.offset=(u64)&INT_KBD; idt_write_descriptor(d, i); @@ -36,12 +40,20 @@ void idt_enable_interrupt(void){ d.offset=(u64)&INT_CLK; idt_write_descriptor(d, i); } + else if(i==0x30){ // Syscall + IDT_DESCRIPTOR d2; + d2.ign=0; + d2.ist=0; + d2.selector=0x08; + d2.options=IDT_OPT_P|IDT_OPT_PRVL_3|IDT_OPT_TYPE_INT; + d2.offset=(u64)&INT_SYSCALL; + idt_write_descriptor(d2, i); + } else { d.offset=(u64)&INT_DEFAULT; idt_write_descriptor(d, i); } - } - + } // Enable interrupts asm( "lidt (IDTR) \n\t" -- cgit v1.2.3