Kernel/Userspace: Start initial work on userspace and syscalls
This commit is contained in:
28
kernel/userspace/userspace.cpp
Normal file
28
kernel/userspace/userspace.cpp
Normal file
@@ -0,0 +1,28 @@
|
||||
#include <BAN/Formatter.h>
|
||||
#include <kernel/Syscall.h>
|
||||
|
||||
#define USERSPACE __attribute__((section(".userspace")))
|
||||
|
||||
USERSPACE int syscall(int syscall, void* arg1 = nullptr, void* arg2 = nullptr, void* arg3 = nullptr)
|
||||
{
|
||||
int ret;
|
||||
asm volatile("int $0x80" : "=a"(ret) : "a"(syscall), "b"(arg1), "c"(arg2), "d"(arg3) : "memory");
|
||||
return ret;
|
||||
}
|
||||
|
||||
USERSPACE void user_putc(char ch)
|
||||
{
|
||||
syscall(SYS_PUTC, (void*)(uintptr_t)ch);
|
||||
}
|
||||
|
||||
USERSPACE void print(const char* str)
|
||||
{
|
||||
while (*str)
|
||||
user_putc(*str++);
|
||||
}
|
||||
|
||||
USERSPACE void userspace_entry()
|
||||
{
|
||||
BAN::Formatter::println(user_putc, "Hello {}!", "World");
|
||||
for (;;);
|
||||
}
|
||||
Reference in New Issue
Block a user