#pragma once // Syscall.h #include #include #include #include // --------------------------------------------------------------------------- // User process/thread environment // --------------------------------------------------------------------------- // GS base points at SYS_TEB. GS:[0] is the process PEB pointer. // This is this OS' ABI, not a Windows compatibility layout. #define SYS_PEB_MAGIC 0x30424550u /* "PEB0" */ #define SYS_TEB_MAGIC 0x30424554u /* "TEB0" */ #define SYS_ENV_VERSION 1u #define SYS_CWD_MAX 512u typedef struct SYS_PEB { uint32_t Magic; uint32_t Version; uint32_t ProcessId; const char* ImagePath; size_t ImagePathLength; const char* CommandLine; size_t CommandLineLength; const char* CurrentDirectory; size_t CurrentDirectoryLength; } SYS_PEB; typedef struct SYS_TEB { SYS_PEB* Peb; void* StackBase; void* StackLimit; struct SYS_TEB* Self; uint32_t ThreadId; uint32_t Magic; } SYS_TEB; static inline SYS_PEB* SysGetPeb(void) { return (SYS_PEB*)(uintptr_t)__readgsqword(0); } static inline SYS_TEB* SysGetTeb(void) { return (SYS_TEB*)(uintptr_t)__readgsqword(offsetof(SYS_TEB, Self)); } static inline const char* SysGetCommandLine(void) { SYS_PEB* peb = SysGetPeb(); if (!peb || peb->Magic != SYS_PEB_MAGIC) return ""; return peb->CommandLine ? peb->CommandLine : ""; } // --------------------------------------------------------------------------- // Thread & Process Management (0-7) // --------------------------------------------------------------------------- void SysExitProcess(int exitCode); // 00 void SysExitThread(int exitCode); // 01 uint32_t SysCreateThread(uintptr_t entry, uintptr_t arg, uint32_t priority, uint32_t* tidOut); // 02 uint32_t SysGetCurrentTid(void); // 03 uint32_t SysGetCurrentPid(void); // 04 uint32_t SysYield(void); // 05 uint32_t SysSleep(uint64_t ms); // 06 uint32_t SysSetThreadPriority(uint32_t priority); // 07 // --------------------------------------------------------------------------- // Memory Management (8-10) // --------------------------------------------------------------------------- void* SysAlloc(size_t size); // 08 uint32_t SysFree(void* ptr, size_t size); // 09 void* SysRealloc(void* ptr, size_t newSize); // 10 // --------------------------------------------------------------------------- // Synchronization Primitives (11-22) // --------------------------------------------------------------------------- uint32_t SysMutexCreate(uint32_t* handleOut); // 11 uint32_t SysMutexAcquire(uint32_t handle); // 12 uint32_t SysMutexTryAcquire(uint32_t handle); // 13 uint32_t SysMutexRelease(uint32_t handle); // 14 uint32_t SysSemCreate(int32_t initial, int32_t max, uint32_t* handleOut); // 15 uint32_t SysSemWait(uint32_t handle); // 16 uint32_t SysSemTryWait(uint32_t handle); // 17 uint32_t SysSemSignal(uint32_t handle); // 18 uint32_t SysEventCreate(uint32_t type, uint32_t initialState, uint32_t* handleOut); // 19 uint32_t SysEventSignal(uint32_t handle); // 20 uint32_t SysEventClear(uint32_t handle); // 21 uint32_t SysEventWait(uint32_t handle); // 22 // --------------------------------------------------------------------------- // Anonymous Queues & Unified Handle Path (23-26) // --------------------------------------------------------------------------- uint32_t SysQueueCreate(uint32_t* handleOut); // 23 uint32_t SysQueueSend(uint32_t handle, const void* msg, bool blocking); // 24 uint32_t SysQueueRecv(uint32_t handle, void* msg, bool blocking); // 25 uint32_t SysCloseHandle(uint32_t handle); // 26 // --------------------------------------------------------------------------- // File System (27-35) // --------------------------------------------------------------------------- uint32_t SysOpenFile(const char* path, uint32_t* handleOut); // 27 uint32_t SysReadFile(uint32_t handle, void* buf, size_t size, size_t* bytesRead); // 28 uint32_t SysWriteFile(uint32_t handle, const void* buf, size_t size, size_t* written); // 29 uint32_t SysCreateFile(const char* path, uint32_t* handleOut); // 30 uint32_t SysDeleteFile(const char* path); // 31 uint32_t SysTruncateFile(uint32_t handle, uint64_t newSize); // 32 uint64_t SysGetFilePos(uint32_t handle); // 33 uint32_t SysSeekFile(uint32_t handle, uint64_t offset); // 34 uint64_t SysGetFileSize(uint32_t handle); // 35 // --------------------------------------------------------------------------- // Graphics & Input (36-47) // --------------------------------------------------------------------------- uint32_t SysScreenBlit(int x, int y, int w, int h, const uint32_t* pixels); // 36 uint32_t SysScreenClear(uint32_t color); // 37 uint32_t SysScreenGetSize(int* widthOut, int* heightOut); // 38 uint32_t SysScreenPutChar(char c, int x, int y, uint32_t fg, uint32_t bg); // 39 uint64_t SysKbPoll(void); // 40 uint64_t SysKbIsKeyDown(uint8_t scancode, bool extended); // 41 char SysKbReadChar(void); // 42 uint8_t SysKbReadScancode(void); // 43 uint32_t SysKbGetModifiers(void); // 44 uint64_t SysMousePoll(void); // 45 uint64_t SysMouseRead(int* dx, int* dy, uint8_t* buttons); // 46 void SysMouseGetPos(int* x, int* y); // 47 // --------------------------------------------------------------------------- // System Info & Process Management (48-65) // --------------------------------------------------------------------------- uint64_t SysGetTick(void); // 48 uint32_t SysDebugPrint(const char* str); // 49 uint32_t SysCreateProcess(const char* path, uint32_t* handleOut, const char* cmdline); // 50 uint32_t SysWaitForProcess(uint32_t handle); // 51 uint32_t SysGetProcessExitCode(uint32_t handle, int* exitCodeOut); // 52 uint32_t SysWriteConsole(const char* buf, size_t len); // 53 // --------------------------------------------------------------------------- // Directories & Environment (54-57) // --------------------------------------------------------------------------- uint32_t SysOpenDir(const char* path, uint32_t* handleOut); // 54 uint32_t SysReadDir(uint32_t handle, void* dirEntryBuffer); // 55 uint32_t SysSetCwd(const char* path); // 56 uint32_t SysGetCwd(char* buf, size_t size); // 57 // --------------------------------------------------------------------------- // Process/Thread Helpers & Named Queues (58-65) // --------------------------------------------------------------------------- uint32_t SysWaitThread(uint32_t tid); // 58 uint32_t SysGetProcessPid(uint32_t handle, uint32_t* pidOut); // 59 uint32_t SysPublishQueue(const char* name, uint32_t handle); // 60 uint32_t SysOpenNamedQueue(const char* name, uint32_t* handleOut); // 61 uint32_t SysQueueDuplicate(uint32_t handle, uint32_t targetPid, uint32_t* handleOut); // 62 uint32_t SysNamedQueueOwnerPid(const char* name, uint32_t* pidOut); // 63 uint32_t SysKillProcess(uint32_t pid, int exitCode); // 64 uint32_t SysGetProcessList(uint32_t* pidsOut, size_t maxCount, size_t* countOut); // 65 // --------------------------------------------------------------------------- // Filesystem mutations (66-68) // --------------------------------------------------------------------------- uint32_t SysRenameFile(const char* oldPath, const char* newPath); // 66 uint32_t SysCreateDir(const char* path); // 67 uint32_t SysRemoveDir(const char* path); // 68