feat: print memory map
This commit is contained in:
parent
16d9802872
commit
4a63e27d4b
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…
Reference in a new issue