1.6 KiB
1.6 KiB
Syscall list
This list is not complete, but the numbers and the arguments are most likely final
exit(int)
void *mmap(void *addr, size_t length, int prot)
void munmap(void *addr, size_t length)
void closeHandle(void *handle)
void *duplicateHandle(void *handle)
void *createService(char name[16], int maxSessions)
void *connectToService(char name[16])
void *replyAndReceive(int * handleEventOut, void ** handles, int handleCount, uint8_t data[256])
- returns a handle if there is a new connection or if a handle has closed the connectionvoid *create_shared(void **handle_out, void* addr, size_t length, int prot, void *tgt_process)
- returns a handle for the other process to map shared memoryvoid *mmap_shared(void* handle, void* addr)
int fork()
int vfork()
- Used for threadingint getpid()
int getppid()
int setppid()
Example code
Bare-metal (no libc) hello world
int main() {
auto tty_handle = connectToService("tty:u");
if(!tty_handle)
exit(1);
union {
struct {
int cmd_id;
char text[252];
}__attribute__((packed))
uint8_t data[256];
} cmdbuf;
cmdbuf.cmd_id = 1; //1 == puts()
const char* s = "Hello, World!";
int i;
for(i=0;s[i];i++)
cmdbuf.text[i]=s[i];
cmdbuf.text[i]=0;
replyAndReceive(nullptr, &tty_handle, 1, cmdbuf.data); //Passing nullptr to handleEventOut will not wrote a event handle number
closeHandle(tty_handle);
exit(1);
}