]>
git.dujemihanovic.xyz Git - nameless-os.git/blob - kernel/kernel.c
0aa8fc260ddfd604789fa6e2ff0050cb2f4a8970
4 #include <irq/i8259a.h>
8 extern void double_fault(struct abort_frame
*frame
);
9 extern void keyb_handler(struct interrupt_frame
*frame
);
10 extern void pf_handler(struct fault_frame
*frame
);
11 static struct idt_descriptor idt
[256] __attribute__((aligned(0x10)));
12 static struct idtr idtr
__attribute__((aligned(0x10)));
21 void print_e820(struct e820_map
*mmap
, int mmap_size
)
23 kprint(" Base | Length | Type | Attrib |\n", 0);
24 kprint("------------------------------------------------------------\n", 0);
25 for (int i
=0; i
<mmap_size
; i
++) {
26 kprintq(mmap
[i
].base
);
28 kprintq(mmap
[i
].length
);
30 kprintd(mmap
[i
].type
);
32 kprintd(mmap
[i
].attrib
);
38 void kmain(struct e820_map
*mmap
, int mmap_size
)
41 kprint("Welcome to Nameless OS!\nRunning revision: ", 0);
42 kprint(GIT_COMMIT
, 0);
44 kprint("BIOS memory map:\n", 0);
45 print_e820(mmap
, mmap_size
);
46 kprint("Preparing IDT...\n", 0);
47 idt_set_descriptor(idt
, 8, 0x8, (uint32_t) double_fault
, IDT_INTERRUPT_GATE
, 0x0);
48 idt_set_descriptor(idt
, 14, 0x8, (uint32_t) pf_handler
, IDT_INTERRUPT_GATE
, 0x0);
49 idt_set_descriptor(idt
, 33, 0x8, (uint32_t) keyb_handler
, IDT_INTERRUPT_GATE
, 0x0);
50 kprint("IDT prepared, loading...\n", 0);
51 populate_idtr(&idtr
, idt
);
53 kprint("IDT loaded, enabling interrupts...\n", 0);
58 kprint("All done\n", 0);