#include "aplos.h" static void welcome(void); static void print_memmap(struct boot_info *); static void print_size(uint64_t); void main(struct boot_info *info) { setup_descriptors(); screen_init(&info->framebuffer); welcome(); print(u8"CPU count: %u64\n", cpu_count()); print_memmap(info); /* Uncomment lines below to trigger a page fault (to see if the interrupts are setup correctly) */ // uint64_t *silly = (uint64_t *)0x1234; // print(u8"Fun: %u64\n", *silly); } static void welcome(void) { print(u8"Starting ☺☻☺☻☺☻☺☻☺☻\n"); } static void print_memmap(struct boot_info *info) { print(u8"Usable memory: "); uint64_t total = 0; for(uint64_t i = 0; i < info->memmap_count; i++) total += info->memmaps[i].size; print_size(total); print(u8"\n"); for(uint64_t i = 0; i < info->memmap_count; i++){ struct memmap *m = &info->memmaps[i]; print(u8"%p - %p (", m->start, m->start + m->size); print_size(m->size); print(u8")\n"); } } static void print_size(uint64_t size) { uint64_t gb, mb, kb, b; gb = size >> 30; size -= gb << 30; mb = size >> 20; size -= mb << 20; kb = size >> 10; size -= kb << 10; b = size; int printed = 0; #define P(what, spec, force) \ if(what || (force && !printed)){ \ if(printed) \ print(u8" + "); \ printed = 1; \ print(u8"%u64 " spec, what); \ } P(gb, "GB", 0); P(mb, "MB", 0); P(kb, "KB", 0); P(b, "B", 1); }