course 5 and some old slides
[lunaix-os.git] / lunaix-os / arch / x86 / boot.S
index 8e019a56f9f8df812d159bddba3998448ee88ac0..1eddb52c1af6b97a0663b6773689f59e21aa9907 100644 (file)
     stack_top:
 
 .section .text
+    .global start_
+    .type start_, @function     /* Optional, this just give the 
+                                 * linker more knowledge about the label 
+                                 */
     start_:
         movl $stack_top, %esp
         /* 
                 3. Enable paging
         */
         call _kernel_init
+        
+        subl $0x6, %esp
+        movl $_gdt, 2(%esp)
+        movw _gdt_limit, %ax
+        movw %ax, (%esp)
+        lgdt (%esp)
+        addl $0x6, %esp
 
+        movw $0x10, %cx
+        movw %cx, %es
+        movw %cx, %ds
+        movw %cx, %fs
+        movw %cx, %gs
+        movw %cx, %ss
+
+        pushw $0x08
+        pushl $_after_gdt
+        retf
+
+    _after_gdt:
         pushl %ebx
         call _kernel_main