X-Git-Url: http://git.dujemihanovic.xyz/posts?a=blobdiff_plain;f=kernel%2Fkernel.c;h=e1a0df5158f3b06bfd44e8693db172d431737dbf;hb=9fc180435dd7b476130851c48e1ac28009daa864;hp=1e27a1b3ddcfdf0df9100505ae096dbe3a30cea0;hpb=2d2187830c156e9c36e70fb7dbe4b05dfc09a255;p=nameless-os.git diff --git a/kernel/kernel.c b/kernel/kernel.c index 1e27a1b..e1a0df5 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -1,16 +1,31 @@ #include +#include +#include +#include +#include -const char *string = "Hello there!\n\n\ -Hopefully your machine manages to print this text.\n\ -If it did, that's great news because I managed to write a partial VGA driver.\n\n\ -Right now, the short-term roadmap is as follows:\n\n\ -* Enable interrupts using the PIC.\n\ -* Write a driver for the Intel 8042 PS/2 controller so the OS can receive keystrokes.\n\ -* A working i8042 driver will also aid in enabling A20 Gate, which should be done ASAP so the OS can address odd (as in odd/even number) megabytes.\n\n\ -Feel free to mess around with the code, although I doubt it will be very interesting at the moment.\n"; +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) { screen_clear(); - kprint(string); + 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); }