57 lines
1.2 KiB
D
57 lines
1.2 KiB
D
/**
|
|
* 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();
|
|
}
|
|
}
|