diff options
author | Clyne Sullivan <clyne@bitgloo.com> | 2024-10-02 21:00:53 -0400 |
---|---|---|
committer | Clyne Sullivan <clyne@bitgloo.com> | 2024-10-02 21:00:53 -0400 |
commit | 77631785edfd36a46f062dfd8791a80037113d2d (patch) | |
tree | faa3ab5a89837ca1518800ccc34d930b06d84f44 | |
parent | 71eecf3849a47173247a083ff4a14c73bb509c89 (diff) |
-rw-r--r-- | src/ziggie.zig | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/src/ziggie.zig b/src/ziggie.zig index c6747b9..a986a47 100644 --- a/src/ziggie.zig +++ b/src/ziggie.zig @@ -1,26 +1,24 @@ pub inline fn outb(port: u16, value: u8) void { asm volatile ("outb %[value], %[port]" - : - : [port] "N{dx}" (port), - [value] "{al}" (value), + :: [port] "N{dx}" (port), [value] "{al}" (value), ); } +const VGACell = packed struct { + char: u8, + foreground: u4 = 0xf, + background: u4 = 0x0, +}; + const VGATerminal = struct { const width = 80; const height = 25; - const vram: *[width * height]u16 = @ptrFromInt(0xB8000); + const vram: *[width * height]VGACell = @ptrFromInt(0xB8000); offset: u16 = 0, - foreground: u8 = 0x07, - background: u8 = 0x00, pub fn put(self: *VGATerminal, ch: u8) void { - const cell = ch - | (@as(u16, self.foreground) << 8) - | (@as(u16, self.background) << 12); - - vram[self.offset] = cell; + vram[self.offset] = VGACell{ .char = ch }; self.offset += 1; } @@ -35,13 +33,14 @@ const VGATerminal = struct { pub fn updatecursor(self: VGATerminal) void { outb(0x03d4, 0x0f); - _ = self; + outb(0x03d5, @intCast(self.offset & 0xFF)); + outb(0x03d4, 0x0e); + outb(0x03d5, @intCast(self.offset >> 8)); } }; export fn zigit() void { var vga = VGATerminal{}; - vga.foreground = 0x0f; vga.put('H'); vga.put('i'); vga.updatecursor(); |