#include #include #include #include #include #include #include #include #include #include #include #include #include #include void kernel_main(char *cmdline); void i386_entry(uint32_t mboot_magic, struct mboot_info *header) { map_page(0xB8000, (uintptr_t)VGA_MEMORY, PD_RW); fb_init(); if (mboot_magic != MBOOT_LOADER_MAGIC) { disable_ints(); panic("Not booted with multiboot bootloader"); } map_page(0x9000, 0x9000, PD_RW); if (!(header->flags >> 6 & 0x1)) { disable_ints(); panic("Physical memory map not provided by bootloader"); } char cmdline[4096]; map_page(header->cmdline, PAGE_TMP_MAP, 0); memcpy(cmdline, (char*)PAGE_TMP_MAP, strlen((char*)PAGE_TMP_MAP)); unmap_page(PAGE_TMP_MAP); pfa_init(header); gdt_install(); idt_install(); paging_init(); map_page(0xB8000, (uintptr_t)VGA_MEMORY, PD_RW); pic_remap(); timer_init(); enable_ints(); kernel_main(cmdline); while (1); }