summaryrefslogtreecommitdiff
path: root/kernel/usrbin/usrbin.s
diff options
context:
space:
mode:
authorJake Mannens <jake72360@gmail.com>2018-06-20 04:39:25 +1000
committerJake Mannens <jake72360@gmail.com>2018-06-20 04:39:25 +1000
commita4ea0b14840ef5946408a3893f3f1c92ed57ae80 (patch)
tree0290ff480f8d9156b6bfcd35d009028e08cb5041 /kernel/usrbin/usrbin.s
parentf6858b7333139441215e83e070e098bf09056762 (diff)
Added a very basic types.h header file that defines NULL, size_t and
time_t. Moved the kernel's loading point down to address 0 in conventional memory and updated linker scripts accordingly. Began to experiment with loading a binary blob into extended memory (0x100000), switching to userspace mode, and executing it.
Diffstat (limited to 'kernel/usrbin/usrbin.s')
-rw-r--r--kernel/usrbin/usrbin.s32
1 files changed, 32 insertions, 0 deletions
diff --git a/kernel/usrbin/usrbin.s b/kernel/usrbin/usrbin.s
new file mode 100644
index 0000000..91dd94a
--- /dev/null
+++ b/kernel/usrbin/usrbin.s
@@ -0,0 +1,32 @@
+bits 32
+org 0x100000
+
+main:
+ push .msg
+ call puts
+ add esp, 4
+.loop:
+ ; loop forever
+ jmp .loop
+.msg: db "Hello World from Userspace!", 0
+
+puts:
+ push ebp
+ mov ebp, esp
+ push esi
+ push edi
+ mov esi, [ebp+8]
+ mov edi, 0xB8000
+.loop:
+ lodsb
+ cmp al, 0
+ je .end
+ mov [edi], al
+ mov byte [edi+1], 0x07
+ add edi, 2
+ jmp .loop
+.end:
+ pop edi
+ pop esi
+ pop ebp
+ ret