| 
				
			 | 
			
			
				
				@@ -79,9 +79,10 @@ install_block: 
			 | 
		
		
	
		
			
			| 
				79
			 | 
			
				79
			 | 
			
			
				
				  */ 
			 | 
		
		
	
		
			
			| 
				80
			 | 
			
				80
			 | 
			
			
				
				 	.section ".prefix.lib" 
			 | 
		
		
	
		
			
			| 
				81
			 | 
			
				81
			 | 
			
			
				
				 	.code16 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				82
			 | 
			
			
				
				+	.globl alloc_basemem 
			 | 
		
		
	
		
			
			| 
				82
			 | 
			
				83
			 | 
			
			
				
				 alloc_basemem: 
			 | 
		
		
	
		
			
			| 
				83
			 | 
			
				84
			 | 
			
			
				
				 	/* FBMS => %ax as segment address */ 
			 | 
		
		
	
		
			
			| 
				84
			 | 
			
				
			 | 
			
			
				
				-	movw	$40, %ax 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				85
			 | 
			
			
				
				+	movw	$0x40, %ax 
			 | 
		
		
	
		
			
			| 
				85
			 | 
			
				86
			 | 
			
			
				
				 	movw	%ax, %fs 
			 | 
		
		
	
		
			
			| 
				86
			 | 
			
				87
			 | 
			
			
				
				 	movw	%fs:0x13, %ax 
			 | 
		
		
	
		
			
			| 
				87
			 | 
			
				88
			 | 
			
			
				
				 	shlw	$6, %ax 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -120,6 +121,7 @@ alloc_basemem: 
			 | 
		
		
	
		
			
			| 
				120
			 | 
			
				121
			 | 
			
			
				
				  */ 
			 | 
		
		
	
		
			
			| 
				121
			 | 
			
				122
			 | 
			
			
				
				 	.section ".prefix.lib" 
			 | 
		
		
	
		
			
			| 
				122
			 | 
			
				123
			 | 
			
			
				
				 	.code16 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				124
			 | 
			
			
				
				+	.globl install_basemem 
			 | 
		
		
	
		
			
			| 
				123
			 | 
			
				125
			 | 
			
			
				
				 install_basemem: 
			 | 
		
		
	
		
			
			| 
				124
			 | 
			
				126
			 | 
			
			
				
				 	/* Preserve registers */ 
			 | 
		
		
	
		
			
			| 
				125
			 | 
			
				127
			 | 
			
			
				
				 	pushw	%es 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -137,7 +139,7 @@ install_basemem: 
			 | 
		
		
	
		
			
			| 
				137
			 | 
			
				139
			 | 
			
			
				
				 	/* Install .data16 */ 
			 | 
		
		
	
		
			
			| 
				138
			 | 
			
				140
			 | 
			
			
				
				 	movw	%bx, %es 
			 | 
		
		
	
		
			
			| 
				139
			 | 
			
				141
			 | 
			
			
				
				 	xorl	%edi, %edi	 
			 | 
		
		
	
		
			
			| 
				140
			 | 
			
				
			 | 
			
			
				
				-	movl	$_data16_load_offset_pgh, %esi 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				142
			 | 
			
			
				
				+	movl	$_data16_load_offset, %esi 
			 | 
		
		
	
		
			
			| 
				141
			 | 
			
				143
			 | 
			
			
				
				 	movl	$_data16_progbits_size, %ecx 
			 | 
		
		
	
		
			
			| 
				142
			 | 
			
				144
			 | 
			
			
				
				 	call	install_block 
			 | 
		
		
	
		
			
			| 
				143
			 | 
			
				145
			 | 
			
			
				
				  
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -199,7 +201,7 @@ set_segment_limits: 
			 | 
		
		
	
		
			
			| 
				199
			 | 
			
				201
			 | 
			
			
				
				 	/* Set GDT base and load GDT */ 
			 | 
		
		
	
		
			
			| 
				200
			 | 
			
				202
			 | 
			
			
				
				 	xorl	%eax, %eax 
			 | 
		
		
	
		
			
			| 
				201
			 | 
			
				203
			 | 
			
			
				
				 	movw	%cs, %ax 
			 | 
		
		
	
		
			
			| 
				202
			 | 
			
				
			 | 
			
			
				
				-	shrl	$4, %eax 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				204
			 | 
			
			
				
				+	shll	$4, %eax 
			 | 
		
		
	
		
			
			| 
				203
			 | 
			
				205
			 | 
			
			
				
				 	addl	$gdt, %eax 
			 | 
		
		
	
		
			
			| 
				204
			 | 
			
				206
			 | 
			
			
				
				 	movl	%eax, %cs:gdt_base 
			 | 
		
		
	
		
			
			| 
				205
			 | 
			
				207
			 | 
			
			
				
				 	lgdt	%cs:gdt 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -235,6 +237,7 @@ set_segment_limits: 
			 | 
		
		
	
		
			
			| 
				235
			 | 
			
				237
			 | 
			
			
				
				  */ 
			 | 
		
		
	
		
			
			| 
				236
			 | 
			
				238
			 | 
			
			
				
				 	.section ".prefix.lib" 
			 | 
		
		
	
		
			
			| 
				237
			 | 
			
				239
			 | 
			
			
				
				 	.code16 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				240
			 | 
			
			
				
				+	.globl install_highmem 
			 | 
		
		
	
		
			
			| 
				238
			 | 
			
				241
			 | 
			
			
				
				 install_highmem: 
			 | 
		
		
	
		
			
			| 
				239
			 | 
			
				242
			 | 
			
			
				
				 	/* Preserve registers and interrupt status */ 
			 | 
		
		
	
		
			
			| 
				240
			 | 
			
				243
			 | 
			
			
				
				 	pushfl 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -248,10 +251,10 @@ install_highmem: 
			 | 
		
		
	
		
			
			| 
				248
			 | 
			
				251
			 | 
			
			
				
				 	call	set_segment_limits 
			 | 
		
		
	
		
			
			| 
				249
			 | 
			
				252
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				250
			 | 
			
				253
			 | 
			
			
				
				 	/* Install .text and .data to specified address */ 
			 | 
		
		
	
		
			
			| 
				251
			 | 
			
				
			 | 
			
			
				
				-	xorw	%ax, %ax 
			 | 
		
		
	
		
			
			| 
				252
			 | 
			
				
			 | 
			
			
				
				-	movw	%ax, %es 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				254
			 | 
			
			
				
				+	xorw	%cx, %cx 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				255
			 | 
			
			
				
				+	movw	%cx, %es 
			 | 
		
		
	
		
			
			| 
				253
			 | 
			
				256
			 | 
			
			
				
				 	movl	$_text_load_offset, %esi 
			 | 
		
		
	
		
			
			| 
				254
			 | 
			
				
			 | 
			
			
				
				-	movl	$_text_and_data_progbits_size, %ecx 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				257
			 | 
			
			
				
				+	movl	$_text_progbits_size, %ecx 
			 | 
		
		
	
		
			
			| 
				255
			 | 
			
				258
			 | 
			
			
				
				 	call	install_block 
			 | 
		
		
	
		
			
			| 
				256
			 | 
			
				259
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				257
			 | 
			
				260
			 | 
			
			
				
				 	/* Unflatten real mode */ 
			 |