mirror of
https://github.com/ringtailsoftware/uvm32.git
synced 2026-06-06 06:53:39 +00:00
49 lines
1.1 KiB
Zig
49 lines
1.1 KiB
Zig
const std = @import("std");
|
|
extern fn console_write(data: [*]const u8, len: usize) void;
|
|
var wbuf:[4096]u8 = undefined;
|
|
var cw = ConsoleWriter.init(&wbuf);
|
|
const uvm = @import("uvm.zig");
|
|
|
|
pub const WriteError = error{ Unsupported, NotConnected };
|
|
|
|
pub const ConsoleWriter = struct {
|
|
interface: std.Io.Writer,
|
|
err: ?WriteError = null,
|
|
|
|
fn drain(w: *std.Io.Writer, data: []const []const u8, splat: usize) std.Io.Writer.Error!usize {
|
|
var ret: usize = 0;
|
|
|
|
const b = w.buffered();
|
|
uvm.print(b);
|
|
_ = w.consume(b.len);
|
|
|
|
for (data) |d| {
|
|
uvm.print(d);
|
|
ret += d.len;
|
|
}
|
|
|
|
const pattern = data[data.len - 1];
|
|
for (0..splat) |_| {
|
|
uvm.print(pattern);
|
|
ret += pattern.len;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
pub fn init(buf: []u8) ConsoleWriter {
|
|
return ConsoleWriter{
|
|
.interface = .{
|
|
.buffer = buf,
|
|
.vtable = &.{
|
|
.drain = drain,
|
|
},
|
|
},
|
|
};
|
|
}
|
|
};
|
|
|
|
pub fn getWriter() *std.Io.Writer {
|
|
return &cw.interface;
|
|
}
|
|
|