#include "multiboot.h" #include #include #include #include #include #include "memory/mm.h" extern void init_idt(); extern void init_gdt(); extern void init_pic(); extern void init_pit(); extern int init_ps2(); extern void enable_interrupts(); void* page = NULL; extern char __kernel_start; extern char __kernel_end; void kmain(uint32_t magic, multiboot_info* mbi) { extern print_stream_t vga_print_stream; extern print_stream_t* kout; kout = &vga_print_stream; kout->trunc(); kprintf("RockOS booting...\n"); init_gdt(); kprintf("GDT set\n"); init_idt(); kprintf("IDT set\n"); init_pic(); kprintf("PIC initialized\n"); init_pit(); kprintf("PIT initialized\n"); int result = init_ps2(); if (result == -1) { kprintf("PS2 init failed\n"); return; } kprintf("PS2 initialized\n"); if (!(mbi->flags & (1 << 6))) { return; } init_pmm((void*)mbi->mmap_addr, mbi->mmap_length); uint32_t mem_size = total_free_memory(); kprintf("Total available memory: %d MB\n", mem_size / 1024 / 1024); kprintf("__kernel_start: 0x%x\n", &__kernel_start); kprintf("__kernel_end: 0x%x\n", &__kernel_end); extern uint32_t page_directory[1024]; kprintf("page directory: 0x%x\n", &page_directory); uint32_t size = (&__kernel_end - &__kernel_start) / 1024; kprintf("kernel size: %dKB\n", size); init_page_tables(); kprintf("Page tables reloaded"); while(1); }