Move pagedir stuff into userprog.
[pintos-anon] / src / threads / loader.S
index 3d440d20d58d2b30c3228c65c278a82cf8d51893..42f489979dff15704d4cd3efa023c9954f03913b 100644 (file)
@@ -39,7 +39,7 @@
  */
 
 #include "threads/loader.h"
-#include "threads/mmu.h"
+/*#include "threads/mmu.h"*/
        
 #### Kernel loader.
 
@@ -59,6 +59,8 @@
 
 # Code runs in real mode, which is a 16-bit segment.
 
+.globl start
+start:
        .code16
 
 # Disable interrupts.
        cli
        cld
 
-# Set up segment registers and stack.
-# Stack grows downward starting from us.
+# Set up data segments and stack.
 
        subw %ax, %ax
        movw %ax, %es
        movw %ax, %ds
+
+# Stack grows downward starting from us.
+# We don't ever use the stack so this is strictly speaking
+# unnecessary.
+
        movw %ax, %ss
        movw $0x7c00, %sp
        
        rep stosl
 
 # Set PDEs for 0 and LOADER_PHYS_BASE to point to the page table.
+# See comments near the PG_* macros in paging.h for a description of
+# the values stored here.
 
-       movl $0x11000 | PG_U | PG_W | PG_P, %eax
+       movl $0x11007, %eax
        movl %eax, %es:0
        movl %eax, %es:LOADER_PHYS_BASE >> 20
 
 # Initialize page table.
 
-       movl $PG_U | PG_W | PG_P, %eax
+       movl $7, %eax
        movl $0x400, %ecx
 1:     stosl
        addl $0x1000, %eax
@@ -247,9 +255,9 @@ read_sector:
 
 # Transfer sector.
 
-       movl $512 / 4, %ecx
+       movl $256, %ecx
        movl $0x1f0, %edx
-       rep insl
+       rep insw
 
 # Next sector.