59 lines
1.4 KiB
Zig
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);
|
|
}
|