diff options
| author | Loic Guegan <manzerbredes@mailbox.org> | 2021-05-02 14:46:18 +0200 |
|---|---|---|
| committer | Loic Guegan <manzerbredes@mailbox.org> | 2021-05-02 14:46:18 +0200 |
| commit | e59104ffb55abe522c82d658f1f285149cca2cb1 (patch) | |
| tree | eb3cc1e46d0dd5b684864903b95ae32e245010da /src/core/idt.cc | |
| parent | 4f08ba2b1d0ad7ea90d4d97a483b56b891b9c902 (diff) | |
Debug GDT enable multitasking
Diffstat (limited to 'src/core/idt.cc')
| -rw-r--r-- | src/core/idt.cc | 18 |
1 files changed, 15 insertions, 3 deletions
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" |
