const uvm32 = @cImport({
    @cDefine("USE_MAIN", "1");
    @cInclude("uvm32_target.h");
});
const std = @import("std");

pub inline fn syscall(id: u32, param1: u32, param2: u32) u32 {
    var val: u32 = undefined;
    asm volatile ("ecall"
        : [val] "={a1}" (val),
        : [param1] "{a0}" (param1), [param2] "{a1}" (param2),
          [id] "{a7}" (id),
        : .{ .memory = true });
    return val;
}

pub inline fn println(val: [:0]const u8) void {
    _ = syscall(uvm32.UVM32_SYSCALL_PRINTLN, @intFromPtr(val.ptr), 0);
}

pub inline fn yield() void {
    _ = syscall(uvm32.UVM32_SYSCALL_YIELD, 0, 0);
}

pub inline fn putc(c:u8) void {
    _ = syscall(uvm32.UVM32_SYSCALL_PUTC, c, 0);
}

