Video draw and VESA - some speedup.

git-svn-id: svn://kolibrios.org@2453 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Marat Zakiyanov (Mario79) 2012-03-12 18:26:37 +00:00
parent c039e0039c
commit 54ec7e5e23
9 changed files with 313 additions and 137 deletions

View File

@ -164,17 +164,17 @@ dll_cur_addr dd MIN_DEFAULT_DLL_ADDR
; mike.dld { ; mike.dld {
db 0 ;db 0
dd servetable-0x10000 ;dd servetable-0x10000
align 4 ;align 4
draw_line dd __sys_draw_line ;draw_line dd __sys_draw_line
draw_pointer dd __sys_draw_pointer ;draw_pointer dd __sys_draw_pointer
;//mike.dld, 2006-08-02 [ ;//mike.dld, 2006-08-02 [
;drawbar dd __sys_drawbar ;;drawbar dd __sys_drawbar
;drawbar dd __sys_drawbar.forced ;;drawbar dd __sys_drawbar.forced
drawbar dd vesa20_drawbar ;drawbar dd vesa20_drawbar
;//mike.dld, 2006-08-02 ] ;//mike.dld, 2006-08-02 ]
putpixel dd __sys_putpixel ;putpixel dd __sys_putpixel
; } mike.dld ; } mike.dld

View File

@ -133,7 +133,8 @@ syscall_button: ;///// system function 8 //////////////////////////////////////
call button._.button_dececx call button._.button_dececx
push edi push edi
xor edi, edi xor edi, edi
call [draw_line] ; call [draw_line]
call __sys_draw_line
pop edi pop edi
add ebx, 0x00010001 add ebx, 0x00010001
dec edx dec edx
@ -164,7 +165,8 @@ syscall_button: ;///// system function 8 //////////////////////////////////////
xor edi, edi xor edi, edi
mov ecx, esi mov ecx, esi
call button._.incecx call button._.incecx
call [draw_line] ; call [draw_line]
call __sys_draw_line
; bottom border ; bottom border
movzx edx, word[esp + 4 + 0] movzx edx, word[esp + 4 + 0]
@ -173,7 +175,8 @@ syscall_button: ;///// system function 8 //////////////////////////////////////
add ebx, edx add ebx, edx
mov ecx, esi mov ecx, esi
call button._.dececx call button._.dececx
call [draw_line] ; call [draw_line]
call __sys_draw_line
; left border ; left border
pop ebx pop ebx
@ -188,7 +191,8 @@ syscall_button: ;///// system function 8 //////////////////////////////////////
pop edx pop edx
mov ecx, esi mov ecx, esi
call button._.incecx call button._.incecx
call [draw_line] ; call [draw_line]
call __sys_draw_line
; right border ; right border
mov dx, [esp + 4] mov dx, [esp + 4]
@ -198,7 +202,8 @@ syscall_button: ;///// system function 8 //////////////////////////////////////
add ebx, 0x00010000 add ebx, 0x00010000
mov ecx, esi mov ecx, esi
call button._.dececx call button._.dececx
call [draw_line] ; call [draw_line]
call __sys_draw_line
pop ecx ebx pop ecx ebx

View File

@ -77,7 +77,8 @@ align 4
jz .pixloop1end jz .pixloop1end
jnc .nopix jnc .nopix
and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area
call [putpixel] ; call [putpixel]
call __sys_putpixel
jmp .pixloop1cont jmp .pixloop1cont
;-------------------------------------- ;--------------------------------------
align 4 align 4
@ -87,7 +88,8 @@ align 4
push ecx push ecx
mov ecx, [esp+4+20h+20h] mov ecx, [esp+4+20h+20h]
and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area
call [putpixel] ; call [putpixel]
call __sys_putpixel
pop ecx pop ecx
;-------------------------------------- ;--------------------------------------
align 4 align 4
@ -123,7 +125,8 @@ align 4
shr dl, 1 shr dl, 1
jnc .nopix2 jnc .nopix2
and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area
call [putpixel] ; call [putpixel]
call __sys_putpixel
jmp .pixloop2cont jmp .pixloop2cont
;-------------------------------------- ;--------------------------------------
align 4 align 4
@ -133,7 +136,8 @@ align 4
push ecx push ecx
mov ecx, [esp+12+20h+20h] mov ecx, [esp+12+20h+20h]
and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area
call [putpixel] ; call [putpixel]
call __sys_putpixel
pop ecx pop ecx
;-------------------------------------- ;--------------------------------------
align 4 align 4

