pub inline fn inb(port: u16) u8 { return asm volatile ("inb %[port], %[result]" : [result] "={al}" (-> u8), : [port] "{dx}" (port), ); } pub fn outb(port: u16, data: u8) void { asm volatile ("outb %[data], %[port]" : : [port] "{dx}" (port), [data] "{al}" (data), ); } pub fn write(data: []const u8) void { const len: u8 = @intCast(data.len & 0xFF); outb(0xe9, 0x30 + len); for (0..len) |i| { outb(0xe9, 0x30); outb(0xe9, data[i]); } }