summaryrefslogtreecommitdiff
path: root/bootother.S
diff options
context:
space:
mode:
authorRobert Morris <[email protected]>2010-09-13 15:34:44 -0400
committerRobert Morris <[email protected]>2010-09-13 15:34:44 -0400
commitfaad047ab22cbe989c208bff5ecb42608ecb8d7b (patch)
treeb47cd8948dcbc5c86117982245b53f4e9c95dc30 /bootother.S
parent124fe7e457c0dc9b671c7ffccb56004eb61da4f0 (diff)
downloadxv6-labs-faad047ab22cbe989c208bff5ecb42608ecb8d7b.tar.gz
xv6-labs-faad047ab22cbe989c208bff5ecb42608ecb8d7b.tar.bz2
xv6-labs-faad047ab22cbe989c208bff5ecb42608ecb8d7b.zip
change some comments, maybe more informative
delete most comments from bootother.S (since copy of bootasm.S) ksegment() -> seginit() move more stuff from main() to mainc()
Diffstat (limited to 'bootother.S')
-rw-r--r--bootother.S75
1 files changed, 32 insertions, 43 deletions
diff --git a/bootother.S b/bootother.S
index 899669a..186873e 100644
--- a/bootother.S
+++ b/bootother.S
@@ -9,80 +9,69 @@
# Because this code sets DS to zero, it must sit
# at an address in the low 2^16 bytes.
#
-# Bootothers (in main.c) sends the STARTUPs, one at a time.
-# It puts this code (start) at 0x7000.
-# It puts the correct %esp in start-4,
-# and the place to jump to in start-8.
+# Bootothers (in main.c) sends the STARTUPs one at a time.
+# It copies this code (start) at 0x7000.
+# It puts the address of a newly allocated per-core stack in start-4,
+# and the address of the place to jump to (mpmain) in start-8.
#
# This code is identical to bootasm.S except:
# - it does not need to enable A20
# - it uses the address at start-4 for the %esp
# - it jumps to the address at start-8 instead of calling bootmain
-#define SEG_KCODE 1 // kernel code
-#define SEG_KDATA 2 // kernel data+stack
+#define SEG_KCODE 1
+#define SEG_KDATA 2
-#define CR0_PE 1 // protected mode enable bit
+#define CR0_PE 1
-.code16 # Assemble for 16-bit mode
+.code16
.globl start
start:
- cli # Disable interrupts
+ cli
- # 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
+ xorw %ax,%ax
+ movw %ax,%ds
+ movw %ax,%es
+ movw %ax,%ss
//PAGEBREAK!
- # Switch from real to protected mode, using a bootstrap GDT
- # and segment translation that makes virtual addresses
- # identical to physical addresses, so that the
- # effective memory map does not change during the switch.
lgdt gdtdesc
movl %cr0, %eax
orl $CR0_PE, %eax
movl %eax, %cr0
- # This ljmp is how you load the CS (Code Segment) register.
- # SEG_ASM produces segment descriptors with the 32-bit mode
- # flag set (the D flag), so addresses and word operands will
- # default to 32 bits after this jump.
ljmp $(SEG_KCODE<<3), $start32
-.code32 # Assemble for 32-bit mode
+.code32
start32:
- # Set up the protected-mode data segment registers
- 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 $(SEG_KDATA<<3), %ax
+ movw %ax, %ds
+ movw %ax, %es
+ movw %ax, %ss
+ movw $0, %ax
+ movw %ax, %fs
+ movw %ax, %gs
- # Set up the stack pointer and call into C.
+ # switch to the stack allocated by bootothers()
movl start-4, %esp
+
+ # call mpmain()
call *(start-8)
- # If the call returns (it shouldn't), trigger a Bochs
- # breakpoint if running under Bochs, then loop.
- movw $0x8a00, %ax # 0x8a00 -> port 0x8a00
+ movw $0x8a00, %ax
movw %ax, %dx
outw %ax, %dx
- movw $0x8ae0, %ax # 0x8ae0 -> port 0x8a00
+ movw $0x8ae0, %ax
outw %ax, %dx
spin:
jmp spin
-# Bootstrap GDT
-.p2align 2 # force 4 byte alignment
+.p2align 2
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
+ SEG_ASM(STA_X|STA_R, 0x0, 0xffffffff)
+ SEG_ASM(STA_W, 0x0, 0xffffffff)
gdtdesc:
- .word (gdtdesc - gdt - 1) # sizeof(gdt) - 1
- .long gdt # address gdt
+ .word (gdtdesc - gdt - 1)
+ .long gdt