Skip to content

Commit

Permalink
more comments in entryother.S
Browse files Browse the repository at this point in the history
  • Loading branch information
Robert Morris committed Aug 10, 2016
1 parent 0a69dc9 commit 3431cd4
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 15 deletions.
28 changes: 17 additions & 11 deletions entryother.S
Original file line number Diff line number Diff line change
Expand Up @@ -17,37 +17,43 @@
# place to jump to (mpenter) in start-8, and the physical address
# of entrypgdir in start-12.
#
# This code is identical to bootasm.S except:
# - it does not need to enable A20
# - it uses the address at start-4, start-8, and start-12
# This code combines elements of bootasm.S and entry.S.

.code16
.globl start
start:
cli

# Zero data segment registers DS, ES, and SS.
xorw %ax,%ax
movw %ax,%ds
movw %ax,%es
movw %ax,%ss

# Switch from real to protected mode. Use a bootstrap GDT that makes
# virtual addresses map directly to physical addresses so that the
# effective memory map doesn't change during the transition.
lgdt gdtdesc
movl %cr0, %eax
orl $CR0_PE, %eax
movl %eax, %cr0

//PAGEBREAK!
# Complete the transition to 32-bit protected mode by using a long jmp
# to reload %cs and %eip. The segment descriptors are set up with no
# translation, so that the mapping is still the identity mapping.
ljmpl $(SEG_KCODE<<3), $(start32)

.code32
.code32 # Tell assembler to generate 32-bit code now.
start32:
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 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

# Turn on page size extension for 4Mbyte pages
movl %cr4, %eax
Expand Down
9 changes: 5 additions & 4 deletions main.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,10 +98,11 @@ startothers(void)
}
}

// Boot page table used in entry.S and entryother.S.
// Page directories (and page tables), must start on a page boundary,
// hence the "__aligned__" attribute.
// Use PTE_PS in page directory entry to enable 4Mbyte pages.
// The boot page table used in entry.S and entryother.S.
// Page directories (and page tables) must start on page boundaries,
// hence the __aligned__ attribute.
// PTE_PS in a page directory entry enables 4Mbyte pages.

__attribute__((__aligned__(PGSIZE)))
pde_t entrypgdir[NPDENTRIES] = {
// Map VA's [0, 4MB) to PA's [0, 4MB)
Expand Down

0 comments on commit 3431cd4

Please sign in to comment.