#include "kernel.h" #define GB2 262144 extern "C" void kernel_main (void); extern "C" void early_main(unsigned long magic, unsigned long addr){ /** initialize terminal interface */ kterm_init(); if (magic != MULTIBOOT_BOOTLOADER_MAGIC){ printf("Invalid magic number: 0x%x\n", magic); return; } CheckMBT( (multiboot_info_t *) addr); multiboot_info_t* mbt = (multiboot_info_t*) addr; /* Are mmap_* valid? */ if (CHECK_FLAG(mbt->flags, 6)){ PhysicalMemoryManager_initialise( mbt->mmap_addr, GB2/* Seriously dangerous hardcoded memory value*/); PhysicalMemoryManager_initialise_available_regions(mbt->mmap_addr, mbt->mmap_addr + mbt->mmap_length); PhysicalMemoryManager_deinitialise_kernel(); extern uint8_t* kernel_begin; extern uint8_t* kernel_end; printf("Kernel MemoryMap:\n"); printf("kernel: 0x%x - 0x%x\n", &kernel_begin , &kernel_end); } initGDT(); init_idt(); // Enable interrupts asm volatile("STI"); kernel_main(); } extern "C" void kernel_main (void) { init_serial(); pit_initialise(); while (true){ //Read time indefinetely read_rtc(); printf( "UTC time: %02d-%02d-%02d %02d:%02d:%02d (Ticks: %06d) [ Formatted as YY-MM-DD h:mm:ss]\r" ,year, month, day, hour, minute, second, pit_tick); delay(1000); } }