feat: print memory map
This commit is contained in:
		
							parent
							
								
									16d9802872
								
							
						
					
					
						commit
						4a63e27d4b
					
				
					 6 changed files with 91 additions and 25 deletions
				
			
		
							
								
								
									
										71
									
								
								boot/common/bootinfo.inc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								boot/common/bootinfo.inc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,71 @@ | ||||||
|  | 
 | ||||||
|  | struc BootInfoRange { | ||||||
|  | 	.base dd ? | ||||||
|  | 	.legth dd ? | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | struc BootInfo { | ||||||
|  | 	.mmap dd 4*2*40 dup(0) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | BOOTINFO_MEMORY_LIMIT = 0xFFFFF000 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	;; Function: boot_info_add_memmap | ||||||
|  | 	;; | ||||||
|  | 	;; In: | ||||||
|  | 	;;     EAX - base | ||||||
|  | 	;;     EDX - length | ||||||
|  | 	;; | ||||||
|  | boot_info_add_memmap: | ||||||
|  | 	cmp eax, BOOTINFO_MEMORY_LIMIT | ||||||
|  | 	jbe @f | ||||||
|  | 	ret | ||||||
|  | @@: | ||||||
|  | 	mov ecx, BOOTINFO_MEMORY_LIMIT | ||||||
|  | 	sub ecx, edx | ||||||
|  | 	cmp eax, ecx | ||||||
|  | 	jbe @f | ||||||
|  | 	ret | ||||||
|  | @@: | ||||||
|  | 	push ebx | ||||||
|  | 	xor ecx, ecx | ||||||
|  | .loop: | ||||||
|  | 	mov ebx, [boot_structure.mmap + ecx * 8 + 4] | ||||||
|  | 	or ebx, ebx | ||||||
|  | 	jnz @f | ||||||
|  | 	mov [boot_structure.mmap + ecx * 8], eax | ||||||
|  | 	mov [boot_structure.mmap + ecx * 8 + 4], edx | ||||||
|  | 	jmp .end | ||||||
|  | @@: | ||||||
|  | 	inc ecx | ||||||
|  | 	cmp ecx, 40 | ||||||
|  | 	jne .loop | ||||||
|  | 
 | ||||||
|  | .end: | ||||||
|  | 	pop ebx | ||||||
|  | 	ret | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	;; Function: boot_info_print_mmap | ||||||
|  | boot_info_print_mmap: | ||||||
|  | 	xchg bx, bx | ||||||
|  | 	xor ecx, ecx | ||||||
|  | .loop: | ||||||
|  | 	mov eax, [boot_structure.mmap + ecx * 8 + 4] | ||||||
|  | 	or eax, eax | ||||||
|  | 	jz @f | ||||||
|  | 	push ecx | ||||||
|  | 	push dword [boot_structure.mmap + ecx * 8 + 4] | ||||||
|  | 	push dword [boot_structure.mmap + ecx * 8] | ||||||
|  | 	mov si, szMsgMemMap | ||||||
|  | 	call bios_log | ||||||
|  | 	pop ecx | ||||||
|  | 	xchg bx, bx | ||||||
|  | @@: | ||||||
|  | 	inc ecx | ||||||
|  | 	cmp ecx, 40 | ||||||
|  | 	jbe .loop | ||||||
|  | 	ret | ||||||
|  | 
 | ||||||
|  | szMsgMemMap db 'Address: %x - Length: %x' | ||||||
|  | @ -96,7 +96,7 @@ aSearchPaths du '\\', 0, \ | ||||||
| 				'\\boot', 0, \ | 				'\\boot', 0, \ | ||||||
| 				'\\boot\\efi', 0, 0 | 				'\\boot\\efi', 0, 0 | ||||||
| szKernelFile du 'vmstupid.sys', 0 | szKernelFile du 'vmstupid.sys', 0 | ||||||
| szConfigFile du 'stpdboot.cfg', 0  | szConfigFile du 'stpdboot.ini', 0  | ||||||
| 
 | 
 | ||||||
| hImage       dd ? | hImage       dd ? | ||||||
| pSystemTable dd ? | pSystemTable dd ? | ||||||
|  |  | ||||||
|  | @ -50,4 +50,3 @@ Section: UEFI (IA32) | ||||||
| > | BOOTIA32.EFI |----->| vmstupid.sys | | > | BOOTIA32.EFI |----->| vmstupid.sys | | ||||||
| > +--------------+      +--------------+ | > +--------------+      +--------------+ | ||||||
| > | > | ||||||
| 
 |  | ||||||
|  |  | ||||||
|  | @ -99,6 +99,10 @@ _start: | ||||||
| 	call memory_get_map | 	call memory_get_map | ||||||
| 	jc .error_memory | 	jc .error_memory | ||||||
| 
 | 
 | ||||||
|  | 	xchg bx, bx | ||||||
|  | 
 | ||||||
|  | 	call boot_info_print_mmap | ||||||
|  | 
 | ||||||
| 	; video information | 	; video information | ||||||
| 	call video_setup | 	call video_setup | ||||||
| 
 | 
 | ||||||
|  | @ -142,6 +146,7 @@ _start: | ||||||
| 	include 'memory.inc' | 	include 'memory.inc' | ||||||
| 	include 'video.inc' | 	include 'video.inc' | ||||||
| 	include 'gdt.inc' | 	include 'gdt.inc' | ||||||
|  | 	include '../common/bootinfo.inc' | ||||||
| 
 | 
 | ||||||
| uDrive    rb 1 | uDrive    rb 1 | ||||||
| bDriveLBA db FALSE | bDriveLBA db FALSE | ||||||
|  | @ -199,7 +204,7 @@ hang: | ||||||
| 
 | 
 | ||||||
| _edata: | _edata: | ||||||
| 
 | 
 | ||||||
| boot_structure: | boot_structure BootInfo | ||||||
| 
 | 
 | ||||||
| 	align 4096 | 	align 4096 | ||||||
| boot_page_directory: | boot_page_directory: | ||||||
|  |  | ||||||
|  | @ -76,11 +76,15 @@ memory_get_for_large_conf: | ||||||
| 	mov ax, 0xE801 | 	mov ax, 0xE801 | ||||||
| 	int 0x15 | 	int 0x15 | ||||||
| 	jc @f | 	jc @f | ||||||
| 	xor ecx, ecx | 
 | ||||||
| 	push ax | 	movzx edx, ax | ||||||
| 	push bx | 	mov eax, 0x100000 ; 1MB | ||||||
| 	mov si, szMsgLarge | 	call boot_info_add_memmap | ||||||
| 	call bios_log | 
 | ||||||
|  | 	mov eax, 0x1000000 ; 16MB | ||||||
|  | 	movzx edx, bx | ||||||
|  | 	shl edx, 16 ; * 64KB | ||||||
|  | 	call boot_info_add_memmap | ||||||
| @@: | @@: | ||||||
| 	ret | 	ret | ||||||
| 
 | 
 | ||||||
|  | @ -104,22 +108,10 @@ memory_get_map: | ||||||
| 
 | 
 | ||||||
| 	jc .end | 	jc .end | ||||||
| 
 | 
 | ||||||
| 	xor ebx, ebx | 	movzx edx, ax | ||||||
| 	mov bx, ax | 	mov eax, 0x100000 | ||||||
| 	push ebx | 	call boot_info_add_memmap | ||||||
| 	mov si, szMsgMaxMemKB |  | ||||||
| 	call bios_log |  | ||||||
| 
 |  | ||||||
| 	shr ebx, 2 |  | ||||||
| 
 |  | ||||||
| 	push ebx |  | ||||||
| 	mov si, szMsgMaxPage |  | ||||||
| 	call bios_log |  | ||||||
| 
 | 
 | ||||||
| .end: | .end: | ||||||
| 	ret | 	ret | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| szMsgMaxMemKB db "%x KB above 1MB", 0 |  | ||||||
| szMsgMaxPage db "%x pages", 0 |  | ||||||
| szMsgLarge db "%d KB above 1MB - %d * 64 KB above 16MB", 0 |  | ||||||
|  |  | ||||||
|  | @ -60,7 +60,6 @@ video_setup: | ||||||
| 	mov si, szMsgDetectVideo | 	mov si, szMsgDetectVideo | ||||||
| 	call bios_log | 	call bios_log | ||||||
| 	clc | 	clc | ||||||
| 	xchg bx, bx |  | ||||||
| 	xor ax, ax | 	xor ax, ax | ||||||
| 	mov es, ax | 	mov es, ax | ||||||
| 	mov di, vesa_block_buffer | 	mov di, vesa_block_buffer | ||||||
|  | @ -109,5 +108,5 @@ vesa_info_block_buffer VesaModeInfo | ||||||
| 
 | 
 | ||||||
| szMsgVesaInfo db "Version: %x", CR, LF, "OEM Name: %s", CR, LF, "Total Memory: %d", CR, LF, "Vendor name: %s", CR, LF, "Product name: %s", 0 | szMsgVesaInfo db "Version: %x", CR, LF, "OEM Name: %s", CR, LF, "Total Memory: %d", CR, LF, "Vendor name: %s", CR, LF, "Product name: %s", 0 | ||||||
| szMsgDetectVideo db "Fetch video information.", 0 | szMsgDetectVideo db "Fetch video information.", 0 | ||||||
| szMsgFramebuffer db "Fb: 0x%x", 0 | szMsgFramebuffer db "Fb: %x", 0 | ||||||
| szMsgErrorVesa db "Failed to detect VBE mode", 0 | szMsgErrorVesa db "Failed to detect VBE mode", 0 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue