+2
-1
assets/limine.conf
+2
-1
assets/limine.conf
+24
-14
build.zig
+24
-14
build.zig
···const ukernel_inst = b.addInstallFile(ukernel_artifact.getEmittedBin(), arch.kernelExeName());···const loader_install = b.addInstallFileWithDir(loader_path, .{ .custom = "EFI/BOOT" }, "BOOTX64.EFI");const config_install = b.addInstallFileWithDir(b.path("assets/limine.conf"), .{ .custom = "limine" }, "limine.conf");+const qemu_cmd = b.addSystemCommand(&.{ "qemu-system-x86_64", "-smp", "4", "-m", "4G", "-monitor", "stdio", "-drive", "format=raw,file=fat:rw:zig-out", "-drive", "if=pflash,format=raw,readonly=on,file=zig-out/OVMF_CODE_X64.fd", "-drive", "if=pflash,format=raw,file=zig-out/OVMF_VARS_X64.fd" });-const qemu_cmd = b.addSystemCommand(&.{ "qemu-system-x86_64", "-smp", "4", "-m", "4G", "-monitor", "stdio", "-drive", "format=raw,file=fat:rw:zig-out", "-drive", "if=pflash,format=raw,readonly=on,file=zig-out/OVMF_CODE_X64.fd", "-drive", "if=pflash,format=raw,file=zig-out/OVMF_VARS_X64.fd" });
+3
-4
build.zig.zon
+3
-4
build.zig.zon
···-.url = "git+https://codeberg.org/Limine/Limine?ref=v9.x-binary#acf1e35c4685dba7ef271013db375a727c340ff7",+.url = "git+https://codeberg.org/Limine/Limine?ref=v10.x-binary#648e33afd153bdbf780ba123e45997428796395d",
+2
components/root_server/build.zig
+2
components/root_server/build.zig
···const arch = b.option(build_helpers.Architecture, "arch", "The target root_server architecture") orelse .amd64;···
+29
-4
components/root_server/src/main.zig
+29
-4
components/root_server/src/main.zig
···
+2
-2
components/root_server/src/os.zig
+2
-2
components/root_server/src/os.zig
···
+3
-4
components/ukernel/arch/aarch64/boot.zig
+3
-4
components/ukernel/arch/aarch64/boot.zig
············
+66
-261
components/ukernel/arch/amd64/boot.zig
+66
-261
components/ukernel/arch/amd64/boot.zig
······pub export var mp: limine.SmpMpFeature.MpRequest linksection(".limine_reqs") = .{ .flags = .{ .x2apic = true } };······-const shellcode = [_]u8{ 0x48, 0xBF, 0xE1, 0xAB, 0xDB, 0xBA, 0xB5, 0x00, 0x6B, 0xB1, 0x48, 0xBE, 0x06, 0x42, 0x69, 0x20, 0x94, 0x06, 0x42, 0x69, 0x0F, 0x05, 0xBF, 0x11, 0xCA, 0x00, 0x00, 0xBE, 0x69, 0x69, 0x69, 0x69, 0x0F, 0x05, 0xEB, 0xFE };-const star_value: u64 = 0 | @as(u64, arch.structures.gdt.StandardGdt.selectors.kernel_code) << 32 | (@as(u64, arch.structures.gdt.StandardGdt.selectors.tss_desc + 8) | 3) << 48;+const tasks_buf: [*]arch.structures.Task = @ptrFromInt(common.init_data.bootmem.allocMem(std.heap.pageSize()) catch {+const tasks_scratch: []arch.structures.Task = tasks_buf[0 .. std.heap.pageSize() / @sizeOf(arch.structures.Task)];-log.info("usercode64 GDT 0x{x}, userdata64 GDT 0x{x}", .{ arch.structures.gdt.StandardGdt.selectors.user_code, arch.structures.gdt.StandardGdt.selectors.user_data });···-pub fn page_fault(stack_frame: *arch.structures.Idt.InterruptStackFrame, err_code_u64: u64) callconv(.{ .x86_64_interrupt = .{} }) void {-log.err("PAGE FAULT @ 0x{x:0>16}, code 0x{x}!!!!!!!!!!!", .{ stack_frame.instruction_pointer, err_code.val() });-pub fn breakpoint_handler(stack_frame: *Idt.InterruptStackFrame) callconv(.{ .x86_64_interrupt = .{} }) void {-log.warn("Breakpoint @ 0x{x:0>16}, returning execution...", .{stack_frame.instruction_pointer});-pub fn gpf(stack_frame: *Idt.InterruptStackFrame, err_code: u64) callconv(.{ .x86_64_interrupt = .{} }) void {-log.warn("gpf @ 0x{x:0>16} ERR CODE {}, returning execution...", .{ stack_frame.instruction_pointer, err_code });-pub fn double_fault(stack_frame: *Idt.InterruptStackFrame, err_code: u64) callconv(.{ .x86_64_interrupt = .{} }) noreturn {-log.err("FATAL DOUBLE FAULT @ 0x{x:0>16}, code 0x{x}!!!!!!!!!!!", .{ stack_frame.instruction_pointer, err_code });······-const buf: [*]u8 = @ptrFromInt(common.init_data.bootmem.allocMem(total_required_size) catch |err| {-const tss_buf: [*]Tss = @ptrCast(@alignCast(buf[gdt_size * cpu_count ..][0 .. tss_size * cpu_count]));
+91
components/ukernel/arch/amd64/instructions/cpuid.zig
+91
components/ukernel/arch/amd64/instructions/cpuid.zig
···
+10
components/ukernel/arch/amd64/instructions/root.zig
+10
components/ukernel/arch/amd64/instructions/root.zig
-5
components/ukernel/arch/amd64/instructions.zig
-5
components/ukernel/arch/amd64/instructions.zig
+370
components/ukernel/arch/amd64/interrupts/apic.zig
+370
components/ukernel/arch/amd64/interrupts/apic.zig
···+pub fn setDivideConfigurationRegister(lapic: LAPIC, register: DivideConfigurationRegister) void {+arch.interrupts.idt.add_handler(.{ .interrupt = 0xFF }, u64, spurious_interrupt_handler, 0, 0);
+314
components/ukernel/arch/amd64/interrupts/idt.zig
+314
components/ukernel/arch/amd64/interrupts/idt.zig
···+++ std.fmt.comptimePrint("\nmov {}(%rsp), %rcx\n", .{@offsetOf(InterruptFrame(u64), "int_num")}) +++++ std.fmt.comptimePrint("\nadd ${}, %rsp\n", .{@offsetOf(InterruptFrame(u64), "regs")}) ++ pop_instrs +++.double_fault, .invalid_tss, .segment_not_present, .general_protection_fault, .page_fault, .security_fault => true,+pub fn add_handler(interrupt: Interrupt, comptime E: type, handler: InterruptHandler(E), dpl: u2, ist: u3) void {
+70
components/ukernel/arch/amd64/interrupts/pic.zig
+70
components/ukernel/arch/amd64/interrupts/pic.zig
···
+38
components/ukernel/arch/amd64/interrupts/pit.zig
+38
components/ukernel/arch/amd64/interrupts/pit.zig
···
+175
components/ukernel/arch/amd64/interrupts/root.zig
+175
components/ukernel/arch/amd64/interrupts/root.zig
···+const star_value: u64 = 0 | @as(u64, arch.structures.gdt.StandardGdt.selectors.kernel_code) << 32 | (@as(u64, arch.structures.gdt.StandardGdt.selectors.tss_desc + 8) | 3) << 48;+std.log.err("RAX: 0x{x:0>16}, RBX: 0x{x:0>16}, RCX: 0x{x:0>16}, RDX: 0x{x:0>16}", .{ frame.regs.rax, frame.regs.rbx, frame.regs.rcx, frame.regs.rdx });+std.log.err("RSI: 0x{x:0>16}, RDI: 0x{x:0>16}, RBP: 0x{x:0>16}, RSP: 0x{x:0>16}", .{ frame.regs.rsi, frame.regs.rdi, frame.regs.rbp, frame.rsp });+std.log.err("R8: 0x{x:0>16}, R9: 0x{x:0>16}, R10: 0x{x:0>16}, R11: 0x{x:0>16}", .{ frame.regs.r8, frame.regs.r9, frame.regs.r10, frame.regs.r11 });+std.log.err("R12: 0x{x:0>16}, R13: 0x{x:0>16}, R14: 0x{x:0>16}, R15: 0x{x:0>16}", .{ frame.regs.r12, frame.regs.r13, frame.regs.r14, frame.regs.r15 });+std.log.err("RFL: 0x{x:0>16}, RIP: 0x{x:0>16}, CS: 0x{x:0>16}, SS: 0x{x:0>16}", .{ frame.eflags, frame.rip, frame.cs, frame.ss });+std.log.err("Unhandled interrupt (0x{x} : {s})!!!", .{ frame.int_num.interrupt, exception_name });+pub fn general_protection_fault(stack_frame: *idt.InterruptFrame(idt.SelectorErrorCode)) callconv(idt.CallConv) void {+idt.add_handler(.{ .exception = .general_protection_fault }, idt.SelectorErrorCode, arch.interrupts.general_protection_fault, 0, 0);+log.info("usercode64 GDT 0x{x}, userdata64 GDT 0x{x}", .{ arch.structures.gdt.StandardGdt.selectors.user_code, arch.structures.gdt.StandardGdt.selectors.user_data });
+228
-154
components/ukernel/arch/amd64/mm/paging.zig
+228
-154
components/ukernel/arch/amd64/mm/paging.zig
······+pub fn encode_memory_type(_: *Self, pte: *PageTable.Entry, mapping_handle: MappingHandle) void {pub fn make_child_table(self: *const Self, pte: *PageTable.Entry, perms: Perms) !TableHandle {+pub fn make_child_mapping(self: *const Self, pte: *PageTable.Entry, paddr: ?u64, perms: Perms, memory_type: MemoryType) !MappingHandle {+pub fn page_fault_handler(stack_frame: *idt.InterruptFrame(u64)) callconv(idt.CallConv) void {+std.log.err("Error CR2: 0x{x:0>16}, Error Code: 0x{x:0>16}", .{ arch.registers.ControlRegisters.Cr2.read(), stack_frame.error_code });
+62
components/ukernel/arch/amd64/port.zig
+62
components/ukernel/arch/amd64/port.zig
···
+46
-38
components/ukernel/arch/amd64/registers.zig
+46
-38
components/ukernel/arch/amd64/registers.zig
···
+54
-15
components/ukernel/arch/amd64/root.zig
+54
-15
components/ukernel/arch/amd64/root.zig
···+const buf: [*]u8 = @ptrFromInt(common.init_data.bootmem.allocMem(total_required_size) catch |err| {+const tss_buf: [*]Tss = @ptrCast(@alignCast(buf[gdt_size * cpu_count ..][0 .. tss_size * cpu_count]));
-170
components/ukernel/arch/amd64/structures/Idt.zig
-170
components/ukernel/arch/amd64/structures/Idt.zig
···
+5
-5
components/ukernel/arch/amd64/structures/gdt.zig
+5
-5
components/ukernel/arch/amd64/structures/gdt.zig
···············
+24
-1
components/ukernel/arch/amd64/structures/root.zig
+24
-1
components/ukernel/arch/amd64/structures/root.zig
···
+59
components/ukernel/arch/amd64/tsc.zig
+59
components/ukernel/arch/amd64/tsc.zig
···
+14
-20
components/ukernel/build.zig
+14
-20
components/ukernel/build.zig
······
+5
-1
components/ukernel/build.zig.zon
+5
-1
components/ukernel/build.zig.zon
···+.url = "git+https://tangled.org/@sydney.blue/Queue.zig?ref=dev#6c0760e8a233c1d59554a40a87f0ef293a9697f3",
+17
-7
components/ukernel/common/aux.zig
+17
-7
components/ukernel/common/aux.zig
···+const canvas: [*]u8 = @ptrFromInt(common.init_data.bootmem.allocMem(fb.width * fb.height * fb.bypp) catch @panic("Couldn't allocate a canvas"));······
+51
components/ukernel/common/loader.zig
+51
components/ukernel/common/loader.zig
···+const memsz_pages = std.mem.alignForward(usize, vaddr_shift + entry.p_memsz, std.heap.pageSize());
-1
components/ukernel/common/mm/bootmem.zig
-1
components/ukernel/common/mm/bootmem.zig
+35
-15
components/ukernel/common/mm/paging.zig
+35
-15
components/ukernel/common/mm/paging.zig
···············-if (domain.ptr == vaddr.* and domain.len <= size.* and arch.mm.paging.can_map_at(table.level - 1) and is_aligned(vaddr.*, paddr, table.level - 1)) {+if (domain.ptr == vaddr.* and domain.len <= size.* and context.can_map_at(table.level - 1) and is_aligned(vaddr.*, paddr, table.level - 1)) {···
+81
components/ukernel/common/root.zig
+81
components/ukernel/common/root.zig
···
+16
components/ukernel/common/scheduler.zig
+16
components/ukernel/common/scheduler.zig
···
+1
-2
components/ukernel/deps/console/build.zig
+1
-2
components/ukernel/deps/console/build.zig
+4
-9
components/ukernel/deps/console/build.zig.zon
+4
-9
components/ukernel/deps/console/build.zig.zon
···
-195
components/ukernel/deps/console/console.zig
-195
components/ukernel/deps/console/console.zig
···-var offset: u64 = (cy * self.font.hdr.height * self.fb.pitch) + (cx * (self.font.hdr.width + 0) * self.fb.bypp);-return (((red * mult) / div) << red_shift) | (((green * mult) / div) << green_shift) | (((blue * mult) / div) << blue_shift);-const prev_line = self.fb.address[(i - amount) * h * self.fb.pitch ..][0 .. h * self.fb.pitch];-// const last_line = self.fb.address[(num_lines - amount) * h * self.fb.pitch .. (num_lines) * h * self.fb.pitch];-const last_line = self.fb.address[(num_lines - amount) * h * self.fb.pitch ..][0 .. amount * h * self.fb.pitch];
+24
components/ukernel/deps/console/flake.lock
+24
components/ukernel/deps/console/flake.lock
···+"url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre861040.6d7ec06d6868/nixexprs.tar.xz?rev=6d7ec06d6868ac6d94c371458fc2391ded9ff13d"
+23
components/ukernel/deps/console/flake.nix
+23
components/ukernel/deps/console/flake.nix
···
-24
components/ukernel/deps/console/fonts/LICENSE.spleen
-24
components/ukernel/deps/console/fonts/LICENSE.spleen
···
components/ukernel/deps/console/fonts/bold16x32.psf
components/ukernel/deps/console/fonts/bold16x32.psf
This is a binary file and will not be displayed.
components/ukernel/deps/console/fonts/bold8x16.psf
components/ukernel/deps/console/fonts/bold8x16.psf
This is a binary file and will not be displayed.
components/ukernel/deps/console/fonts/spleen-12x24.psf
components/ukernel/deps/console/fonts/spleen-12x24.psf
This is a binary file and will not be displayed.
components/ukernel/deps/console/fonts/spleen-16x32.psf
components/ukernel/deps/console/fonts/spleen-16x32.psf
This is a binary file and will not be displayed.
components/ukernel/deps/console/fonts/spleen-32x64.psf
components/ukernel/deps/console/fonts/spleen-32x64.psf
This is a binary file and will not be displayed.
components/ukernel/deps/console/fonts/spleen-5x8.psf
components/ukernel/deps/console/fonts/spleen-5x8.psf
This is a binary file and will not be displayed.
components/ukernel/deps/console/fonts/spleen-6x12.psf
components/ukernel/deps/console/fonts/spleen-6x12.psf
This is a binary file and will not be displayed.
components/ukernel/deps/console/fonts/spleen-8x16.psf
components/ukernel/deps/console/fonts/spleen-8x16.psf
This is a binary file and will not be displayed.
-53
components/ukernel/deps/console/psf2.zig
-53
components/ukernel/deps/console/psf2.zig
···
+24
components/ukernel/deps/console/src/fonts/LICENSE.spleen
+24
components/ukernel/deps/console/src/fonts/LICENSE.spleen
···
components/ukernel/deps/console/src/fonts/spleen-12x24.psf
components/ukernel/deps/console/src/fonts/spleen-12x24.psf
This is a binary file and will not be displayed.
+39
components/ukernel/deps/console/src/psf2.zig
+39
components/ukernel/deps/console/src/psf2.zig
···+const startpos: u64 = @as(u64, hdr.header_size) + @as(u64, ch) * @as(u64, hdr.bytes_per_glyph);+if (self.fontdata.len < startpos + @as(u64, hdr.bytes_per_glyph)) return error.InvalidCharacter;
+290
components/ukernel/deps/console/src/root.zig
+290
components/ukernel/deps/console/src/root.zig
···+const src_buf = self.canvas[canvas_pitch * glyph_height * start_line ..][0 .. canvas_pitch * glyph_height * num_lines];+const dst_buf = byte_fb[self.fb.pitch * glyph_height * start_line ..][0 .. self.fb.pitch * glyph_height * num_lines];+fn putchar(self: *const Console, ch: u8, x_pos: usize, y_pos: usize, fg_val: u32, bg_val: u32) !void {+var offset: usize = (y_pos * @as(usize, hdr.height) * canvas_pitch) + (x_pos * @as(usize, hdr.width) * self.fb.bypp);+const line_value: u32 = std.mem.readVarInt(u32, glyph[glyph_y * bytes_per_line ..][0..bytes_per_line], .big);+const src_buf = self.canvas[canvas_pitch * glyph_height ..][0 .. canvas_pitch * glyph_height * (self.y_chrs_max - 1)];+const last_line = self.canvas[canvas_pitch * glyph_height * (self.y_chrs_max - 1) ..][0 .. canvas_pitch * glyph_height];