aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClyne Sullivan <clyne@bitgloo.com>2024-10-02 21:00:53 -0400
committerClyne Sullivan <clyne@bitgloo.com>2024-10-02 21:00:53 -0400
commit77631785edfd36a46f062dfd8791a80037113d2d (patch)
treefaa3ab5a89837ca1518800ccc34d930b06d84f44
parent71eecf3849a47173247a083ff4a14c73bb509c89 (diff)
zig fixesHEADmain
-rw-r--r--src/ziggie.zig25
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();