View File

@ -401,7 +401,8 @@ _dw3l:
inc ecx inc ecx
mov edx, [_skinh] mov edx, [_skinh]
mov edi, [common_colours+4]; standard grab color mov edi, [common_colours+4]; standard grab color
call [drawbar] ; call [drawbar]
call vesa20_drawbar
jmp draw_clientbar jmp draw_clientbar
;-------------------------------------- ;--------------------------------------
align 4 align 4
@ -428,7 +429,8 @@ draw_clientbar:
mov edi, [esi+WDATA.cl_workarea] mov edi, [esi+WDATA.cl_workarea]
test edi, 0x40000000 test edi, 0x40000000
jnz _noinside2 jnz _noinside2
call [drawbar] ; call [drawbar]
call vesa20_drawbar
;-------------------------------------- ;--------------------------------------
align 4 align 4
_noinside2: _noinside2:

View File

@ -60,7 +60,8 @@ align 4
; type II - only reserve area, no draw ; type II - only reserve area, no draw
; call sys_window_mouse ; call sys_window_mouse
call [draw_pointer] ; call [draw_pointer]
call __sys_draw_pointer
jmp .exit jmp .exit
;-------------------------------------- ;--------------------------------------
align 4 align 4
@ -681,14 +682,16 @@ align 4
test ecx, 1 shl 25 test ecx, 1 shl 25
jnz @f jnz @f
sub ecx, 1 shl 25 sub ecx, 1 shl 25
call [draw_line] ; call [draw_line]
call __sys_draw_line
;-------------------------------------- ;--------------------------------------
align 4 align 4
@@: @@:
; draw bottom border ; draw bottom border
mov ebx, [esp - 2] mov ebx, [esp - 2]
pop bx pop bx
call [draw_line] ; call [draw_line]
call __sys_draw_line
pop ebx pop ebx
add ebx, 1 * 65536 - 1 add ebx, 1 * 65536 - 1
@ -698,12 +701,14 @@ align 4
push eax push eax
rol eax, 16 rol eax, 16
pop ax pop ax
call [draw_line] ; call [draw_line]
call __sys_draw_line
; draw right border ; draw right border
mov eax, [esp - 2] mov eax, [esp - 2]
pop ax pop ax
call [draw_line] ; call [draw_line]
call __sys_draw_line
pop edi ecx ebx eax pop edi ecx ebx eax
ret ret
@ -760,7 +765,8 @@ align 4
align 4 align 4
@@: @@:
and ecx, 0x00ffffff and ecx, 0x00ffffff
call [draw_line] ; call [draw_line]
call __sys_draw_line
inc edx inc edx
cmp edx, [esp] cmp edx, [esp]
jb .next_line jb .next_line
@ -813,7 +819,8 @@ drawwindow_I: ;////////////////////////////////////////////////////////////////
mov ebx, 21 mov ebx, 21
mov ecx, [esi + WDATA.box.width] mov ecx, [esi + WDATA.box.width]
mov edx, [esi + WDATA.box.height] mov edx, [esi + WDATA.box.height]
call [drawbar] ; call [drawbar]
call vesa20_drawbar
;-------------------------------------- ;--------------------------------------
align 4 align 4
.exit: .exit:
@ -871,7 +878,8 @@ align 4
@@: @@:
mov [esi + WDATA.cl_titlebar], ecx mov [esi + WDATA.cl_titlebar], ecx
and ecx, 0x00ffffff and ecx, 0x00ffffff
call [draw_line] ; call [draw_line]
call __sys_draw_line
inc edx inc edx
cmp edx, [esp] cmp edx, [esp]
jb .next_line jb .next_line
@ -951,7 +959,8 @@ align 4
mov edx, [esi + WDATA.box.height] mov edx, [esi + WDATA.box.height]
sub ecx, 4 sub ecx, 4
sub edx, 4 sub edx, 4
call [drawbar] ; call [drawbar]
call vesa20_drawbar
;-------------------------------------- ;--------------------------------------
align 4 align 4
.exit: .exit:
@ -2314,7 +2323,8 @@ align 4
;-------------------------------------- ;--------------------------------------
align 4 align 4
.exit: .exit:
call [draw_pointer] ; call [draw_pointer]
call __sys_draw_pointer
ret ret
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
align 4 align 4

