| 
														
															@@ -103,22 +103,27 @@ start_32bit: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     movw %ax, %gs 
														 | 
														
														 | 
														
															     movw %ax, %gs 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     movw %ax, %ss 
														 | 
														
														 | 
														
															     movw %ax, %ss 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-# set up temporary stack 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    movl $0x7df0, %esp 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    movl $0x7df0, %ebp 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    movl $0x0, (%esp) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    movl $0x0, 4(%esp) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    movl $0, %esp 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    movl $0, %ebp 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 setup_early_kernel_page_table: 
														 | 
														
														 | 
														
															 setup_early_kernel_page_table: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 # memory map: 
														 | 
														
														 | 
														
															 # memory map: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 # 0x0000-0x1000: empty page 
														 | 
														
														 | 
														
															 # 0x0000-0x1000: empty page 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 # 0x1000-0x2000: early kernel pd 
														 | 
														
														 | 
														
															 # 0x1000-0x2000: early kernel pd 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-# 0x2000-0x5000: 3 pts 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-# 0x5000-0x7000: early kernel stack 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-# so we fill the first 7KiB with zero 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+# 0x2000-0x6000: 4 pts 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+# 0x6000-0x8000: early kernel stack 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+# so we fill the first 8KiB with zero 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     movl $0x00000000, %eax 
														 | 
														
														 | 
														
															     movl $0x00000000, %eax 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    movl $0x7000, %ecx 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    call _fill_zero 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    movl $0x8000, %ecx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+_fill_zero: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    cmpl $0, %ecx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    jz _fill_zero_end 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    subl $4, %ecx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    movl $0, (%eax) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    addl $4, %eax 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    jmp _fill_zero 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+_fill_zero_end: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 # pt#0: 0x00000000 to 0x00400000 
														 | 
														
														 | 
														
															 # pt#0: 0x00000000 to 0x00400000 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     movl $0x00001000, %eax 
														 | 
														
														 | 
														
															     movl $0x00001000, %eax 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -126,25 +131,28 @@ setup_early_kernel_page_table: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 # pt#1: 0xc0000000 to 0xc0400000 
														 | 
														
														 | 
														
															 # pt#1: 0xc0000000 to 0xc0400000 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     movl $0x00001c00, %eax 
														 | 
														
														 | 
														
															     movl $0x00001c00, %eax 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     movl $0x00003003, (%eax) 
														 | 
														
														 | 
														
															     movl $0x00003003, (%eax) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-# pt#2: 0xffc00000 to 0xffffffff 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    movl $0x00001ffc, %eax 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+# pt#2: 0xff000000 to 0xff400000 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    movl $0x00001ff0, %eax 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     movl $0x00004003, (%eax) 
														 | 
														
														 | 
														
															     movl $0x00004003, (%eax) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+# pt#3: 0xffc00000 to 0xffffffff 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    movl $0x00001ffc, %eax 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    movl $0x00005003, (%eax) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-# map early kernel page directory identically 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    movl $0x00002004, %eax 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+# map early kernel page directory to 0xff000000 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    movl $0x00004000, %eax 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     movl $0x00001003, (%eax) 
														 | 
														
														 | 
														
															     movl $0x00001003, (%eax) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+# map kernel pt#2 to 0xff001000 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    movl $0x00004004, %eax 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    movl $0x00004003, (%eax) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 # map __stage1_start ---- __kinit_end identically 
														 | 
														
														 | 
														
															 # map __stage1_start ---- __kinit_end identically 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     movl $__stage1_start, %ebx 
														 | 
														
														 | 
														
															     movl $__stage1_start, %ebx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    shrl $12, %ebx 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    movl $__kinit_end, %ecx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     movl %ebx, %edx 
														 | 
														
														 | 
														
															     movl %ebx, %edx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    shrl $12, %edx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     andl $0x3ff, %edx 
														 | 
														
														 | 
														
															     andl $0x3ff, %edx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    shll $12, %ebx 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    movl $__kinit_end, %ecx 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    addl $0xfff, %ecx 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    shrl $12, %ecx 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    shll $12, %ecx 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 __map_stage1_kinit: 
														 | 
														
														 | 
														
															 __map_stage1_kinit: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     leal 3(%ebx), %eax 
														 | 
														
														 | 
														
															     leal 3(%ebx), %eax 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -154,13 +162,13 @@ __map_stage1_kinit: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     cmpl %ebx, %ecx 
														 | 
														
														 | 
														
															     cmpl %ebx, %ecx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     jne __map_stage1_kinit 
														 | 
														
														 | 
														
															     jne __map_stage1_kinit 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-# map __text_start ---- __bss_end to 0xc0000000 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+# map __text_start ---- __data_end to 0xc0000000 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     movl %ecx, %ebx 
														 | 
														
														 | 
														
															     movl %ecx, %ebx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     movl $__text_start, %edx 
														 | 
														
														 | 
														
															     movl $__text_start, %edx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     shrl $12, %edx 
														 | 
														
														 | 
														
															     shrl $12, %edx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     andl $0x3ff, %edx 
														 | 
														
														 | 
														
															     andl $0x3ff, %edx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    movl $__bss_end, %ecx 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    movl $__data_end, %ecx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     subl $__text_start, %ecx 
														 | 
														
														 | 
														
															     subl $__text_start, %ecx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     addl %ebx, %ecx 
														 | 
														
														 | 
														
															     addl %ebx, %ecx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -172,15 +180,29 @@ __map_kernel_space: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     cmpl %ebx, %ecx 
														 | 
														
														 | 
														
															     cmpl %ebx, %ecx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     jne __map_kernel_space 
														 | 
														
														 | 
														
															     jne __map_kernel_space 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+# map __data_end ---- __bss_end from 0x100000 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    movl $0x100000, %ebx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    movl $__bss_end, %ecx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    subl $__data_end, %ecx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    addl %ebx, %ecx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+__map_kernel_bss: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    leal 3(%ebx), %eax 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    movl %eax, 0x00003000(, %edx, 4) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    addl $0x1000, %ebx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    incl %edx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    cmpl %ebx, %ecx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    jne __map_kernel_bss 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 # map kernel stack 0xffffe000-0xffffffff 
														 | 
														
														 | 
														
															 # map kernel stack 0xffffe000-0xffffffff 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    movl $0x5000, %ebx 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    movl $0x7000, %ecx 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    movl $0x6000, %ebx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    movl $0x8000, %ecx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     movl $0x0ffffe, %edx 
														 | 
														
														 | 
														
															     movl $0x0ffffe, %edx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     andl $0x3ff, %edx 
														 | 
														
														 | 
														
															     andl $0x3ff, %edx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 __map_kernel_stack: 
														 | 
														
														 | 
														
															 __map_kernel_stack: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     leal 3(%ebx), %eax 
														 | 
														
														 | 
														
															     leal 3(%ebx), %eax 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    movl %eax, 0x00004000(, %edx, 4) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    movl %eax, 0x00005000(, %edx, 4) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     addl $0x1000, %ebx 
														 | 
														
														 | 
														
															     addl $0x1000, %ebx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     incl %edx 
														 | 
														
														 | 
														
															     incl %edx 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     cmpl %ebx, %ecx 
														 | 
														
														 | 
														
															     cmpl %ebx, %ecx 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -210,19 +232,6 @@ __stage1_halt: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     hlt 
														 | 
														
														 | 
														
															     hlt 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     jmp __stage1_halt 
														 | 
														
														 | 
														
															     jmp __stage1_halt 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-# quick call 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-# %eax: address to fill 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-# %ecx: byte count to fill 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-_fill_zero: 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    cmpl $0, %ecx 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    jz _fill_zero_end 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    subl $4, %ecx 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    movl $0, (%eax) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    addl $4, %eax 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    jmp _fill_zero 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-_fill_zero_end: 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    ret 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 asm_gdt_descriptor: 
														 | 
														
														 | 
														
															 asm_gdt_descriptor: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     .word (5 * 8) - 1 # size 
														 | 
														
														 | 
														
															     .word (5 * 8) - 1 # size 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     .long asm_gdt_table  # address 
														 | 
														
														 | 
														
															     .long asm_gdt_table  # address 
														 |