Multiboot parsing and uitoa impl
This commit is contained in:
parent
ebf9982c07
commit
e16da3adc8
4 changed files with 291 additions and 45 deletions
118
src/mbootinfo.asm
Normal file
118
src/mbootinfo.asm
Normal file
|
|
@ -0,0 +1,118 @@
|
|||
mbootgetinfo:
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
cld
|
||||
|
||||
mov eax, [ebp+8]
|
||||
cmp eax, 0x2badb002
|
||||
jne mbootnomagic
|
||||
|
||||
mov ebx, [ebp+12]
|
||||
mov eax, [ebx]
|
||||
mov [mbootinfo.flags], eax
|
||||
|
||||
;; Get memoryinformation
|
||||
test eax, 1b
|
||||
jz mbootnomeminfo
|
||||
mov eax, [ebx+4]
|
||||
mov [mbootinfo.mem_lower], eax
|
||||
mov eax, [ebx+8]
|
||||
mov [mbootinfo.mem_upper], eax
|
||||
|
||||
;; Get videoinformation
|
||||
test [mbootinfo.flags], (1 shl 02)
|
||||
jz mbootnovideoinfo
|
||||
|
||||
mov esi, ebx
|
||||
add esi, 88
|
||||
mov eax, [esi]
|
||||
mov [mbootinfo.fb_addr], eax
|
||||
add esi, 8
|
||||
|
||||
mov eax, [esi]
|
||||
mov [mbootinfo.fb_pitch], eax
|
||||
add esi, 4
|
||||
|
||||
mov eax, [esi]
|
||||
mov [mbootinfo.fb_width], eax
|
||||
add esi, 4
|
||||
|
||||
mov eax, [esi]
|
||||
mov [mbootinfo.fb_height], eax
|
||||
add esi, 4
|
||||
|
||||
mov al, [esi]
|
||||
cmp al, 32
|
||||
je .bppokay
|
||||
cmp al, 24
|
||||
je .bppokay
|
||||
jmp mbootunsupportedfbbpp
|
||||
.bppokay:
|
||||
mov [mbootinfo.fb_bpp], al
|
||||
inc esi
|
||||
|
||||
mov al, [esi]
|
||||
cmp al, 1
|
||||
jne mbootunsupportedfbtype
|
||||
mov [mbootinfo.fb_type], al
|
||||
inc esi
|
||||
|
||||
;; r/g/b positions and masks
|
||||
mov ecx, 6
|
||||
mov edi, mbootinfo.fb_rpos
|
||||
rep movsb
|
||||
|
||||
.done:
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
pop ebp
|
||||
ret
|
||||
|
||||
|
||||
mbootnomagic:
|
||||
push .msg
|
||||
call serialwrite
|
||||
jmp hang
|
||||
.msg db "No multiboot magic!", 10, 0
|
||||
mbootnomeminfo:
|
||||
push .msg
|
||||
call serialwrite
|
||||
jmp hang
|
||||
.msg db "No memoryinfo!", 10, 0
|
||||
mbootnovideoinfo:
|
||||
push .msg
|
||||
call serialwrite
|
||||
jmp hang
|
||||
.msg db "No videoryinfo!", 10, 0
|
||||
mbootunsupportedfbtype:
|
||||
push .msg
|
||||
call serialwrite
|
||||
jmp hang
|
||||
.msg db "Unsupported framebuffer type: only direct RGB is supported!", 10, 0
|
||||
mbootunsupportedfbbpp:
|
||||
push .msg
|
||||
call serialwrite
|
||||
jmp hang
|
||||
.msg db "Unsupported bitdepth: only 24 and 32 bpp supported!", 10, 0
|
||||
|
||||
|
||||
mbootinfo:
|
||||
.flags dd 0
|
||||
.mem_lower dd 0
|
||||
.mem_upper dd 0
|
||||
.fb_addr dd 0
|
||||
.fb_pitch dd 0
|
||||
.fb_width dd 0
|
||||
.fb_height dd 0
|
||||
.fb_bpp db 0
|
||||
.fb_type db 0
|
||||
.fb_rpos db 0
|
||||
.fb_rmasksize db 0
|
||||
.fb_gpos db 0
|
||||
.fb_gmasksize db 0
|
||||
.fb_bpos db 0
|
||||
.fb_bmasksize db 0
|
||||
Loading…
Add table
Add a link
Reference in a new issue