View File

@ -84,7 +84,8 @@ mres:
pop eax pop eax
mov edi, 1 ; force mov edi, 1 ; force
or ecx, 0x04000000 ; don't save to mouseunder area or ecx, 0x04000000 ; don't save to mouseunder area
call [putpixel] ; call [putpixel]
call __sys_putpixel
pop edx pop edx
pop ecx pop ecx
inc ecx inc ecx
@ -201,7 +202,8 @@ drm:
mov ecx, [MOUSE_COLOR_MEM] mov ecx, [MOUSE_COLOR_MEM]
mov edi, 1 ; force mov edi, 1 ; force
or ecx, 0x04000000 ; don't save to mouseunder area or ecx, 0x04000000 ; don't save to mouseunder area
call [putpixel] ; call [putpixel]
call __sys_putpixel
pop ecx pop ecx
mov ebx, [esp+0] ; pure y coord again mov ebx, [esp+0] ; pure y coord again
mov eax, [esp+4] ; and x mov eax, [esp+4] ; and x

View File

@ -1042,7 +1042,8 @@ boot_log:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
align 32 align 32
osloop: osloop:
call [draw_pointer] ; call [draw_pointer]
call __sys_draw_pointer
call window_check_events call window_check_events
call mouse_check_events call mouse_check_events
call checkmisc call checkmisc
@ -1974,7 +1975,8 @@ restore_default_cursor_before_killing:
mov [current_cursor], esi mov [current_cursor], esi
@@: @@:
mov [redrawmouse_unconditional], 1 mov [redrawmouse_unconditional], 1
call [draw_pointer] ; call [draw_pointer]
call __sys_draw_pointer
ret ret
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
iglobal iglobal
@ -3745,13 +3747,15 @@ dbrv20:
cmp [BgrDrawMode], dword 1 cmp [BgrDrawMode], dword 1
jne bgrstr jne bgrstr
call vesa20_drawbackground_tiled call vesa20_drawbackground_tiled
call [draw_pointer] ; call [draw_pointer]
call __sys_draw_pointer
ret ret
;-------------------------------------- ;--------------------------------------
align 4 align 4
bgrstr: bgrstr:
call vesa20_drawbackground_stretch call vesa20_drawbackground_stretch
call [draw_pointer] ; call [draw_pointer]
call __sys_draw_pointer
ret ret
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------
align 4 align 4
@ -4523,7 +4527,8 @@ syscall_setpixel: ; SetPixel
add ebx, [edi+APPDATA.wnd_clientbox.top] add ebx, [edi+APPDATA.wnd_clientbox.top]
xor edi, edi ; no force xor edi, edi ; no force
and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area
jmp [putpixel] ; jmp [putpixel]
jmp __sys_putpixel
align 4 align 4
@ -4580,7 +4585,8 @@ syscall_drawrect: ; DrawRect
add ebx, [esi + APPDATA.wnd_clientbox.top] add ebx, [esi + APPDATA.wnd_clientbox.top]
add ecx, eax add ecx, eax
add edx, ebx add edx, ebx
jmp [drawbar] ; jmp [drawbar]
jmp vesa20_drawbar
.drectr: .drectr:
ret ret
@ -4751,8 +4757,8 @@ syscall_drawline: ; DrawLine
xor edi, edi xor edi, edi
add ebx, ebp add ebx, ebp
mov ecx, edx mov ecx, edx
jmp [draw_line] ; jmp [draw_line]
jmp __sys_draw_line
align 4 align 4

View File

