]> git.dujemihanovic.xyz Git - nameless-os.git/blob - kernel/kernel.c
Handle interrupts
[nameless-os.git] / kernel / kernel.c
1 #include <tty.h>
2 #include <io.h>
3 #include <irq/idt.h>
4 #include <irq/i8259a.h>
5 #include <stdint.h>
6
7 extern void double_fault(struct abort_frame *frame);
8 extern void keyb_handler(struct interrupt_frame *frame);
9 struct idt_descriptor idt[256] __attribute__((aligned(0x10)));
10 struct idtr idtr __attribute__((aligned(0x10)));
11
12 void _start(void)
13 {
14 screen_clear();
15 kprint("Welcome to Nameless OS!\nRunning revision: ", 0);
16 kprint(GIT_COMMIT, 0);
17 kprint("\n", 0);
18 kprint("Preparing IDT...\n", 0);
19 idt_set_descriptor(idt, 0x8, 0x8, (uint32_t) double_fault, IDT_TRAP_GATE, 0x0);
20 idt_set_descriptor(idt, 0x21, 0x8, (uint32_t) keyb_handler, IDT_INTERRUPT_GATE, 0x0);
21 kprint("IDT prepared, loading...\n", 0);
22 populate_idtr(&idtr, idt);
23 load_idt(idtr);
24 kprint("IDT loaded, enabling interrupts...\n", 0);
25 pic_init(0x20, 0x28);
26 pic_mask_all();
27 pic_unmask(1);
28 asm volatile ("sti");
29 kprint("All done\n", 0);
30 while(1);
31 }