summaryrefslogtreecommitdiff
path: root/kernel/usrspace.s
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/usrspace.s')
-rw-r--r--kernel/usrspace.s42
1 files changed, 42 insertions, 0 deletions
diff --git a/kernel/usrspace.s b/kernel/usrspace.s
new file mode 100644
index 0000000..e52f2e0
--- /dev/null
+++ b/kernel/usrspace.s
@@ -0,0 +1,42 @@
+global userspace_init
+extern _binary_usrbin_bin_start
+extern _binary_usrbin_bin_size
+
+userspace_init:
+ push ebp
+ mov ebp, esp
+ push esi
+ push edi
+ mov ecx, _binary_usrbin_bin_size
+ mov esi, _binary_usrbin_bin_start
+ mov edi, 0x100000
+.loop:
+ movsb
+ dec ecx
+ jz .end
+ jmp .loop
+.end:
+ pop edi
+ pop esi
+ call usrcall
+ pop ebp
+ ret
+
+usrcall:
+ push ebp
+ mov ebp, esp
+ cli
+ mov ax, 0x23
+ mov ds, ax
+ mov es, ax
+ mov fs, ax
+ mov gs, ax
+ mov eax, esp
+ push dword 0x23
+ push eax
+ pushf
+ push dword 0x1B
+ push dword 0x00100000
+ iret
+ pop ebp
+ ret