//https://www.gnu.org/software/grub/manual/multiboot/multiboot.html#Boot-information-format #define FOOLOS_MODULE_NAME "multiboot" #include "multiboot.h" #include "driver/vesa.h" #include "lib/logger/log.h" multiboot_information* get_multiboot(uint32_t eax, uint32_t ebx) { if(eax!=0x2badb002)panic(FOOLOS_MODULE_NAME,"EAX was not set properly by your bootlaoder!"); multiboot_information *info; info=ebx; log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"multiboot flags: 0x%08X",info->flags); if(info->flags&&1<<0) { log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"[0] mem_lower: %d KB",info->mem_lower); log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"[0] mem_upper: %d KB",info->mem_upper); } if(info->flags&&1<<1) { log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"[1] boot-device 0x%08X",info->boot_device); } if(info->flags&&1<<2) { log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"[2] cmdline: \"%s\"",info->cmdline); } if(info->flags&&1<<3) { log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"[3] loaded modules count: %d",info->mods_count); } if(info->flags&&1<<4) { log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"[4/5] a.out kernel image symbols found"); } if(info->flags&&1<<5) { log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"[4/5] ELF table: %d entries (sized %d) at 0x%08X",info->syms[0],info->syms[1],info->syms[2]); } if(info->flags&&1<<6) { log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"[6] Found memory map"); } if(info->flags&&1<<7) { log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"[7] Found Drives map"); } if(info->flags&&1<<8) { log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"[8] ROM Configuration Table at: 0x%08X",info->config_table); } if(info->flags&&1<<9) { log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"[9] Loaded by: \"%s\"",info->boot_loader_name); } if(info->flags&&1<<10) { log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"[10] APM Table present."); } if(info->flags&&1<<11) { log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"[11] VBE control info: 0x%08X",info->vbe_control_info); log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"[11] VBE mode info: 0x%08X",info->vbe_mode_info); log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"[11] VBE current mode (spec V3.0): 0x%08X",info->vbe_mode); } if(info->flags&&1<<12) { log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"[12] Framebuffer (w:%d h:%d bpp:%d) at addr=0x%08X",info->framebuffer_width,info->framebuffer_height,info->framebuffer_bpp,info->framebuffer_addr); } return info; }