From 887f19686cf377db55953dac651ca8147c268092 Mon Sep 17 00:00:00 2001
From: Russ Cox <rsc@swtch.com>
Date: Sat, 11 Jul 2009 19:15:32 -0700
Subject: bootasm cleanup

---
 bootother.S | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

(limited to 'bootother.S')

diff --git a/bootother.S b/bootother.S
index cb3ff4c..47f547e 100644
--- a/bootother.S
+++ b/bootother.S
@@ -19,15 +19,15 @@
 #   - 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
-- 
cgit v1.2.3