const console = @import("console.zig"); const ALIGN = 1 << 0; const MEMINFO = 1 << 1; const MAGIC = 0x1BADB002; const FLAGS = ALIGN | MEMINFO; const MultibootHeader = extern struct { magic: i32, flags: i32, checksum: i32, }; export const multiboot align(4) linksection(".multiboot") = MultibootHeader{ .magic = MAGIC, .flags = FLAGS, .checksum = -(MAGIC + FLAGS), }; export var stack: [16 * 1024]u8 align(16) linksection(".bss") = undefined; const stack_bytes_slice = stack[0..]; export fn _start() callconv(.Naked) noreturn { // @call(.{ .stack = stack_bytes_slice }, kmain, .{}); asm volatile ( \\ mov %[stk], %rsp \\ mov %rsp, %rbp : : [stk] "{rcx}" (@intFromPtr(&stack) + @sizeOf(@TypeOf(stack))), ); asm volatile ("call kmain"); while (true) {} } export fn kmain() void { console.initialize(); console.puts("Hello world!"); }