/** * HULK, the HOS Ultra Light Kernel. */ module hulk.hulk; import hulk.header; import hulk.fb; import hulk.console; import hos.memory; import ldc.attributes; import hulk.kfont; import hulk.klog; import hulk.hurl; import hulk.hippo; import hulk.pci; import hulk.gdt; import hulk.idt; import hos.cpu; import ldc.llvmasm; extern extern(C) __gshared ubyte _hulk_total_size; @(ldc.attributes.section(".hulk_header")) private __gshared HulkHeader hulk_header = { &_hulk_total_size, /* total_size */ &hulk_start, /* entry */ 16u * 1024u, /* stack_size */ HULK_VIRTUAL_BASE_ADDRESS, /* virt_base */ HULK_VIRTUAL_STACK_TOP_ADDRESS, /* virt_stack_top */ HULK_VIRTUAL_FRAMEBUFFER_ADDRESS, /* virt_fb_buffer */ }; /** * HULK entry point. */ void hulk_start() { cli(); gdt.initialize(); idt.initialize(); fb.initialize(cast(uint *)HULK_VIRTUAL_FRAMEBUFFER_ADDRESS, hulk_header.bootinfo.fb.width, hulk_header.bootinfo.fb.height, hulk_header.bootinfo.fb.stride); console.initialize(); console.clear(); klog.initialize(); klog.writefln("Welcome to HULK, the HOS UltraLight Kernel!"); hippo.initialize(&hulk_header); pci.initialize(); sti(); for (;;) { hlt(); } }