X-Git-Url: http://git.dujemihanovic.xyz/projects?a=blobdiff_plain;f=kernel%2Fkernel.c;h=4c6efd8692da90d7ab15cf782846b3194e9483f7;hb=94770e6354578485b2aed68dcc3064e5d6862645;hp=e04b875e2959b5963e7c6f4ba394abba1f5f0be5;hpb=668fa121eb74d3317a73c2289f8805aaf1c84d7e;p=nameless-os.git diff --git a/kernel/kernel.c b/kernel/kernel.c index e04b875..4c6efd8 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -1,5 +1,31 @@ -void _start(void) +#include +#include +#include +#include +#include + +extern void double_fault(struct abort_frame *frame); +extern void keyb_handler(struct interrupt_frame *frame); +struct idt_descriptor idt[256] __attribute__((aligned(0x10))); +struct idtr idtr __attribute__((aligned(0x10))); + +void kmain(void) { - char *video_memory = (char *) 0xB8000; /* VGA VRAM starts at 0xB8000 */ - *video_memory = 'A'; /* put an A at the beginning of the VRAM */ + screen_clear(); + kprint("Welcome to Nameless OS!\nRunning revision: ", 0); + kprint(GIT_COMMIT, 0); + kprint("\n", 0); + kprint("Preparing IDT...\n", 0); + idt_set_descriptor(idt, 0x8, 0x8, (uint32_t) double_fault, IDT_TRAP_GATE, 0x0); + idt_set_descriptor(idt, 0x21, 0x8, (uint32_t) keyb_handler, IDT_INTERRUPT_GATE, 0x0); + kprint("IDT prepared, loading...\n", 0); + populate_idtr(&idtr, idt); + load_idt(idtr); + kprint("IDT loaded, enabling interrupts...\n", 0); + pic_init(0x20, 0x28); + pic_mask_all(); + pic_unmask(1); + asm volatile ("sti"); + kprint("All done\n", 0); + while(1); }