@ -421,7 +421,8 @@ align 4
jnz .outer32 jnz .outer32
.done: .done:
call [draw_pointer] ; call [draw_pointer]
call __sys_draw_pointer
.L57: .L57:
add esp, 72 add esp, 72
pop ebx pop ebx

View File

@ -285,8 +285,12 @@ align 4
;-------------------------------------- ;--------------------------------------
put_image_end_24: put_image_end_24:
mov edi, [putimg.real_sy] mov edi, [putimg.real_sy]
;--------------------------------------
; check for hardware cursor
cmp [_display.select_cursor], 0 cmp [_display.select_cursor], 0
jne put_image_end_24_new je put_image_end_24_old
cmp [_display.select_cursor], select_cursor
je put_image_end_24_new
;-------------------------------------- ;--------------------------------------
align 4 align 4
.new_line: .new_line:
@ -300,23 +304,6 @@ align 4
cmp [ebp], bl cmp [ebp], bl
jne .skip jne .skip
;-------------------------------------- ;--------------------------------------
; check for hardware cursor
cmp [_display.select_cursor], 0
jne .no_mouseunder
push ecx
neg ecx
add ecx, [putimg.real_sx_and_abs_cx + 4]
shl ecx, 16
add ecx, [putimg.real_sy_and_abs_cy + 4]
sub ecx, edi
; check mouse area for putpixel
call check_mouse_area_for_putpixel
pop ecx
;--------------------------------------
align 4
.no_mouseunder:
; store to real LFB ; store to real LFB
mov [LFB_BASE+edx], ax mov [LFB_BASE+edx], ax
shr eax, 16 shr eax, 16
@ -355,8 +342,68 @@ align 4
add esp, putimg.stack_data add esp, putimg.stack_data
popad popad
ret ret
;------------------------------------------------------------------------------
align 4
put_image_end_24_old:
;-------------------------------------- ;--------------------------------------
align 4 align 4
.new_line:
mov ecx, [putimg.real_sx]
;--------------------------------------
align 4
.new_x:
push [putimg.edi]
mov eax, [putimg.ebp+4]
call eax
cmp [ebp], bl
jne .skip
;--------------------------------------
push ecx
neg ecx
add ecx, [putimg.real_sx_and_abs_cx + 4]
shl ecx, 16
add ecx, [putimg.real_sy_and_abs_cy + 4]
sub ecx, edi
; check mouse area for putpixel
call check_mouse_area_for_putpixel
pop ecx
; store to real LFB
mov [LFB_BASE+edx], ax
shr eax, 16
mov [LFB_BASE+edx+2], al
;--------------------------------------
align 4
.skip:
add edx, 3
inc ebp
dec ecx
jnz .new_x
add esi, [putimg.line_increment]
add edx, [putimg.screen_newline];[BytesPerScanLine]
add ebp, [putimg.winmap_newline];[Screen_Max_X]
cmp [putimg.ebp], putimage_get1bpp
jz .correct
cmp [putimg.ebp], putimage_get2bpp
jz .correct
cmp [putimg.ebp], putimage_get4bpp
jnz @f
;--------------------------------------
align 4
.correct:
mov eax, [putimg.edi]
mov byte [eax], 80h
;--------------------------------------
align 4
@@:
dec edi
jnz .new_line
jmp put_image_end_24.finish
;------------------------------------------------------------------------------
align 4
put_image_end_24_new: put_image_end_24_new:
;-------------------------------------- ;--------------------------------------
align 4 align 4
@ -371,10 +418,6 @@ align 4
cmp [ebp], bl cmp [ebp], bl
jne .skip jne .skip
;-------------------------------------- ;--------------------------------------
; check for hardware cursor
cmp [_display.select_cursor], select_cursor
jne .no_mouseunder
push ecx push ecx
mov ecx, [putimg.real_sy_and_abs_cy + 4] mov ecx, [putimg.real_sy_and_abs_cy + 4]
sub ecx, edi sub ecx, edi
@ -403,9 +446,6 @@ align 4
align 4 align 4
.no_mouse_area: .no_mouse_area:
pop ecx pop ecx
;--------------------------------------
align 4
.no_mouseunder:
; store to real LFB ; store to real LFB
mov [LFB_BASE+edx], ax mov [LFB_BASE+edx], ax
shr eax, 16 shr eax, 16
@ -443,8 +483,12 @@ align 4
align 4 align 4
put_image_end_32: put_image_end_32:
mov edi, [putimg.real_sy] mov edi, [putimg.real_sy]
;--------------------------------------
; check for hardware cursor
cmp [_display.select_cursor], 0 cmp [_display.select_cursor], 0
jne put_image_end_32_new je put_image_end_32_old
cmp [_display.select_cursor], select_cursor
je put_image_end_32_new
;-------------------------------------- ;--------------------------------------
align 4 align 4
.new_line: .new_line:
@ -458,24 +502,6 @@ align 4
cmp [ebp], bl cmp [ebp], bl
jne .skip jne .skip
;-------------------------------------- ;--------------------------------------
; check for hardware cursor
cmp [_display.select_cursor], 0
jne .no_mouseunder
push ecx
neg ecx
add ecx, [putimg.real_sx_and_abs_cx + 4]
shl ecx, 16
add ecx, [putimg.real_sy_and_abs_cy + 4]
sub ecx, edi
; check mouse area for putpixel
call check_mouse_area_for_putpixel
pop ecx
;--------------------------------------
align 4
.no_mouseunder:
; store to real LFB ; store to real LFB
mov [LFB_BASE+edx], eax mov [LFB_BASE+edx], eax
;-------------------------------------- ;--------------------------------------
@ -519,8 +545,66 @@ align 4
@@: @@:
mov [EGA_counter], 1 mov [EGA_counter], 1
ret ret
;------------------------------------------------------------------------------
align 4
put_image_end_32_old:
;-------------------------------------- ;--------------------------------------
align 4 align 4
.new_line:
mov ecx, [putimg.real_sx]
;--------------------------------------
align 4
.new_x:
push [putimg.edi]
mov eax, [putimg.ebp+4]
call eax
cmp [ebp], bl
jne .skip
;--------------------------------------
push ecx
neg ecx
add ecx, [putimg.real_sx_and_abs_cx + 4]
shl ecx, 16
add ecx, [putimg.real_sy_and_abs_cy + 4]
sub ecx, edi
; check mouse area for putpixel
call check_mouse_area_for_putpixel
pop ecx
; store to real LFB
mov [LFB_BASE+edx], eax
;--------------------------------------
align 4
.skip:
add edx, 4
inc ebp
dec ecx
jnz .new_x
add esi, [putimg.line_increment]
add edx, [putimg.screen_newline];[BytesPerScanLine]
add ebp, [putimg.winmap_newline];[Screen_Max_X]
cmp [putimg.ebp], putimage_get1bpp
jz .correct
cmp [putimg.ebp], putimage_get2bpp
jz .correct
cmp [putimg.ebp], putimage_get4bpp
jnz @f
;--------------------------------------
align 4
.correct:
mov eax, [putimg.edi]
mov byte [eax], 80h
;--------------------------------------
align 4
@@:
dec edi
jnz .new_line
jmp put_image_end_32.finish
;------------------------------------------------------------------------------
align 4
put_image_end_32_new: put_image_end_32_new:
;-------------------------------------- ;--------------------------------------
align 4 align 4
@ -535,9 +619,6 @@ align 4
cmp [ebp], bl cmp [ebp], bl
jne .skip jne .skip
;-------------------------------------- ;--------------------------------------
; check for hardware cursor
cmp [_display.select_cursor], select_cursor
jne .no_mouseunder
push ecx push ecx
mov ecx, [putimg.real_sy_and_abs_cy + 4] mov ecx, [putimg.real_sy_and_abs_cy + 4]
sub ecx, edi sub ecx, edi
@ -566,9 +647,6 @@ align 4
align 4 align 4
.no_mouse_area: .no_mouse_area:
pop ecx pop ecx
;--------------------------------------
align 4
.no_mouseunder:
; store to real LFB ; store to real LFB
mov [LFB_BASE+edx], eax mov [LFB_BASE+edx], eax
;-------------------------------------- ;--------------------------------------
@ -975,7 +1053,8 @@ align 4
;-------------------------------------- ;--------------------------------------
shr ebx, 16 shr ebx, 16
and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area
call [putpixel] ; call [putpixel]
call __sys_putpixel
pop ebx eax pop ebx eax
add ebx, ebp ; y = y+dy add ebx, ebp ; y = y+dy
add eax, esi ; x = x+dx add eax, esi ; x = x+dx
@ -985,7 +1064,8 @@ align 4
mov eax, [dl_x2] mov eax, [dl_x2]
mov ebx, [dl_y2] mov ebx, [dl_y2]
and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area
call [putpixel] ; call [putpixel]
call __sys_putpixel
;-------------------------------------- ;--------------------------------------
align 4 align 4
.exit: .exit:
@ -1010,7 +1090,8 @@ hline:
align 4 align 4
@@: @@:
and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area
call [putpixel] ; call [putpixel]
call __sys_putpixel
inc eax inc eax
cmp eax, edx cmp eax, edx
jle @b jle @b
@ -1033,7 +1114,8 @@ vline:
align 4 align 4
@@: @@:
and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area
call [putpixel] ; call [putpixel]
call __sys_putpixel
inc ebx inc ebx
cmp ebx, edx cmp ebx, edx
jle @b jle @b
@ -1199,8 +1281,12 @@ draw_bar_end_24:
; edx - pointer to screen ; edx - pointer to screen
; esi - counter ; esi - counter
; edi - counter ; edi - counter
;--------------------------------------
; check for hardware cursor
cmp [_display.select_cursor], 0 cmp [_display.select_cursor], 0
jne draw_bar_end_24_new je draw_bar_end_24_old
cmp [_display.select_cursor], select_cursor
je draw_bar_end_24_new
;-------------------------------------- ;--------------------------------------
align 4 align 4
.new_y: .new_y:
@ -1211,26 +1297,10 @@ align 4
cmp byte [ebp], bl cmp byte [ebp], bl
jne .skip jne .skip
;-------------------------------------- ;--------------------------------------
; check for hardware cursor
cmp [_display.select_cursor], 0
jne .no_mouseunder
mov ecx, [drbar.real_sx_and_abs_cx]
sub ecx, edi
shl ecx, 16
add ecx, [drbar.real_sy_and_abs_cy]
sub ecx, esi
; check mouse area for putpixel
call check_mouse_area_for_putpixel
;--------------------------------------
align 4
.no_mouseunder:
; store to real LFB ; store to real LFB
mov [edx], ax mov [edx], ax
shr eax, 16 shr eax, 16
mov [edx + 2], al mov [edx + 2], al
mov eax, [drbar.color]
;-------------------------------------- ;--------------------------------------
align 4 align 4
.skip: .skip:
@ -1260,8 +1330,56 @@ align 4
popad popad
xor eax, eax xor eax, eax
ret ret
;------------------------------------------------------------------------------
align 4
draw_bar_end_24_old:
;-------------------------------------- ;--------------------------------------
align 4 align 4
.new_y:
mov edi, [drbar.real_sx]
;--------------------------------------
align 4
.new_x:
cmp byte [ebp], bl
jne .skip
;--------------------------------------
mov ecx, [drbar.real_sx_and_abs_cx]
sub ecx, edi
shl ecx, 16
add ecx, [drbar.real_sy_and_abs_cy]
sub ecx, esi
; check mouse area for putpixel
call check_mouse_area_for_putpixel
; store to real LFB
mov [edx], ax
shr eax, 16
mov [edx + 2], al
mov eax, [drbar.color]
;--------------------------------------
align 4
.skip:
; add pixel
add edx, 3
inc ebp
dec edi
jnz .new_x
; add line
add edx, [drbar.line_inc_scr]
add ebp, [drbar.line_inc_map]
; drawing gradient bars
test bh, 0x80
jz @f
test al, al
jz @f
dec al
;--------------------------------------
align 4
@@:
dec esi
jnz .new_y
jmp draw_bar_end_24.end
;------------------------------------------------------------------------------
align 4
draw_bar_end_24_new: draw_bar_end_24_new:
;-------------------------------------- ;--------------------------------------
align 4 align 4
@ -1273,10 +1391,6 @@ align 4
cmp byte [ebp], bl cmp byte [ebp], bl
jne .skip jne .skip
;-------------------------------------- ;--------------------------------------
; check for hardware cursor
cmp [_display.select_cursor], select_cursor
jne .no_mouse_area
mov ecx, [drbar.real_sy_and_abs_cy] mov ecx, [drbar.real_sy_and_abs_cy]
sub ecx, esi sub ecx, esi
;-------------------------------------- ;--------------------------------------
@ -1336,7 +1450,7 @@ align 4
dec esi dec esi
jnz .new_y jnz .new_y
jmp draw_bar_end_24.end jmp draw_bar_end_24.end
;-------------------------------------- ;------------------------------------------------------------------------------
align 4 align 4
draw_bar_end_32: draw_bar_end_32:
; eax - color high RRGGBB ; eax - color high RRGGBB
@ -1345,8 +1459,12 @@ draw_bar_end_32:
; edx - pointer to screen ; edx - pointer to screen
; esi - counter ; esi - counter
; edi - counter ; edi - counter
;--------------------------------------
; check for hardware cursor
cmp [_display.select_cursor], 0 cmp [_display.select_cursor], 0
jne draw_bar_end_32_new je draw_bar_end_32_old
cmp [_display.select_cursor], select_cursor
je draw_bar_end_32_new
;-------------------------------------- ;--------------------------------------
align 4 align 4
.new_y: .new_y:
@ -1357,21 +1475,6 @@ align 4
cmp byte [ebp], bl cmp byte [ebp], bl
jne .skip jne .skip
;-------------------------------------- ;--------------------------------------
; check for hardware cursor
cmp [_display.select_cursor], 0
jne .no_mouseunder
mov ecx, [drbar.real_sx_and_abs_cx]
sub ecx, edi
shl ecx, 16
add ecx, [drbar.real_sy_and_abs_cy]
sub ecx, esi
; check mouse area for putpixel
call check_mouse_area_for_putpixel
;--------------------------------------
align 4
.no_mouseunder:
; store to real LFB ; store to real LFB
mov [edx], eax mov [edx], eax
mov eax, [drbar.color] mov eax, [drbar.color]
@ -1411,8 +1514,55 @@ align 4
xor eax, eax xor eax, eax
mov [EGA_counter], 1 mov [EGA_counter], 1
ret ret
;------------------------------------------------------------------------------
align 4
draw_bar_end_32_old:
;-------------------------------------- ;--------------------------------------
align 4 align 4
.new_y:
mov edi, [drbar.real_sx]
;--------------------------------------
align 4
.new_x:
cmp byte [ebp], bl
jne .skip
;--------------------------------------
mov ecx, [drbar.real_sx_and_abs_cx]
sub ecx, edi
shl ecx, 16
add ecx, [drbar.real_sy_and_abs_cy]
sub ecx, esi
; check mouse area for putpixel
call check_mouse_area_for_putpixel
; store to real LFB
mov [edx], eax
mov eax, [drbar.color]
;--------------------------------------
align 4
.skip:
; add pixel
add edx, 4
inc ebp
dec edi
jnz .new_x
; add line
add edx, [drbar.line_inc_scr]
add ebp, [drbar.line_inc_map]
; drawing gradient bars
test bh, 0x80
jz @f
test al, al
jz @f
dec al
;--------------------------------------
align 4
@@:
dec esi
jnz .new_y
jmp draw_bar_end_32.end
;------------------------------------------------------------------------------
align 4
draw_bar_end_32_new: draw_bar_end_32_new:
;-------------------------------------- ;--------------------------------------
align 4 align 4
@ -1424,10 +1574,6 @@ align 4
cmp byte [ebp], bl cmp byte [ebp], bl
jne .skip jne .skip
;-------------------------------------- ;--------------------------------------
; check for hardware cursor
cmp [_display.select_cursor], select_cursor
jne .no_mouse_area
mov ecx, [drbar.real_sy_and_abs_cy] mov ecx, [drbar.real_sy_and_abs_cy]
sub ecx, esi sub ecx, esi
;-------------------------------------- ;--------------------------------------