refactor: formattings
[lunaix-os.git] / lunaix-os / kernel / proc0.c
index a2102aeca029313b203bc7360b65060874650571..074bcd9347c40cdf070e97c26c3127eddbc2b3b0 100644 (file)
@@ -3,6 +3,7 @@
 #include <lunaix/lunistd.h>
 #include <lunaix/mm/vmm.h>
 #include <lunaix/peripheral/ps2kbd.h>
+#include <lunaix/proc.h>
 #include <lunaix/spike.h>
 #include <lunaix/syscall.h>
 #include <lunaix/syslog.h>
@@ -35,11 +36,27 @@ void
 __proc0()
 {
     init_platform();
+    asm volatile("movw %0, %ax\n"
+                 "movw %ax, %es\n"
+                 "movw %ax, %ds\n"
+                 "movw %ax, %fs\n"
+                 "movw %ax, %gs\n"
+                 "pushl %0\n"
+                 "pushl %1\n"
+                 "pushl %2\n"
+                 "pushl %3\n"
+                 "retf" ::"i"(UDATA_SEG),
+                 "i"(USTACK_TOP & ~0xf),
+                 "i"(UCODE_SEG),
+                 "r"(&&usr));
+usr:
     if (!fork()) {
         asm("jmp _lxinit_main");
     }
 
-    asm("1: jmp 1b");
+    while (1) {
+        yield();
+    }
 }
 
 extern uint8_t __kernel_start;            /* link/linker.ld */