]> Devi Nivas Git - cs3210-lab0.git/commitdiff
bootasm cleanup
authorRuss Cox <rsc@swtch.com>
Sun, 12 Jul 2009 02:15:32 +0000 (19:15 -0700)
committerRuss Cox <rsc@swtch.com>
Sun, 12 Jul 2009 02:15:32 +0000 (19:15 -0700)
bootasm.S
bootother.S

index 4b2e01295f5cb7f32fcb6bc1300736ef113509fd..0d8f2a565695f78398dfc80702f90751a88748c9 100644 (file)
--- a/bootasm.S
+++ b/bootasm.S
@@ -86,8 +86,7 @@ gdt:
   SEG_NULLASM                             # null seg
   SEG_ASM(STA_X|STA_R, 0x0, 0xffffffff)   # code seg
   SEG_ASM(STA_W, 0x0, 0xffffffff)         # data seg
-  SEG_ASM(STA_W, 0x100, 0xffffffff)       # per-cpu data seg; 0x100 is okay for now
 
 gdtdesc:
-  .word   0x1f                            # sizeof(gdt) - 1
+  .word   (gdtdesc - gdt - 1)                            # sizeof(gdt) - 1
   .long   gdt                             # address gdt
index cb3ff4c7a35ee171b8060aace006b3b1cc13db57..47f547e7e53dac9589182bb99ea86bd9cf9d6be8 100644 (file)
 #   - it uses the address at start-4 for the %esp
 #   - it jumps to the address at start-8 instead of calling bootmain
 
-.set PROT_MODE_CSEG, 0x8         # kernel code segment selector
-.set PROT_MODE_DSEG, 0x10        # kernel data segment selector
-.set CR0_PE_ON,      0x1         # protected mode enable flag
+#define SEG_KCODE 1  // kernel code
+#define SEG_KDATA 2  // kernel data+stack
 
+#define CR0_PE    1  // protected mode enable bit
+
+.code16                       # Assemble for 16-bit mode
 .globl start
 start:
-  .code16                     # Assemble for 16-bit mode
   cli                         # Disable interrupts
-  cld                         # String operations increment
 
   # Set up the important data segment registers (DS, ES, SS).
   xorw    %ax,%ax             # Segment number zero
@@ -42,22 +42,23 @@ start:
   # effective memory map does not change during the switch.
   lgdt    gdtdesc
   movl    %cr0, %eax
-  orl     $CR0_PE_ON, %eax
+  orl     $CR0_PE, %eax
   movl    %eax, %cr0
 
   # Jump to next instruction, but in 32-bit code segment.
   # Switches processor into 32-bit mode.
-  ljmp    $PROT_MODE_CSEG, $protcseg
+  ljmp    $(SEG_KCODE<<3), $protcseg
 
   .code32                     # Assemble for 32-bit mode
 protcseg:
   # Set up the protected-mode data segment registers
-  movw    $PROT_MODE_DSEG, %ax    # Our data segment selector
+  movw    $(SEG_KDATA<<3), %ax    # Our data segment selector
   movw    %ax, %ds                # -> DS: Data Segment
   movw    %ax, %es                # -> ES: Extra Segment
+  movw    %ax, %ss                # -> SS: Stack Segment
+  movw    $0, %ax                 # Zero segments not ready for use
   movw    %ax, %fs                # -> FS
   movw    %ax, %gs                # -> GS
-  movw    %ax, %ss                # -> SS: Stack Segment
 
   movl    start-4, %esp
   movl    start-8, %eax
@@ -81,5 +82,5 @@ gdt:
   SEG_ASM(STA_W, 0x0, 0xffffffff)         # data seg
 
 gdtdesc:
-  .word   0x17                            # sizeof(gdt) - 1
+  .word   (gdtdesc - gdt - 1)                            # sizeof(gdt) - 1
   .long   gdt                             # address gdt