#include "sys/Syscall.h" #include "errno.h" #include "io/Serial.h" #include "thread/Scheduler.h" void Syscall::entry(Context* context) { asm volatile("cli"); switch (context->rax) { case SYS_exit: // sys_exit sys_exit(context, (int)context->rdi); break; case SYS_yield: // sys_yield sys_yield(context); break; case SYS_sleep: // sys_sleep sys_sleep(context, context->rdi); break; case SYS_write: // sys_write sys_write(context, (const char*)context->rdi, context->rsi); break; case SYS_paint: sys_paint(context, context->rdi, context->rsi, context->rdx, context->r10, context->r8); break; case SYS_rand: sys_rand(context); break; case SYS_getversion: sys_getversion(context, (char*)context->rdi, context->rsi); break; case SYS_gettid: sys_gettid(context); break; case SYS_mmap: sys_mmap(context, (void*)context->rdi, context->rsi, (int)context->rdx); break; case SYS_munmap: sys_munmap(context, (void*)context->rdi, context->rsi); break; default: context->rax = -ENOSYS; break; } }