X-Git-Url: http://git.dujemihanovic.xyz/projects?a=blobdiff_plain;f=kernel%2Fkernel.c;h=e1a0df5158f3b06bfd44e8693db172d431737dbf;hb=9fc180435dd7b476130851c48e1ac28009daa864;hp=87fbef954a0c4703db02024c1fcf2e1383b34659;hpb=c9f2bccb44c5437f1cae0862b2c84d3af47eade8;p=nameless-os.git diff --git a/kernel/kernel.c b/kernel/kernel.c index 87fbef9..e1a0df5 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -1,5 +1,31 @@ +#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 _start(void) { - char *video_memory = (char *) 0xB8000; - *video_memory = 'A'; + 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); }