diff --git a/system/init/arch/x86_64/vm.zig b/system/init/arch/x86_64/vm.zig index 4fe9740..fdd9d46 100644 --- a/system/init/arch/x86_64/vm.zig +++ b/system/init/arch/x86_64/vm.zig @@ -15,7 +15,8 @@ const PhysFrame = struct { } pub fn virtualPointer(self: *const PhysFrame, comptime T: type, base: usize) *T { - return @ptrFromInt(self.virtualAddress(base)); + const virt = self.virtualAddress(base); + return @ptrFromInt(virt); } }; @@ -107,7 +108,7 @@ fn setUpParentPageTableEntry(mapper: *const MemoryMapper, pte: *PageTableEntry, const frame = PhysFrame{ .address = try kernel.allocFrame() }; pte.present = 1; pte.setAddress(frame.address); - getTable(pte, mapper.base).* = std.mem.zeroes(PageDirectory); + getTable(mapper, pte).* = std.mem.zeroes(PageDirectory); } if (hasFlag(flags, Flags.ReadWrite) == 1) pte.read_write = 1; if (hasFlag(flags, Flags.User) == 1) pte.user = 1; diff --git a/system/init/main.zig b/system/init/main.zig index 350a776..b402c07 100644 --- a/system/init/main.zig +++ b/system/init/main.zig @@ -8,7 +8,13 @@ export fn _start(base: u64, address: u64) callconv(.C) noreturn { kernel.print(address); kernel.print(@intFromPtr(mapper.directory)); - vm.map(&mapper, 0x6000000, kernel.allocFrame(), @intFromEnum(vm.Flags.ReadWrite) | @intFromEnum(vm.Flags.User)); + const phys = kernel.allocFrame() catch { + while (true) {} + }; + + vm.map(&mapper, 0x6000000, .{ .address = phys }, @intFromEnum(vm.Flags.ReadWrite) | @intFromEnum(vm.Flags.User)) catch { + while (true) {} + }; var counter: u64 = 0;