From 79f2fa136f26a0b87917336e089485712ee49bd6 Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Fri, 7 Aug 2020 21:14:20 +0200 Subject: Dual-tasking works. I don't know why triple-tasking doesn't though... --- src/features/proc.asm | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/features/proc.asm (limited to 'src/features/proc.asm') diff --git a/src/features/proc.asm b/src/features/proc.asm new file mode 100644 index 0000000..3d6bbc4 --- /dev/null +++ b/src/features/proc.asm @@ -0,0 +1,25 @@ +%define USER_CODE_SEGMENT 0x18 +%define USER_DATA_SEGMENT 0x20 +%define RING3_MASK 0b11 + +global proc_jump_userspace +extern _esp +extern _eip +proc_jump_userspace: + mov ax, USER_DATA_SEGMENT | RING3_MASK + mov ds, ax + mov es, ax + mov fs, ax + mov gs, ax + + mov eax, dword [_esp] + push USER_DATA_SEGMENT | RING3_MASK + push eax + pushf + + sti + + push USER_CODE_SEGMENT | RING3_MASK + push dword [_eip] + + iret -- cgit v1.2.3