Files
zing/user/main.zig
T
2025-03-27 23:37:11 +02:00

59 lines
1.4 KiB
Zig

pub const arch = @import("arch.zig");
pub const syscall = @import("syscall.zig");
pub const log = @import("log.zig");
const abi = @import("abi");
const Handle = abi.Handle;
fn debug_write(handle: Handle, message: []const u8) void {
_ = syscall.send(handle, &.{
@intFromPtr(message.ptr),
message.len,
0,
0,
0,
});
}
fn exit_process(handle: Handle, code: u32) noreturn {
_ = syscall.send(handle, &.{
@intFromEnum(abi.ProcessObjectAction.ZO_process_exit),
code,
0,
0,
0,
});
unreachable;
}
fn allocate_memory(handle: Handle, count: usize) u64 {
var output: [5]usize = undefined;
// TODO error code
_ = syscall.sendrecv(
handle,
&.{
@intFromEnum(abi.PhysicalMemoryObjectAction.ZO_physical_memory_allocate),
count,
0,
0,
0,
},
&output,
);
return output[0];
}
export fn _start(arg: usize) linksection(".text.entry") callconv(.C) noreturn {
// TODO make the kernel provide those dynamically somehow
const SELF_PROCESS_HANDLE: Handle = @enumFromInt(1);
const PHYSICAL_MEMORY_HANDLE: Handle = @enumFromInt(2);
const DEBUG_HANDLE: Handle = @enumFromInt(3);
_ = arg;
const mem = allocate_memory(PHYSICAL_MEMORY_HANDLE, 8);
_ = mem;
debug_write(DEBUG_HANDLE, "Hello!!!");
exit_process(SELF_PROCESS_HANDLE, 4321);
}