diff --git a/kernel/include/sys/Syscall.h b/kernel/include/sys/Syscall.h index 0493dbb3..dcbd18d9 100644 --- a/kernel/include/sys/Syscall.h +++ b/kernel/include/sys/Syscall.h @@ -8,6 +8,8 @@ #define SYS_write 3 #define SYS_paint 4 #define SYS_rand 5 +#define SYS_version 6 +#define SYS_gettid 7 namespace Syscall { @@ -19,4 +21,6 @@ void sys_yield(Context* context); void sys_sleep(Context* context, uint64_t ms); void sys_write(Context* context, const char* addr, size_t size); void sys_paint(Context* context, uint64_t x, uint64_t y, uint64_t w, uint64_t h, uint64_t col); -void sys_rand(Context* context); \ No newline at end of file +void sys_rand(Context* context); +void sys_version(Context* context, char* buffer, size_t max); +void sys_gettid(Context* context); \ No newline at end of file diff --git a/kernel/src/sys/Syscall.cpp b/kernel/src/sys/Syscall.cpp index 09417996..99a7c4fa 100644 --- a/kernel/src/sys/Syscall.cpp +++ b/kernel/src/sys/Syscall.cpp @@ -21,6 +21,8 @@ void Syscall::entry(Context* context) break; case SYS_paint: sys_paint(context, context->rdi, context->rsi, context->r10, context->r8, context->r9); break; case SYS_rand: sys_rand(context); break; + case SYS_version: sys_version(context, (char*)context->rdi, context->rsi); break; + case SYS_gettid: sys_gettid(context); break; default: context->rax = -1; break; } } \ No newline at end of file diff --git a/kernel/src/sys/sched.cpp b/kernel/src/sys/sched.cpp index b198cad1..3681d520 100644 --- a/kernel/src/sys/sched.cpp +++ b/kernel/src/sys/sched.cpp @@ -18,4 +18,9 @@ void sys_sleep(Context* context, uint64_t ms) task->task_sleep = ms; task->state = task->Sleeping; Scheduler::task_yield(context); +} + +void sys_gettid(Context* context) +{ + context->rax = Scheduler::current_task()->id; } \ No newline at end of file diff --git a/kernel/src/sys/version.cpp b/kernel/src/sys/version.cpp new file mode 100644 index 00000000..b5b21f8a --- /dev/null +++ b/kernel/src/sys/version.cpp @@ -0,0 +1,8 @@ +#include "config.h" +#include "interrupts/Context.h" +#include "std/stdio.h" + +void sys_version(Context* context, char* buffer, size_t max) +{ + context->rax = snprintf(buffer, max, "moon %s", moon_version()); +} \ No newline at end of file