diff --git a/src/framebuffer.asm b/src/framebuffer.asm index 5204798..d831dec 100644 --- a/src/framebuffer.asm +++ b/src/framebuffer.asm @@ -8,23 +8,17 @@ putpixel: push ecx push edi - ; check pixel is in screen - mov ebx, [ebp+12] ;y - cmp ebx, [mbootinfo.fb_height] - jge .done - mov ecx, [ebp+8] ;x - cmp ecx, [mbootinfo.fb_width] - jge .done + cld ; Destination mov edi, [mbootinfo.fb_addr] mov eax, [mbootinfo.fb_pitch] - mul dword ebx ;y + mul dword [ebp+12] ;y add edi, eax - mov eax, ecx ;x - movzx ecx, byte [mbootinfo.fb_bytespp] - mul ecx + mov eax, [ebp+8] ;x + movzx ebx, byte [mbootinfo.fb_bytespp] + mul ebx add edi, eax @@ -32,8 +26,13 @@ putpixel: mov eax, [ebp + 16] ; Poke videomemory - cld - rep stosb + stosb + stosb + stosb + + cmp [mbootinfo.fb_bpp], 24 + je .done + stosb .done: pop edi pop ecx diff --git a/src/mbootinfo.asm b/src/mbootinfo.asm index 2ff07e8..1a6f559 100644 --- a/src/mbootinfo.asm +++ b/src/mbootinfo.asm @@ -45,6 +45,12 @@ mbootgetinfo: 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 diff --git a/src/start32.asm b/src/start32.asm index f8e5d36..fc3ae85 100644 --- a/src/start32.asm +++ b/src/start32.asm @@ -11,9 +11,8 @@ MB_HEADER_FLAGS equ MB_PAGE_ALIGN or MB_MEMORY_INFO or MB_VIDEO_REQUEST MB_HEADER_FLAGS equ MB_PAGE_ALIGN or MB_MEMORY_INFO or MB_VIDEO_REQUEST or MB_AOUT_KLUDGE MB_CHECKSUM equ -(MB_HEADER_MAGIC + MB_HEADER_FLAGS) -VWIDTH equ 640 -VHEIGHT equ 480 -VDEPTH equ 24 +VWIDTH equ 1024 +VHEIGHT equ 768 multiboot: dd MB_HEADER_MAGIC @@ -27,7 +26,7 @@ multiboot: dd 0 ; video mode_type (0:fb, 1:txt) (set flags[2]!) dd VWIDTH ; video width dd VHEIGHT ; video height - dd VDEPTH ; video depth + dd 24 ; video depth start: ; Setup stack @@ -104,8 +103,8 @@ start: mov ebx, 767 mov ecx, 1023 push 0xff - push 479 - push 639 + push 767 + push 1023 call putpixel add esp, 3*4