diff options
Diffstat (limited to 'libraries/euler/syscall.asm')
-rw-r--r-- | libraries/euler/syscall.asm | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/libraries/euler/syscall.asm b/libraries/euler/syscall.asm new file mode 100644 index 0000000..f7fe735 --- /dev/null +++ b/libraries/euler/syscall.asm @@ -0,0 +1,82 @@ +bits 64 + +section .text + +global _syscall_encode_color +_syscall_encode_color: + xor rax, rax + and edi, 0xff + and dx, 0xff + shl si, 8 + shl edx, 16 + or di, si + or edi, edx + syscall + ret + +global _syscall_get_framebuffer +_syscall_get_framebuffer: + push rcx + push rdx + push rsi + push rdi + mov rax, 1 + syscall + pop rcx + mov qword [rcx], rax + pop rcx + mov dword [rcx], edi + pop rcx + shr rdi, 32 + mov dword [rcx], edi + pop rcx + mov dword [rcx], esi + ret + +global _syscall_open_file +_syscall_open_file: + mov rax, 2 + push rdx + syscall + pop rdx + mov qword [rdx], rdi + ret + +global _syscall_get_file_length +_syscall_get_file_length: + mov rax, 3 + push rsi + syscall + pop rsi + mov qword [rsi], rdi + ret + +global _syscall_read_from_file +_syscall_read_from_file: + mov rax, 4 + push rcx + push rdx + push rsi + push rdi + mov rdi, rsp + syscall + add rsp, 32 + ret + +global _syscall_end_this_process +_syscall_end_this_process: + mov rax, 5 + syscall + ;does not return + +global _syscall_get_new_pages +_syscall_get_new_pages: + mov rax, 6 + syscall + ret + +global _syscall_close_file +_syscall_close_file: + mov rax, 7 + syscall + ret |