// SPDX-FileCopyrightText: 2024 Himbeer // // SPDX-License-Identifier: AGPL-3.0-or-later const std = @import("std"); const instructions = @import("../instructions.zig"); const sbi = @import("../sbi.zig"); const ExtId = enum(usize) { SetTimer = 0x00, ConsolePutchar = 0x01, ConsoleGetchar = 0x02, ClearIpi = 0x03, SendIpi = 0x04, RemoteFenceI = 0x05, RemoteSFenceVma = 0x06, RemoteSFenceVmaAsid = 0x07, Shutdown = 0x08, }; pub const Writer = std.io.Writer(void, sbi.Error, write); fn write(_: void, bytes: []const u8) !usize { for (bytes) |byte| { const ret = instructions.ecall(@intFromEnum(ExtId.ConsolePutchar), 0, byte, 0, 0); if (ret.err != 0) { return sbi.errorFromCode(ret.err); } } return bytes.len; } pub fn writer() !Writer { if (!try sbi.probeExt(@intFromEnum(ExtId.ConsolePutchar))) { return sbi.Error.NotSupported; } return .{ .context = {} }; }