summaryrefslogtreecommitdiff
path: root/bootother.S
diff options
context:
space:
mode:
authorrsc <rsc>2006-09-06 17:04:06 +0000
committerrsc <rsc>2006-09-06 17:04:06 +0000
commita650c606fecc7e3938345e2bc52050a9ea725e7a (patch)
tree3bd2cfcd215f7ad4abdb087cdfe91f608c7f0801 /bootother.S
parent45854caa93eecc3f80d34940b7cf6a400b640d69 (diff)
downloadxv6-labs-a650c606fecc7e3938345e2bc52050a9ea725e7a.tar.gz
xv6-labs-a650c606fecc7e3938345e2bc52050a9ea725e7a.tar.bz2
xv6-labs-a650c606fecc7e3938345e2bc52050a9ea725e7a.zip
spacing fixes: no tabs, 2-space indents (for rtm)
Diffstat (limited to 'bootother.S')
-rw-r--r--bootother.S99
1 files changed, 50 insertions, 49 deletions
diff --git a/bootother.S b/bootother.S
index 99e4713..e4cbd67 100644
--- a/bootother.S
+++ b/bootother.S
@@ -1,5 +1,5 @@
#include "asm.h"
-
+
/*
* Start an Application Processor. This must be placed on a 4KB boundary
* somewhere in the 1st MB of conventional memory (APBOOTSTRAP). However,
@@ -13,67 +13,68 @@
* mp.c causes each non-boot CPU in turn to jump to start.
* mp.c puts the correct %esp in start-4, and the place to jump
* to in start-8.
- *
+ *
*/
-.set PROT_MODE_CSEG,0x8 # code segment selector
+.set PROT_MODE_CSEG,0x8 # code segment selector
.set PROT_MODE_DSEG,0x10 # data segment selector
-.set CR0_PE_ON,0x1 # protected mode enable flag
+.set CR0_PE_ON,0x1 # protected mode enable flag
.globl start
-start: .code16 # This runs in real mode
- cli # Disable interrupts
- cld # String operations increment
+start:
+ .code16 # This runs in real mode
+ cli # Disable interrupts
+ cld # String operations increment
- # Set up the important data segment registers (DS, ES, SS).
- xorw %ax,%ax # Segment number zero
- movw %ax,%ds # -> Data Segment
- movw %ax,%es # -> Extra Segment
- movw %ax,%ss # -> Stack Segment
+ # Set up the important data segment registers (DS, ES, SS).
+ xorw %ax,%ax # Segment number zero
+ movw %ax,%ds # -> Data Segment
+ movw %ax,%es # -> Extra Segment
+ movw %ax,%ss # -> Stack Segment
- # Set up the stack pointer, growing downward from 0x7000-8.
- movw $start-8,%sp # Stack Pointer
-
-#### Switch from real to protected mode
+ # Set up the stack pointer, growing downward from 0x7000-8.
+ movw $start-8,%sp # Stack Pointer
+
+#### Switch from real to protected mode
#### The descriptors in our GDT allow all physical memory to be accessed.
#### Furthermore, the descriptors have base addresses of 0, so that the
#### segment translation is a NOP, ie. virtual addresses are identical to
#### their physical addresses. With this setup, immediately after
-#### enabling protected mode it will still appear to this code
-#### that it is running directly on physical memory with no translation.
-#### This initial NOP-translation setup is required by the processor
-#### to ensure that the transition to protected mode occurs smoothly.
-
- lgdt gdtdesc # load GDT -- mandatory in protected mode
- movl %cr0, %eax # turn on protected mode
- orl $CR0_PE_ON, %eax #
- movl %eax, %cr0 #
- ### CPU magic: jump to relocation, flush prefetch queue, and reload %cs
- ### Has the effect of just jmp to the next instruction, but simultaneous
- ### loads CS with $PROT_MODE_CSEG.
- ljmp $PROT_MODE_CSEG, $protcseg
-
+#### enabling protected mode it will still appear to this code
+#### that it is running directly on physical memory with no translation.
+#### This initial NOP-translation setup is required by the processor
+#### to ensure that the transition to protected mode occurs smoothly.
+
+ lgdt gdtdesc # load GDT -- mandatory in protected mode
+ movl %cr0, %eax # turn on protected mode
+ orl $CR0_PE_ON, %eax #
+ movl %eax, %cr0 #
+ ### CPU magic: jump to relocation, flush prefetch queue, and reload %cs
+ ### Has the effect of just jmp to the next instruction, but simultaneous
+ ### loads CS with $PROT_MODE_CSEG.
+ ljmp $PROT_MODE_CSEG, $protcseg
+
#### we are in 32-bit protected mode (hence the .code32)
.code32
-protcseg:
- # Set up the protected-mode data segment registers
- movw $PROT_MODE_DSEG, %ax # Our data segment selector
- movw %ax, %ds # -> DS: Data Segment
- movw %ax, %es # -> ES: Extra Segment
- movw %ax, %fs # -> FS
- movw %ax, %gs # -> GS
- movw %ax, %ss # -> SS: Stack Segment
+protcseg:
+ # Set up the protected-mode data segment registers
+ movw $PROT_MODE_DSEG, %ax # Our data segment selector
+ movw %ax, %ds # -> DS: Data Segment
+ movw %ax, %es # -> ES: Extra Segment
+ movw %ax, %fs # -> FS
+ movw %ax, %gs # -> GS
+ movw %ax, %ss # -> SS: Stack Segment
- movl start-8, %eax
- movl start-4, %esp
- jmp *%eax
-
-.p2align 2 # force 4 byte alignment
+ movl start-8, %eax
+ movl start-4, %esp
+ jmp *%eax
+
+.p2align 2 # force 4 byte alignment
gdt:
- SEG_NULLASM # null seg
- SEG_ASM(STA_X|STA_R, 0x0, 0xffffffff) # code seg
- SEG_ASM(STA_W, 0x0, 0xffffffff) # data seg
-
+ SEG_NULLASM # null seg
+ SEG_ASM(STA_X|STA_R, 0x0, 0xffffffff) # code seg
+ SEG_ASM(STA_W, 0x0, 0xffffffff) # data seg
+
gdtdesc:
- .word 0x17 # sizeof(gdt) - 1
- .long gdt # address gdt
+ .word 0x17 # sizeof(gdt) - 1
+ .long gdt # address gdt