This repository has been archived on 2023-09-28. You can view files and clone it, but cannot push or open issues or pull requests.
title |
summary |
date |
Sysabi |
The noxos `Application Binary Interface`. |
2023-03-14T21:00:40+01:00 |
Syscalls are a way for programms to communicate with the kernel.
To perform a syscall, you need to populate the following registers:
Register |
Value |
rax |
The syscalls ID |
rdi |
Argument 1 |
rsi |
Argument 2 |
rdx |
Argument 3 |
rcx |
Argument 4 |
The following calls should be implemented to some degree in noxos 1.0.
Categories
Files
ID |
Name |
Description |
Arg1 |
Arg2 |
Arg3 |
Arg4 |
Result |
Status |
0x0101 |
nx_fopen |
Opens the file at the len bytes long path path and writes a file descriptor to the referenced file into fd (which needs to be a pointer). |
path |
len |
*fd |
|
status |
Implemented |
0x0102 |
nx_fclose |
Closes the file which is indicated by descriptor fd. This should always be called, otherwise the OS will have to unload files without knowledge of usage. |
fd |
|
|
|
status |
Implemented |
0x0103 |
nx_fread |
Reads at most n bytes from a file given as descriptor fd and at a specific position offset into a given memory region mem. |
fd |
offset |
mem |
n |
status |
Implemented |
0x0104 |
nx_fwrite |
Writes n bytes from a given memory region mem into the file referenced by fd at the given position offset, not inserting but either overwriting existing content or appending to the file. |
fd |
offset |
mem |
n |
status |
Implemented |
0x0105 |
nx_fdelete |
Completely delete the file or folder at a given path path, which is len bytes long. |
path |
len |
|
|
status |
Implemented |
0x0106 |
nx_flist |
List all files and/or directories at the len bytes long path path and write their NULL-separated names into mem. When mem is NULL, needed_mem (which needs to be a pointer to an 32-bit integer) is filled with the appropriate value. |
path |
len |
mem |
*needed_mem |
status |
Implemented |
0x0107 |
nx_finfo |
Writes the information about the files attribute attr into mem. Types of attributes are described below. |
fd |
attr |
mem |
|
status |
N/A |
Note: The len argument of paths isn't used at the moment, rather than using len, path needs to be Null-Terminated.
Memory
ID |
Name |
Description |
Arg1 |
Arg2 |
Arg3 |
Arg4 |
Result |
Status |
0x0201 |
nx_mmap |
Maps n 4KB pages to address addr. You can provide a bitmap of flags with the flags argument. Which flags can be used, is described below. |
addr |
n |
flags |
|
status |
Implemented |
0x0202 |
nx_munmap |
Unmaps n 4KB pages at address addr. |
addr |
n |
|
|
status |
Implemented |
Processes
ID |
Name |
Description |
Arg1 |
Arg2 |
Arg3 |
Arg4 |
Result |
Status |
|
|
|
|
|
|
|
|
|
Runtime / Dynamic Linker
ID |
Name |
Description |
Arg1 |
Arg2 |
Arg3 |
Arg4 |
Result |
Status |
|
|
|
|
|
|
|
|
|
Compatibility & Safety
ID |
Name |
Description |
Arg1 |
Arg2 |
Arg3 |
Arg4 |
Result |
Status |
|
|
|
|
|
|
|
|
|
Kernel
The kernel syscalls can only be called from the kernels main process [link to processing article needed].
If another process calls them, they will just return without doing anything.
ID |
Name |
Description |
Arg1 |
Arg2 |
Arg3 |
Arg4 |
Result |
Status |
|
|
|
|
|
|
|
|
|
Appendixes
Types of file attributes
ID |
Name |
Description |
Data Type |
Status |
0 |
permissions |
Who has what permission to access the file |
uint16_t |
N/A |
1 |
size |
The files size in bytes |
uint64_t |
N/A |
Memory mapping flags
Bit |
Name |
Description |
0 |
write |
Enables write access to the mapped pages. |
1 |
no_exec |
Prevents execution of the mapped pages. |