diff options
Diffstat (limited to 'kernel/usrspace.s')
| -rw-r--r-- | kernel/usrspace.s | 42 |
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 |
