diff --git a/build.zig b/build.zig index 3f574f1..58bf2c6 100644 --- a/build.zig +++ b/build.zig @@ -2,15 +2,15 @@ const Builder = @import("std").build.Builder; const builtin = @import("builtin"); pub fn build(b: *Builder) void { - const kernel = b.addExecutable("kernel", "src/arch/x86/main.zig"); + const kernel = b.addExecutable("kernel", "src/main.zig"); kernel.addPackagePath("kernel", "src/index.zig"); kernel.addPackagePath("x86", "src/arch/x86/index.zig"); kernel.setOutputDir("build"); // kernel.addAssemblyFile("src/arch/x86/_start.s"); - // kernel.addAssemblyFile("src/arch/x86/gdt.s"); - // kernel.addAssemblyFile("src/arch/x86/isr.s"); - // kernel.addAssemblyFile("src/arch/x86/paging.s"); + kernel.addAssemblyFile("src/arch/x86/gdt.s"); + kernel.addAssemblyFile("src/arch/x86/isr.s"); + kernel.addAssemblyFile("src/arch/x86/paging.s"); kernel.setBuildMode(b.standardReleaseOptions()); kernel.setTarget(builtin.Arch.i386, builtin.Os.freestanding, builtin.Abi.none); diff --git a/src/arch/x86/index.zig b/src/arch/x86/index.zig index 8d3daa7..fe3dc58 100644 --- a/src/arch/x86/index.zig +++ b/src/arch/x86/index.zig @@ -1,5 +1,6 @@ usingnamespace @import("lib/io.zig"); usingnamespace @import("lib/instructions.zig"); +usingnamespace @import("main.zig"); const memory = @import("memory.zig"); const paging = @import("paging.zig"); diff --git a/src/index.zig b/src/index.zig index 7d340ec..89eed32 100644 --- a/src/index.zig +++ b/src/index.zig @@ -1,8 +1,8 @@ -usingnamespace @import("vga.zig"); -const main = @import("main.zig"); -const multiboot = @import("multiboot.zig"); -const console = @import("console.zig"); -const pci = @import("pci.zig"); -const ps2 = @import("ps2.zig"); +pub usingnamespace @import("vga.zig"); +pub const main = @import("main.zig"); +pub const multiboot = @import("multiboot.zig"); +pub const console = @import("console.zig"); +pub const pci = @import("pci.zig"); +pub const ps2 = @import("ps2.zig"); -const assert = @import("std").debug.assert; +pub const assert = @import("std").debug.assert; diff --git a/src/main.zig b/src/main.zig index 0a75f22..741a87e 100644 --- a/src/main.zig +++ b/src/main.zig @@ -1,9 +1,27 @@ usingnamespace @import("kernel"); + const x86 = @import("x86"); +export var stack_bytes: [16 * 1024]u8 align(16) linksection(".bss") = undefined; +const stack_bytes_slice = stack_bytes[0..]; + +// linker.ld entrypoint +export nakedcc fn _start() noreturn { + // ebx -> multiboot info + const info: u32 = asm volatile ("" + : [result] "={ebx}" (-> u32) + ); + // eax -> multiboot magic + const magic: u32 = asm volatile ("" + : [result] "={eax}" (-> u32) + ); + @newStackCall(stack_bytes_slice, kmain, magic, @intToPtr(*const multiboot.MultibootInfo, info)); + while (true) {} +} + // arch independant initialization -export fn kmain(magic: u32, info: *const MultibootInfo) noreturn { - assert(magic == MULTIBOOT_BOOTLOADER_MAGIC); +fn kmain(magic: u32, info: *const multiboot.MultibootInfo) noreturn { + assert(magic == multiboot.MULTIBOOT_BOOTLOADER_MAGIC); clear(); println("--- x86 initialization ---");