summaryrefslogtreecommitdiff
path: root/stdlib
diff options
context:
space:
mode:
authorBenji Dial <benji@benjidial.net>2024-01-13 16:43:49 -0500
committerBenji Dial <benji@benjidial.net>2024-01-13 16:43:49 -0500
commit4130562b1555cabe441efe9420cebe12e7ed8d39 (patch)
treebeaf0012373aab2c3a13fe0147a5cda4af28ef78 /stdlib
parent882e74b2191c059a9226cbd8bcb51c97da36247c (diff)
downloadhilbert-os-4130562b1555cabe441efe9420cebe12e7ed8d39.tar.gz
application loading
Diffstat (limited to 'stdlib')
-rw-r--r--stdlib/entry.cpp14
-rw-r--r--stdlib/syscall.asm35
2 files changed, 49 insertions, 0 deletions
diff --git a/stdlib/entry.cpp b/stdlib/entry.cpp
new file mode 100644
index 0000000..5557c8a
--- /dev/null
+++ b/stdlib/entry.cpp
@@ -0,0 +1,14 @@
+int main(int argc, char **argv);
+
+extern "C" [[noreturn]] void _entry() {
+ //TODO: get command line via system call and populate argc and argv.
+ int argc = 0;
+ char **argv = 0;
+
+ int result = main(argc, argv);
+
+ //TODO: exit via system call and return result.
+ (void)result;
+ while (1)
+ ;
+}
diff --git a/stdlib/syscall.asm b/stdlib/syscall.asm
new file mode 100644
index 0000000..eba7ec0
--- /dev/null
+++ b/stdlib/syscall.asm
@@ -0,0 +1,35 @@
+bits 64
+
+global encode_color
+global get_framebuffer
+global draw_framebuffer
+
+section .text
+
+encode_color:
+ mov rax, 0
+ syscall
+ ret
+
+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
+ shr rdi, 32
+ pop rcx
+ mov dword [rcx], edi
+ pop rcx
+ mov dword [rcx], esi
+ ret
+
+draw_framebuffer:
+ mov rax, 2
+ syscall
+ ret