forked from KolibriOS/kolibrios
from Mario79: rewritten background image code
git-svn-id: svn://kolibrios.org@469 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
016062e7e6
commit
db5fd1e74a
@ -282,7 +282,6 @@ BUTTON_INFO equ (OS_BASE+0x02C0000)
|
|||||||
RESERVED_PORTS equ (OS_BASE+0x02D0000)
|
RESERVED_PORTS equ (OS_BASE+0x02D0000)
|
||||||
IRQ_SAVE equ (OS_BASE+0x02E0000)
|
IRQ_SAVE equ (OS_BASE+0x02E0000)
|
||||||
BOOT_VAR equ (OS_BASE+0x02f0000)
|
BOOT_VAR equ (OS_BASE+0x02f0000)
|
||||||
IMG_BACKGROUND equ (OS_BASE+0x0300000)
|
|
||||||
WinMapAddress equ (OS_BASE+0x0460000)
|
WinMapAddress equ (OS_BASE+0x0460000)
|
||||||
display_data equ (OS_BASE+0x0460000)
|
display_data equ (OS_BASE+0x0460000)
|
||||||
|
|
||||||
|
@ -329,6 +329,8 @@ com1_mouse_detected rb 1
|
|||||||
com2_mouse_detected rb 1
|
com2_mouse_detected rb 1
|
||||||
;* end code - Mario79
|
;* end code - Mario79
|
||||||
|
|
||||||
|
img_background rd 1
|
||||||
|
mem_BACKGROUND rd 1
|
||||||
wraw_bacground_select rb 1
|
wraw_bacground_select rb 1
|
||||||
|
|
||||||
lba_read_enabled rd 1 ; 0 = disabled , 1 = enabled
|
lba_read_enabled rd 1 ; 0 = disabled , 1 = enabled
|
||||||
|
@ -500,12 +500,22 @@ high_code:
|
|||||||
mov [graph_data_l+4],al
|
mov [graph_data_l+4],al
|
||||||
mov [graph_data_l+7],ah
|
mov [graph_data_l+7],ah
|
||||||
|
|
||||||
|
|
||||||
mov [CURRENT_TASK],dword 1
|
mov [CURRENT_TASK],dword 1
|
||||||
mov [TASK_COUNT],dword 1
|
mov [TASK_COUNT],dword 1
|
||||||
mov [TASK_BASE],dword TASK_DATA
|
mov [TASK_BASE],dword TASK_DATA
|
||||||
mov [current_slot], SLOT_BASE+256
|
mov [current_slot], SLOT_BASE+256
|
||||||
|
|
||||||
|
; set background
|
||||||
|
xor eax,eax
|
||||||
|
inc eax
|
||||||
|
mov [display_data-12],eax
|
||||||
|
mov [display_data-8],eax
|
||||||
|
mov [display_data-4],eax
|
||||||
|
mov [mem_BACKGROUND],4095
|
||||||
|
stdcall kernel_alloc, [mem_BACKGROUND]
|
||||||
|
mov [img_background], eax
|
||||||
|
|
||||||
|
|
||||||
;!!!!!!!!!!!!!!!!!!!!!!!!!!
|
;!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
include 'detect/disks.inc'
|
include 'detect/disks.inc'
|
||||||
;!!!!!!!!!!!!!!!!!!!!!!!!!!
|
;!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
@ -2296,8 +2306,37 @@ sys_background:
|
|||||||
mov [display_data-8],ebx
|
mov [display_data-8],ebx
|
||||||
mov [display_data-4],ecx
|
mov [display_data-4],ecx
|
||||||
; mov [bgrchanged],1
|
; mov [bgrchanged],1
|
||||||
|
|
||||||
|
pushad
|
||||||
|
; return memory for old background
|
||||||
|
stdcall kernel_free, [img_background]
|
||||||
|
; calculate RAW size
|
||||||
|
xor eax,eax
|
||||||
|
inc eax
|
||||||
|
cmp [display_data-8],eax
|
||||||
|
jae @f
|
||||||
|
mov [display_data-8],eax
|
||||||
|
@@:
|
||||||
|
cmp [display_data-4],eax
|
||||||
|
jae @f
|
||||||
|
mov [display_data-4],eax
|
||||||
|
@@:
|
||||||
|
mov eax,[display_data-8]
|
||||||
|
imul eax,[display_data-4]
|
||||||
|
inc eax
|
||||||
|
imul eax,3
|
||||||
|
mov [mem_BACKGROUND],eax
|
||||||
|
; get memory for new background
|
||||||
|
stdcall kernel_alloc, [mem_BACKGROUND]
|
||||||
|
test eax, eax
|
||||||
|
jz .exit_mem
|
||||||
|
mov [img_background], eax
|
||||||
|
.exit_mem:
|
||||||
|
popad
|
||||||
|
|
||||||
sbgrr:
|
sbgrr:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
nosb1:
|
nosb1:
|
||||||
|
|
||||||
cmp eax,2 ; SET PIXEL
|
cmp eax,2 ; SET PIXEL
|
||||||
@ -2309,7 +2348,12 @@ sys_background:
|
|||||||
and edx,0xFF000000 ;255*256*256*256
|
and edx,0xFF000000 ;255*256*256*256
|
||||||
and ecx,0x00FFFFFF ;255*256*256+255*256+255
|
and ecx,0x00FFFFFF ;255*256*256+255*256+255
|
||||||
add edx,ecx
|
add edx,ecx
|
||||||
mov [ebx+IMG_BACKGROUND],edx
|
|
||||||
|
; mov [ebx+IMG_BACKGROUND],edx
|
||||||
|
push eax
|
||||||
|
mov eax,[img_background]
|
||||||
|
mov [ebx+eax],edx
|
||||||
|
pop eax
|
||||||
; mov [bgrchanged],1
|
; mov [bgrchanged],1
|
||||||
ret
|
ret
|
||||||
nosb2:
|
nosb2:
|
||||||
@ -2342,29 +2386,17 @@ draw_background_temp:
|
|||||||
; bughere
|
; bughere
|
||||||
mov edi, [TASK_BASE]
|
mov edi, [TASK_BASE]
|
||||||
add ebx, [edi+TASKDATA.mem_start]
|
add ebx, [edi+TASKDATA.mem_start]
|
||||||
; mov esi, ebx
|
|
||||||
; mov edi, ecx
|
|
||||||
mov eax, ebx
|
mov eax, ebx
|
||||||
mov ebx, ecx
|
mov ebx, ecx
|
||||||
add ecx, edx
|
add ecx, edx
|
||||||
cmp ecx, 0x160000-16
|
add ebx, [img_background] ;IMG_BACKGROUND
|
||||||
ja .fin
|
|
||||||
; add edi, 0x300000
|
|
||||||
add ebx, IMG_BACKGROUND
|
|
||||||
mov ecx, edx
|
mov ecx, edx
|
||||||
cmp ecx, 0x160000-16
|
|
||||||
ja .fin
|
|
||||||
; mov [bgrchanged],1
|
|
||||||
; cld
|
|
||||||
; rep movsb
|
|
||||||
call memmove
|
call memmove
|
||||||
.fin:
|
.fin:
|
||||||
ret
|
ret
|
||||||
nosb5:
|
nosb5:
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
|
|
||||||
sys_getbackground:
|
sys_getbackground:
|
||||||
@ -2380,10 +2412,13 @@ sys_getbackground:
|
|||||||
|
|
||||||
cmp eax,2 ; PIXEL
|
cmp eax,2 ; PIXEL
|
||||||
jnz nogb2
|
jnz nogb2
|
||||||
mov edx,0x160000-16
|
; mov edx,0x160000-16
|
||||||
cmp edx,ebx
|
; cmp edx,ebx
|
||||||
jbe nogb2
|
; jbe nogb2
|
||||||
mov eax, [ebx+IMG_BACKGROUND]
|
; mov eax, [ebx+IMG_BACKGROUND]
|
||||||
|
mov eax,[img_background]
|
||||||
|
mov eax,[ebx+eax]
|
||||||
|
|
||||||
and eax, 0xFFFFFF
|
and eax, 0xFFFFFF
|
||||||
mov [esp+36],eax
|
mov [esp+36],eax
|
||||||
ret
|
ret
|
||||||
@ -3533,12 +3568,12 @@ calculatebackground: ; background
|
|||||||
|
|
||||||
; all black
|
; all black
|
||||||
|
|
||||||
mov [display_data-8],dword 4 ; size x
|
; mov [display_data-8],dword 4 ; size x
|
||||||
mov [display_data-4],dword 2 ; size y
|
; mov [display_data-4],dword 2 ; size y
|
||||||
|
|
||||||
mov edi, IMG_BACKGROUND ; set background to black
|
mov edi, [img_background] ;IMG_BACKGROUND ; set background to black
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
mov ecx, 0x0fff00 / 4
|
mov ecx, 1023 ;0x0fff00 / 4
|
||||||
cld
|
cld
|
||||||
rep stosd
|
rep stosd
|
||||||
|
|
||||||
|
@ -220,7 +220,7 @@ vesa12_drawbackground:
|
|||||||
|
|
||||||
push eax
|
push eax
|
||||||
push ebx
|
push ebx
|
||||||
mov esi,IMG_BACKGROUND
|
mov esi,[img_background] ;IMG_BACKGROUND
|
||||||
|
|
||||||
cmp [WinMapAddress-12],dword 1 ; tiled background
|
cmp [WinMapAddress-12],dword 1 ; tiled background
|
||||||
jne no_vesa12_tiled_bgr
|
jne no_vesa12_tiled_bgr
|
||||||
@ -282,7 +282,7 @@ vesa12_drawbackground:
|
|||||||
add esi,eax
|
add esi,eax
|
||||||
add esi,eax
|
add esi,eax
|
||||||
add esi,eax
|
add esi,eax
|
||||||
add esi,IMG_BACKGROUND
|
add esi,[img_background] ;IMG_BACKGROUND
|
||||||
pop ebx
|
pop ebx
|
||||||
pop eax
|
pop eax
|
||||||
|
|
||||||
|
@ -57,7 +57,6 @@ Vesa20_getpixel24:
|
|||||||
and ecx, 0xffffff
|
and ecx, 0xffffff
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
Vesa20_getpixel32:
|
Vesa20_getpixel32:
|
||||||
imul ebx, [BytesPerScanLine] ; ebx = y * y multiplier
|
imul ebx, [BytesPerScanLine] ; ebx = y * y multiplier
|
||||||
lea edi, [ebx+eax*4] ; edi = x*4+(y*y multiplier)
|
lea edi, [ebx+eax*4] ; edi = x*4+(y*y multiplier)
|
||||||
@ -102,29 +101,25 @@ align 16
|
|||||||
; ebp = pointer to 'get' function
|
; ebp = pointer to 'get' function
|
||||||
; esi = pointer to 'init' function
|
; esi = pointer to 'init' function
|
||||||
; edi = parameter for 'get' function
|
; edi = parameter for 'get' function
|
||||||
|
|
||||||
vesa20_putimage:
|
vesa20_putimage:
|
||||||
pushad
|
pushad
|
||||||
call [disable_mouse]
|
call [disable_mouse]
|
||||||
|
|
||||||
sub esp, putimg.stack_data
|
sub esp, putimg.stack_data
|
||||||
|
|
||||||
; save pointer to image
|
; save pointer to image
|
||||||
mov [putimg.pti], ebx
|
mov [putimg.pti], ebx
|
||||||
|
|
||||||
; unpack the size
|
; unpack the size
|
||||||
mov eax, ecx
|
mov eax, ecx
|
||||||
and ecx, 0xFFFF
|
and ecx, 0xFFFF
|
||||||
shr eax, 16
|
shr eax, 16
|
||||||
mov [putimg.image_sx], eax
|
mov [putimg.image_sx], eax
|
||||||
mov [putimg.image_sy], ecx
|
mov [putimg.image_sy], ecx
|
||||||
|
|
||||||
; unpack the coordinates
|
; unpack the coordinates
|
||||||
mov eax, edx
|
mov eax, edx
|
||||||
and edx, 0xFFFF
|
and edx, 0xFFFF
|
||||||
shr eax, 16
|
shr eax, 16
|
||||||
mov [putimg.image_cx], eax
|
mov [putimg.image_cx], eax
|
||||||
mov [putimg.image_cy], edx
|
mov [putimg.image_cy], edx
|
||||||
|
|
||||||
; calculate absolute (i.e. screen) coordinates
|
; calculate absolute (i.e. screen) coordinates
|
||||||
mov eax, [TASK_BASE]
|
mov eax, [TASK_BASE]
|
||||||
mov ebx, [eax-twdw + WDATA.box.left]
|
mov ebx, [eax-twdw + WDATA.box.left]
|
||||||
@ -133,7 +128,6 @@ vesa20_putimage:
|
|||||||
mov ebx, [eax-twdw + WDATA.box.top]
|
mov ebx, [eax-twdw + WDATA.box.top]
|
||||||
add ebx, [putimg.image_cy]
|
add ebx, [putimg.image_cy]
|
||||||
mov [putimg.abs_cy], ebx
|
mov [putimg.abs_cy], ebx
|
||||||
|
|
||||||
; real_sx = MIN(wnd_sx-image_cx, image_sx);
|
; real_sx = MIN(wnd_sx-image_cx, image_sx);
|
||||||
mov ebx, [eax-twdw + WDATA.box.width] ; ebx = wnd_sx
|
mov ebx, [eax-twdw + WDATA.box.width] ; ebx = wnd_sx
|
||||||
; \begin{diamond}[20.08.2006]
|
; \begin{diamond}[20.08.2006]
|
||||||
@ -151,7 +145,6 @@ vesa20_putimage:
|
|||||||
mov ebx, [putimg.image_sx]
|
mov ebx, [putimg.image_sx]
|
||||||
.end_x:
|
.end_x:
|
||||||
mov [putimg.real_sx], ebx
|
mov [putimg.real_sx], ebx
|
||||||
|
|
||||||
; init real_sy
|
; init real_sy
|
||||||
mov ebx, [eax-twdw + WDATA.box.height] ; ebx = wnd_sy
|
mov ebx, [eax-twdw + WDATA.box.height] ; ebx = wnd_sy
|
||||||
; \begin{diamond}[20.08.2006]
|
; \begin{diamond}[20.08.2006]
|
||||||
@ -168,7 +161,6 @@ vesa20_putimage:
|
|||||||
mov ebx, [putimg.image_sy]
|
mov ebx, [putimg.image_sy]
|
||||||
.end_y:
|
.end_y:
|
||||||
mov [putimg.real_sy], ebx
|
mov [putimg.real_sy], ebx
|
||||||
|
|
||||||
; line increment
|
; line increment
|
||||||
mov eax, [putimg.image_sx]
|
mov eax, [putimg.image_sx]
|
||||||
sub eax, [putimg.real_sx]
|
sub eax, [putimg.real_sx]
|
||||||
@ -177,13 +169,11 @@ vesa20_putimage:
|
|||||||
call esi
|
call esi
|
||||||
add eax, [putimg.arg_0]
|
add eax, [putimg.arg_0]
|
||||||
mov [putimg.line_increment], eax
|
mov [putimg.line_increment], eax
|
||||||
|
|
||||||
; winmap new line increment
|
; winmap new line increment
|
||||||
mov eax, [ScreenWidth]
|
mov eax, [ScreenWidth]
|
||||||
inc eax
|
inc eax
|
||||||
sub eax, [putimg.real_sx]
|
sub eax, [putimg.real_sx]
|
||||||
mov [putimg.winmap_newline], eax
|
mov [putimg.winmap_newline], eax
|
||||||
|
|
||||||
; screen new line increment
|
; screen new line increment
|
||||||
mov eax, [BytesPerScanLine]
|
mov eax, [BytesPerScanLine]
|
||||||
mov ecx, [putimg.real_sx]
|
mov ecx, [putimg.real_sx]
|
||||||
@ -192,10 +182,8 @@ vesa20_putimage:
|
|||||||
imul ecx, ebx
|
imul ecx, ebx
|
||||||
sub eax, ecx
|
sub eax, ecx
|
||||||
mov [putimg.screen_newline], eax
|
mov [putimg.screen_newline], eax
|
||||||
|
|
||||||
; pointer to image
|
; pointer to image
|
||||||
mov esi, [putimg.pti]
|
mov esi, [putimg.pti]
|
||||||
|
|
||||||
; pointer to screen
|
; pointer to screen
|
||||||
mov edx, [putimg.abs_cy]
|
mov edx, [putimg.abs_cy]
|
||||||
imul edx, [BytesPerScanLine]
|
imul edx, [BytesPerScanLine]
|
||||||
@ -205,7 +193,6 @@ vesa20_putimage:
|
|||||||
imul eax, ebx
|
imul eax, ebx
|
||||||
add edx, eax
|
add edx, eax
|
||||||
add edx, [LFBAddress]
|
add edx, [LFBAddress]
|
||||||
|
|
||||||
; pointer to pixel map
|
; pointer to pixel map
|
||||||
mov eax, [putimg.abs_cy]
|
mov eax, [putimg.abs_cy]
|
||||||
imul eax, [ScreenWidth]
|
imul eax, [ScreenWidth]
|
||||||
@ -213,23 +200,18 @@ vesa20_putimage:
|
|||||||
add eax, [putimg.abs_cx]
|
add eax, [putimg.abs_cx]
|
||||||
add eax, WinMapAddress
|
add eax, WinMapAddress
|
||||||
xchg eax, ebp
|
xchg eax, ebp
|
||||||
|
|
||||||
; get process number
|
; get process number
|
||||||
mov ebx, [CURRENT_TASK]
|
mov ebx, [CURRENT_TASK]
|
||||||
|
|
||||||
cmp byte [ScreenBPP], 32
|
cmp byte [ScreenBPP], 32
|
||||||
je put_image_end_32
|
je put_image_end_32
|
||||||
|
|
||||||
;put_image_end_24:
|
;put_image_end_24:
|
||||||
mov edi, [putimg.real_sy]
|
mov edi, [putimg.real_sy]
|
||||||
align 4
|
align 4
|
||||||
.new_line:
|
.new_line:
|
||||||
mov ecx, [putimg.real_sx]
|
mov ecx, [putimg.real_sx]
|
||||||
|
|
||||||
; push ebp edx
|
; push ebp edx
|
||||||
align 4
|
align 4
|
||||||
.new_x:
|
.new_x:
|
||||||
|
|
||||||
push [putimg.edi]
|
push [putimg.edi]
|
||||||
mov eax, [putimg.ebp+4]
|
mov eax, [putimg.ebp+4]
|
||||||
call eax
|
call eax
|
||||||
@ -240,20 +222,16 @@ vesa20_putimage:
|
|||||||
shr eax, 16
|
shr eax, 16
|
||||||
mov [edx+2], al
|
mov [edx+2], al
|
||||||
.skip:
|
.skip:
|
||||||
|
|
||||||
; add esi, 3 ;[putimg.source_bpp]
|
; add esi, 3 ;[putimg.source_bpp]
|
||||||
add edx, 3
|
add edx, 3
|
||||||
inc ebp
|
inc ebp
|
||||||
|
|
||||||
dec ecx
|
dec ecx
|
||||||
jnz .new_x
|
jnz .new_x
|
||||||
; pop edx ebp
|
; pop edx ebp
|
||||||
|
|
||||||
add esi, [putimg.line_increment]
|
add esi, [putimg.line_increment]
|
||||||
add edx, [putimg.screen_newline] ;[BytesPerScanLine]
|
add edx, [putimg.screen_newline] ;[BytesPerScanLine]
|
||||||
add ebp, [putimg.winmap_newline] ;[ScreenWidth]
|
add ebp, [putimg.winmap_newline] ;[ScreenWidth]
|
||||||
; inc ebp
|
; inc ebp
|
||||||
|
|
||||||
dec edi
|
dec edi
|
||||||
jnz .new_line
|
jnz .new_line
|
||||||
.finish:
|
.finish:
|
||||||
@ -266,11 +244,9 @@ put_image_end_32:
|
|||||||
align 4
|
align 4
|
||||||
.new_line:
|
.new_line:
|
||||||
mov ecx, [putimg.real_sx]
|
mov ecx, [putimg.real_sx]
|
||||||
|
|
||||||
; push ebp edx
|
; push ebp edx
|
||||||
align 4
|
align 4
|
||||||
.new_x:
|
.new_x:
|
||||||
|
|
||||||
push [putimg.edi]
|
push [putimg.edi]
|
||||||
mov eax, [putimg.ebp+4]
|
mov eax, [putimg.ebp+4]
|
||||||
call eax
|
call eax
|
||||||
@ -279,20 +255,16 @@ put_image_end_32:
|
|||||||
; mov eax, [esi] ; ecx = RRBBGGRR
|
; mov eax, [esi] ; ecx = RRBBGGRR
|
||||||
mov [edx], eax
|
mov [edx], eax
|
||||||
.skip:
|
.skip:
|
||||||
|
|
||||||
; add esi, [putimg.source_bpp]
|
; add esi, [putimg.source_bpp]
|
||||||
add edx, 4
|
add edx, 4
|
||||||
inc ebp
|
inc ebp
|
||||||
|
|
||||||
dec ecx
|
dec ecx
|
||||||
jnz .new_x
|
jnz .new_x
|
||||||
; pop edx ebp
|
; pop edx ebp
|
||||||
|
|
||||||
add esi, [putimg.line_increment]
|
add esi, [putimg.line_increment]
|
||||||
add edx, [putimg.screen_newline] ;[BytesPerScanLine]
|
add edx, [putimg.screen_newline] ;[BytesPerScanLine]
|
||||||
add ebp, [putimg.winmap_newline] ;[ScreenWidth]
|
add ebp, [putimg.winmap_newline] ;[ScreenWidth]
|
||||||
; inc ebp
|
; inc ebp
|
||||||
|
|
||||||
dec edi
|
dec edi
|
||||||
jnz .new_line
|
jnz .new_line
|
||||||
.finish:
|
.finish:
|
||||||
@ -313,7 +285,6 @@ __sys_putpixel:
|
|||||||
; edi = 0x00000001 force
|
; edi = 0x00000001 force
|
||||||
|
|
||||||
;;; mov [novesachecksum], dword 0
|
;;; mov [novesachecksum], dword 0
|
||||||
|
|
||||||
pushad
|
pushad
|
||||||
test edi,1 ; force ?
|
test edi,1 ; force ?
|
||||||
jnz .forced
|
jnz .forced
|
||||||
@ -340,15 +311,12 @@ __sys_putpixel:
|
|||||||
call dword [PUTPIXEL] ; call the real put_pixel function
|
call dword [PUTPIXEL] ; call the real put_pixel function
|
||||||
.exit:
|
.exit:
|
||||||
popad
|
popad
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
Vesa20_putpixel24:
|
Vesa20_putpixel24:
|
||||||
|
|
||||||
; eax = x
|
; eax = x
|
||||||
; ebx = y
|
; ebx = y
|
||||||
|
|
||||||
imul ebx, [BytesPerScanLine] ; ebx = y * y multiplier
|
imul ebx, [BytesPerScanLine] ; ebx = y * y multiplier
|
||||||
lea edi, [eax+eax*2] ; edi = x*3
|
lea edi, [eax+eax*2] ; edi = x*3
|
||||||
mov eax, [esp+32-8+4]
|
mov eax, [esp+32-8+4]
|
||||||
@ -357,25 +325,20 @@ Vesa20_putpixel24:
|
|||||||
mov [edi], ax
|
mov [edi], ax
|
||||||
shr eax, 16
|
shr eax, 16
|
||||||
mov [edi+2], al
|
mov [edi+2], al
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
Vesa20_putpixel32:
|
Vesa20_putpixel32:
|
||||||
|
|
||||||
; eax = x
|
; eax = x
|
||||||
; ebx = y
|
; ebx = y
|
||||||
|
|
||||||
imul ebx, [BytesPerScanLine] ; ebx = y * y multiplier
|
imul ebx, [BytesPerScanLine] ; ebx = y * y multiplier
|
||||||
lea edi, [ebx+eax*4] ; edi = x*4+(y*y multiplier)
|
lea edi, [ebx+eax*4] ; edi = x*4+(y*y multiplier)
|
||||||
mov eax, [esp+32-8+4] ; eax = color
|
mov eax, [esp+32-8+4] ; eax = color
|
||||||
add edi, [LFBAddress] ; ebx = where to put pixel in memory
|
add edi, [LFBAddress] ; ebx = where to put pixel in memory
|
||||||
mov [edi], eax
|
mov [edi], eax
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
;*************************************************
|
;*************************************************
|
||||||
|
|
||||||
;align 4
|
;align 4
|
||||||
@ -418,12 +381,10 @@ dl_dy equ esp+0
|
|||||||
mov bp, bx ; ebp = y2
|
mov bp, bx ; ebp = y2
|
||||||
shr eax, 16 ; eax = x1
|
shr eax, 16 ; eax = x1
|
||||||
shr ebx, 16 ; ebx = y1
|
shr ebx, 16 ; ebx = y1
|
||||||
|
|
||||||
push eax ; save x1
|
push eax ; save x1
|
||||||
push ebx ; save y1
|
push ebx ; save y1
|
||||||
push esi ; save x2
|
push esi ; save x2
|
||||||
push ebp ; save y2
|
push ebp ; save y2
|
||||||
|
|
||||||
; checking x-axis...
|
; checking x-axis...
|
||||||
sub esi, eax ; esi = x2-x1
|
sub esi, eax ; esi = x2-x1
|
||||||
push esi ; save y2-y1
|
push esi ; save y2-y1
|
||||||
@ -436,7 +397,6 @@ dl_dy equ esp+0
|
|||||||
.x2lx1:
|
.x2lx1:
|
||||||
neg esi ; get esi absolute value
|
neg esi ; get esi absolute value
|
||||||
.no_vline:
|
.no_vline:
|
||||||
|
|
||||||
; checking y-axis...
|
; checking y-axis...
|
||||||
sub ebp, ebx ; ebp = y2-y1
|
sub ebp, ebx ; ebp = y2-y1
|
||||||
push ebp ; save y2-y1
|
push ebp ; save y2-y1
|
||||||
@ -445,17 +405,14 @@ dl_dy equ esp+0
|
|||||||
mov edx, [dl_x2] ; else (if y1=y2)
|
mov edx, [dl_x2] ; else (if y1=y2)
|
||||||
call hline
|
call hline
|
||||||
jmp .exit
|
jmp .exit
|
||||||
|
|
||||||
.y2ly1:
|
.y2ly1:
|
||||||
neg ebp ; get ebp absolute value
|
neg ebp ; get ebp absolute value
|
||||||
.no_hline:
|
.no_hline:
|
||||||
|
|
||||||
|
|
||||||
cmp ebp, esi
|
cmp ebp, esi
|
||||||
jle .x_rules ; |y2-y1| < |x2-x1| ?
|
jle .x_rules ; |y2-y1| < |x2-x1| ?
|
||||||
|
|
||||||
cmp [dl_y2], ebx ; make sure y1 is at the begining
|
cmp [dl_y2], ebx ; make sure y1 is at the begining
|
||||||
jge .no_reverse1
|
jge .no_reverse1
|
||||||
|
|
||||||
neg dword [dl_dx]
|
neg dword [dl_dx]
|
||||||
mov edx, [dl_x2]
|
mov edx, [dl_x2]
|
||||||
mov [dl_x2], eax
|
mov [dl_x2], eax
|
||||||
@ -463,9 +420,7 @@ dl_dy equ esp+0
|
|||||||
mov edx, [dl_y2]
|
mov edx, [dl_y2]
|
||||||
mov [dl_y2], ebx
|
mov [dl_y2], ebx
|
||||||
mov [dl_y1], edx
|
mov [dl_y1], edx
|
||||||
|
|
||||||
.no_reverse1:
|
.no_reverse1:
|
||||||
|
|
||||||
mov eax, [dl_dx]
|
mov eax, [dl_dx]
|
||||||
cdq ; extend eax sing to edx
|
cdq ; extend eax sing to edx
|
||||||
shl eax, 16 ; using 16bit fix-point maths
|
shl eax, 16 ; using 16bit fix-point maths
|
||||||
@ -473,13 +428,11 @@ dl_dy equ esp+0
|
|||||||
mov edx, ebp ; edx = counter (number of pixels to draw)
|
mov edx, ebp ; edx = counter (number of pixels to draw)
|
||||||
mov ebp, 1 *65536 ; <<16 ; ebp = dy = 1.0
|
mov ebp, 1 *65536 ; <<16 ; ebp = dy = 1.0
|
||||||
mov esi, eax ; esi = dx
|
mov esi, eax ; esi = dx
|
||||||
|
|
||||||
jmp .y_rules
|
jmp .y_rules
|
||||||
.x_rules:
|
|
||||||
|
|
||||||
|
.x_rules:
|
||||||
cmp [dl_x2], eax ; make sure x1 is at the begining
|
cmp [dl_x2], eax ; make sure x1 is at the begining
|
||||||
jge .no_reverse2
|
jge .no_reverse2
|
||||||
|
|
||||||
neg dword [dl_dy]
|
neg dword [dl_dy]
|
||||||
mov edx, [dl_x2]
|
mov edx, [dl_x2]
|
||||||
mov [dl_x2], eax
|
mov [dl_x2], eax
|
||||||
@ -487,9 +440,7 @@ dl_dy equ esp+0
|
|||||||
mov edx, [dl_y2]
|
mov edx, [dl_y2]
|
||||||
mov [dl_y2], ebx
|
mov [dl_y2], ebx
|
||||||
mov [dl_y1], edx
|
mov [dl_y1], edx
|
||||||
|
|
||||||
.no_reverse2:
|
.no_reverse2:
|
||||||
|
|
||||||
xor edx, edx
|
xor edx, edx
|
||||||
mov eax, [dl_dy]
|
mov eax, [dl_dy]
|
||||||
cdq ; extend eax sing to edx
|
cdq ; extend eax sing to edx
|
||||||
@ -498,29 +449,22 @@ dl_dy equ esp+0
|
|||||||
mov edx, esi ; edx = counter (number of pixels to draw)
|
mov edx, esi ; edx = counter (number of pixels to draw)
|
||||||
mov esi, 1 *65536 ;<< 16 ; esi = dx = 1.0
|
mov esi, 1 *65536 ;<< 16 ; esi = dx = 1.0
|
||||||
mov ebp, eax ; ebp = dy
|
mov ebp, eax ; ebp = dy
|
||||||
|
|
||||||
.y_rules:
|
.y_rules:
|
||||||
|
|
||||||
mov eax, [dl_x1]
|
mov eax, [dl_x1]
|
||||||
mov ebx, [dl_y1]
|
mov ebx, [dl_y1]
|
||||||
shl eax, 16
|
shl eax, 16
|
||||||
shl ebx, 16
|
shl ebx, 16
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
|
|
||||||
.draw:
|
.draw:
|
||||||
push eax ebx
|
push eax ebx
|
||||||
shr eax, 16
|
shr eax, 16
|
||||||
shr ebx, 16
|
shr ebx, 16
|
||||||
call [putpixel]
|
call [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
|
||||||
|
|
||||||
dec edx
|
dec edx
|
||||||
jnz .draw
|
jnz .draw
|
||||||
|
|
||||||
; force last drawn pixel to be at (x2,y2)
|
; force last drawn pixel to be at (x2,y2)
|
||||||
mov eax, [dl_x2]
|
mov eax, [dl_x2]
|
||||||
mov ebx, [dl_y2]
|
mov ebx, [dl_y2]
|
||||||
@ -541,7 +485,6 @@ hline:
|
|||||||
; ecx = color
|
; ecx = color
|
||||||
; edi = force ?
|
; edi = force ?
|
||||||
push eax edx
|
push eax edx
|
||||||
|
|
||||||
cmp edx, eax ; make sure x2 is above x1
|
cmp edx, eax ; make sure x2 is above x1
|
||||||
jge @f
|
jge @f
|
||||||
xchg eax, edx
|
xchg eax, edx
|
||||||
@ -551,7 +494,6 @@ hline:
|
|||||||
inc eax
|
inc eax
|
||||||
cmp eax, edx
|
cmp eax, edx
|
||||||
jle @b
|
jle @b
|
||||||
|
|
||||||
pop edx eax
|
pop edx eax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -564,7 +506,6 @@ vline:
|
|||||||
; ecx = color
|
; ecx = color
|
||||||
; edi = force ?
|
; edi = force ?
|
||||||
push ebx edx
|
push ebx edx
|
||||||
|
|
||||||
cmp edx, ebx ; make sure y2 is above y1
|
cmp edx, ebx ; make sure y2 is above y1
|
||||||
jge @f
|
jge @f
|
||||||
xchg ebx, edx
|
xchg ebx, edx
|
||||||
@ -574,7 +515,6 @@ vline:
|
|||||||
inc ebx
|
inc ebx
|
||||||
cmp ebx, edx
|
cmp ebx, edx
|
||||||
jle @b
|
jle @b
|
||||||
|
|
||||||
pop edx ebx
|
pop edx ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -605,30 +545,23 @@ align 4
|
|||||||
; edx ye
|
; edx ye
|
||||||
; edi color
|
; edi color
|
||||||
vesa20_drawbar:
|
vesa20_drawbar:
|
||||||
|
|
||||||
pushad
|
pushad
|
||||||
call [disable_mouse]
|
call [disable_mouse]
|
||||||
|
|
||||||
sub esp, drbar.stack_data
|
sub esp, drbar.stack_data
|
||||||
|
|
||||||
mov [drbar.color], edi
|
mov [drbar.color], edi
|
||||||
|
|
||||||
sub edx, ebx
|
sub edx, ebx
|
||||||
jle .exit ;// mike.dld, 2005-01-29
|
jle .exit ;// mike.dld, 2005-01-29
|
||||||
sub ecx, eax
|
sub ecx, eax
|
||||||
jle .exit ;// mike.dld, 2005-01-29
|
jle .exit ;// mike.dld, 2005-01-29
|
||||||
mov [drbar.bar_sy], edx
|
mov [drbar.bar_sy], edx
|
||||||
mov [drbar.bar_sx], ecx
|
mov [drbar.bar_sx], ecx
|
||||||
|
|
||||||
mov [drbar.bar_cx], eax
|
mov [drbar.bar_cx], eax
|
||||||
mov [drbar.bar_cy], ebx
|
mov [drbar.bar_cy], ebx
|
||||||
|
|
||||||
mov edi, [TASK_BASE]
|
mov edi, [TASK_BASE]
|
||||||
add eax, [edi-twdw + WDATA.box.left] ; win_cx
|
add eax, [edi-twdw + WDATA.box.left] ; win_cx
|
||||||
add ebx, [edi-twdw + WDATA.box.top] ; win_cy
|
add ebx, [edi-twdw + WDATA.box.top] ; win_cy
|
||||||
mov [drbar.abs_cx], eax
|
mov [drbar.abs_cx], eax
|
||||||
mov [drbar.abs_cy], ebx
|
mov [drbar.abs_cy], ebx
|
||||||
|
|
||||||
; real_sx = MIN(wnd_sx-bar_cx, bar_sx);
|
; real_sx = MIN(wnd_sx-bar_cx, bar_sx);
|
||||||
mov ebx, [edi-twdw + WDATA.box.width] ; ebx = wnd_sx
|
mov ebx, [edi-twdw + WDATA.box.width] ; ebx = wnd_sx
|
||||||
; \begin{diamond}[20.08.2006]
|
; \begin{diamond}[20.08.2006]
|
||||||
@ -642,7 +575,6 @@ vesa20_drawbar:
|
|||||||
popad
|
popad
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
inc eax
|
inc eax
|
||||||
|
|
||||||
ret
|
ret
|
||||||
@@:
|
@@:
|
||||||
cmp ebx, [drbar.bar_sx]
|
cmp ebx, [drbar.bar_sx]
|
||||||
@ -650,7 +582,6 @@ vesa20_drawbar:
|
|||||||
mov ebx, [drbar.bar_sx]
|
mov ebx, [drbar.bar_sx]
|
||||||
.end_x:
|
.end_x:
|
||||||
mov [drbar.real_sx], ebx
|
mov [drbar.real_sx], ebx
|
||||||
|
|
||||||
; real_sy = MIN(wnd_sy-bar_cy, bar_sy);
|
; real_sy = MIN(wnd_sy-bar_cy, bar_sy);
|
||||||
mov ebx, [edi-twdw + WDATA.box.height] ; ebx = wnd_sy
|
mov ebx, [edi-twdw + WDATA.box.height] ; ebx = wnd_sy
|
||||||
; \begin{diamond}[20.08.2006]
|
; \begin{diamond}[20.08.2006]
|
||||||
@ -662,7 +593,6 @@ vesa20_drawbar:
|
|||||||
popad
|
popad
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
inc eax
|
inc eax
|
||||||
|
|
||||||
ret
|
ret
|
||||||
@@:
|
@@:
|
||||||
cmp ebx, [drbar.bar_sy]
|
cmp ebx, [drbar.bar_sy]
|
||||||
@ -670,13 +600,11 @@ vesa20_drawbar:
|
|||||||
mov ebx, [drbar.bar_sy]
|
mov ebx, [drbar.bar_sy]
|
||||||
.end_y:
|
.end_y:
|
||||||
mov [drbar.real_sy], ebx
|
mov [drbar.real_sy], ebx
|
||||||
|
|
||||||
; line_inc_map
|
; line_inc_map
|
||||||
mov eax, [ScreenWidth]
|
mov eax, [ScreenWidth]
|
||||||
sub eax, [drbar.real_sx]
|
sub eax, [drbar.real_sx]
|
||||||
inc eax
|
inc eax
|
||||||
mov [drbar.line_inc_map], eax
|
mov [drbar.line_inc_map], eax
|
||||||
|
|
||||||
; line_inc_scr
|
; line_inc_scr
|
||||||
mov eax, [drbar.real_sx]
|
mov eax, [drbar.real_sx]
|
||||||
movzx ebx, byte [ScreenBPP]
|
movzx ebx, byte [ScreenBPP]
|
||||||
@ -685,7 +613,6 @@ vesa20_drawbar:
|
|||||||
neg eax
|
neg eax
|
||||||
add eax, [BytesPerScanLine]
|
add eax, [BytesPerScanLine]
|
||||||
mov [drbar.line_inc_scr], eax
|
mov [drbar.line_inc_scr], eax
|
||||||
|
|
||||||
; pointer to screen
|
; pointer to screen
|
||||||
mov edx, [drbar.abs_cy]
|
mov edx, [drbar.abs_cy]
|
||||||
imul edx, [BytesPerScanLine]
|
imul edx, [BytesPerScanLine]
|
||||||
@ -695,7 +622,6 @@ vesa20_drawbar:
|
|||||||
imul eax, ebx
|
imul eax, ebx
|
||||||
add edx, eax
|
add edx, eax
|
||||||
add edx, [LFBAddress]
|
add edx, [LFBAddress]
|
||||||
|
|
||||||
; pointer to pixel map
|
; pointer to pixel map
|
||||||
mov eax, [drbar.abs_cy]
|
mov eax, [drbar.abs_cy]
|
||||||
imul eax, [ScreenWidth]
|
imul eax, [ScreenWidth]
|
||||||
@ -703,10 +629,8 @@ vesa20_drawbar:
|
|||||||
add eax, [drbar.abs_cx]
|
add eax, [drbar.abs_cx]
|
||||||
add eax, WinMapAddress
|
add eax, WinMapAddress
|
||||||
xchg eax, ebp
|
xchg eax, ebp
|
||||||
|
|
||||||
; get process number
|
; get process number
|
||||||
mov ebx, [CURRENT_TASK]
|
mov ebx, [CURRENT_TASK]
|
||||||
|
|
||||||
cmp byte [ScreenBPP], 24
|
cmp byte [ScreenBPP], 24
|
||||||
jne draw_bar_end_32
|
jne draw_bar_end_32
|
||||||
draw_bar_end_24:
|
draw_bar_end_24:
|
||||||
@ -720,31 +644,25 @@ draw_bar_end_24:
|
|||||||
; edx - pointer to screen
|
; edx - pointer to screen
|
||||||
; esi - counter
|
; esi - counter
|
||||||
; edi - counter
|
; edi - counter
|
||||||
|
|
||||||
mov esi, [drbar.real_sy]
|
mov esi, [drbar.real_sy]
|
||||||
align 4
|
align 4
|
||||||
.new_y:
|
.new_y:
|
||||||
mov edi, [drbar.real_sx]
|
mov edi, [drbar.real_sx]
|
||||||
align 4
|
align 4
|
||||||
.new_x:
|
.new_x:
|
||||||
|
|
||||||
cmp byte [ebp], bl
|
cmp byte [ebp], bl
|
||||||
jne .skip
|
jne .skip
|
||||||
mov [edx], bh
|
mov [edx], bh
|
||||||
mov [edx + 1], ax
|
mov [edx + 1], ax
|
||||||
.skip:
|
.skip:
|
||||||
|
|
||||||
; add pixel
|
; add pixel
|
||||||
add edx, 3
|
add edx, 3
|
||||||
inc ebp
|
inc ebp
|
||||||
|
|
||||||
dec edi
|
dec edi
|
||||||
jnz .new_x
|
jnz .new_x
|
||||||
|
|
||||||
; add line
|
; add line
|
||||||
add edx, [drbar.line_inc_scr]
|
add edx, [drbar.line_inc_scr]
|
||||||
add ebp, [drbar.line_inc_map]
|
add ebp, [drbar.line_inc_map]
|
||||||
|
|
||||||
; <Ivan 15.10.04> drawing gradient bars
|
; <Ivan 15.10.04> drawing gradient bars
|
||||||
test eax, 0x00800000
|
test eax, 0x00800000
|
||||||
jz @f
|
jz @f
|
||||||
@ -753,10 +671,8 @@ draw_bar_end_24:
|
|||||||
dec bh
|
dec bh
|
||||||
@@:
|
@@:
|
||||||
; </Ivan 15.10.04>
|
; </Ivan 15.10.04>
|
||||||
|
|
||||||
dec esi
|
dec esi
|
||||||
jnz .new_y
|
jnz .new_y
|
||||||
|
|
||||||
add esp, drbar.stack_data
|
add esp, drbar.stack_data
|
||||||
popad
|
popad
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
@ -764,30 +680,24 @@ ret
|
|||||||
|
|
||||||
draw_bar_end_32:
|
draw_bar_end_32:
|
||||||
mov eax, [drbar.color] ;; BBGGRR00
|
mov eax, [drbar.color] ;; BBGGRR00
|
||||||
|
|
||||||
mov esi, [drbar.real_sy]
|
mov esi, [drbar.real_sy]
|
||||||
align 4
|
align 4
|
||||||
.new_y:
|
.new_y:
|
||||||
mov edi, [drbar.real_sx]
|
mov edi, [drbar.real_sx]
|
||||||
align 4
|
align 4
|
||||||
.new_x:
|
.new_x:
|
||||||
|
|
||||||
cmp byte [ebp], bl
|
cmp byte [ebp], bl
|
||||||
jne .skip
|
jne .skip
|
||||||
mov [edx], eax
|
mov [edx], eax
|
||||||
.skip:
|
.skip:
|
||||||
|
|
||||||
; add pixel
|
; add pixel
|
||||||
add edx, 4
|
add edx, 4
|
||||||
inc ebp
|
inc ebp
|
||||||
|
|
||||||
dec edi
|
dec edi
|
||||||
jnz .new_x
|
jnz .new_x
|
||||||
|
|
||||||
; add line
|
; add line
|
||||||
add edx, [drbar.line_inc_scr]
|
add edx, [drbar.line_inc_scr]
|
||||||
add ebp, [drbar.line_inc_map]
|
add ebp, [drbar.line_inc_map]
|
||||||
|
|
||||||
; <Ivan 15.10.04> drawing gradient bars
|
; <Ivan 15.10.04> drawing gradient bars
|
||||||
test eax, 0x80000000
|
test eax, 0x80000000
|
||||||
jz @f
|
jz @f
|
||||||
@ -796,10 +706,8 @@ draw_bar_end_32:
|
|||||||
dec al
|
dec al
|
||||||
@@:
|
@@:
|
||||||
; </Ivan 15.10.04>
|
; </Ivan 15.10.04>
|
||||||
|
|
||||||
dec esi
|
dec esi
|
||||||
jnz .new_y
|
jnz .new_y
|
||||||
|
|
||||||
add esp, drbar.stack_data
|
add esp, drbar.stack_data
|
||||||
popad
|
popad
|
||||||
call VGA_draw_bar
|
call VGA_draw_bar
|
||||||
@ -807,7 +715,6 @@ draw_bar_end_32:
|
|||||||
mov [EGA_counter],1
|
mov [EGA_counter],1
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
;voodoodbcplimit:
|
;voodoodbcplimit:
|
||||||
|
|
||||||
; ebp:=(y+Ywin)*(ScreenXSize+1)+(x+Xwin)+AddrBuffer
|
; ebp:=(y+Ywin)*(ScreenXSize+1)+(x+Xwin)+AddrBuffer
|
||||||
@ -868,75 +775,54 @@ ret
|
|||||||
|
|
||||||
;--------------vbe voodoo ------------------------------------------------
|
;--------------vbe voodoo ------------------------------------------------
|
||||||
vesa20_drawbackground_tiled:
|
vesa20_drawbackground_tiled:
|
||||||
|
|
||||||
call [disable_mouse]
|
call [disable_mouse]
|
||||||
|
|
||||||
push ebp
|
push ebp
|
||||||
push eax
|
push eax
|
||||||
push ebx
|
push ebx
|
||||||
push ecx
|
push ecx
|
||||||
push edx
|
push edx
|
||||||
|
|
||||||
mov edx,dword [WinMapAddress-8] ; B
|
mov edx,dword [WinMapAddress-8] ; B
|
||||||
add edx,dword [WinMapAddress-8] ; +B
|
add edx,dword [WinMapAddress-8] ; +B
|
||||||
add edx,dword [WinMapAddress-8] ; +B
|
add edx,dword [WinMapAddress-8] ; +B
|
||||||
push edx
|
push edx
|
||||||
|
|
||||||
mov ebp,[draw_data+32+RECT.left] ; x start:=(x+Xwin)
|
mov ebp,[draw_data+32+RECT.left] ; x start:=(x+Xwin)
|
||||||
mov ebx,[draw_data+32+RECT.top] ; y start:=(y+Ywin)
|
mov ebx,[draw_data+32+RECT.top] ; y start:=(y+Ywin)
|
||||||
|
|
||||||
mov eax,[BytesPerScanLine]
|
mov eax,[BytesPerScanLine]
|
||||||
mul ebx
|
mul ebx
|
||||||
xchg ebp, eax ; BytesPerScanLine*(Ywin+y)
|
xchg ebp, eax ; BytesPerScanLine*(Ywin+y)
|
||||||
add ebp, eax ; +X
|
add ebp, eax ; +X
|
||||||
add ebp, eax ; +X
|
add ebp, eax ; +X
|
||||||
add ebp, eax ; +X
|
add ebp, eax ; +X
|
||||||
|
|
||||||
cmp [ScreenBPP],byte 24 ; 24 or 32 bpp ? - x size
|
cmp [ScreenBPP],byte 24 ; 24 or 32 bpp ? - x size
|
||||||
jz @f
|
jz @f
|
||||||
add ebp,eax ; +X
|
add ebp,eax ; +X
|
||||||
@@:
|
@@:
|
||||||
add ebp,[LFBAddress] ; +LFB
|
add ebp,[LFBAddress] ; +LFB
|
||||||
|
|
||||||
; ebp:=Y*BytesPerScanLine+X*BytesPerPixel+AddrLFB
|
; ebp:=Y*BytesPerScanLine+X*BytesPerPixel+AddrLFB
|
||||||
|
|
||||||
call calculate_edi
|
call calculate_edi
|
||||||
|
|
||||||
|
|
||||||
dp3: ; MAIN LOOP
|
dp3: ; MAIN LOOP
|
||||||
|
|
||||||
cmp [edi+WinMapAddress],byte 1 ; ptrBuffer^<>byte(1)
|
cmp [edi+WinMapAddress],byte 1 ; ptrBuffer^<>byte(1)
|
||||||
; je ybgp
|
|
||||||
;
|
|
||||||
; jmp nbgp
|
|
||||||
;
|
|
||||||
; ybgp:
|
|
||||||
jne nbgp
|
jne nbgp
|
||||||
|
|
||||||
push eax
|
push eax
|
||||||
push ebx
|
push ebx
|
||||||
|
|
||||||
mov ecx,dword [WinMapAddress-8] ; B
|
mov ecx,dword [WinMapAddress-8] ; B
|
||||||
xor edx,edx ; edx:=0
|
xor edx,edx ; edx:=0
|
||||||
div ecx ; Xstart/B
|
div ecx ; Xstart/B
|
||||||
|
|
||||||
; eax=Int(qn) edx:=Rem
|
; eax=Int(qn) edx:=Rem
|
||||||
|
|
||||||
lea esi,[edx+edx*2] ; esi:=edx*3
|
lea esi,[edx+edx*2] ; esi:=edx*3
|
||||||
|
|
||||||
mov ecx,dword [WinMapAddress-4] ; ecx:=H
|
mov ecx,dword [WinMapAddress-4] ; ecx:=H
|
||||||
mov eax,[esp+0] ; eax:=Ystart
|
mov eax,[esp+0] ; eax:=Ystart
|
||||||
xor edx,edx ;
|
xor edx,edx ;
|
||||||
div ecx ; Ystart/H
|
div ecx ; Ystart/H
|
||||||
|
|
||||||
mov eax,edx ; eax:=Rem
|
mov eax,edx ; eax:=Rem
|
||||||
xor edx,edx ;
|
xor edx,edx ;
|
||||||
mov ebx,[esp+8] ; ebx:=B*3
|
mov ebx,[esp+8] ; ebx:=B*3
|
||||||
mul ebx ;
|
mul ebx ;
|
||||||
add esi,eax ;
|
add esi,eax ;
|
||||||
mov eax,[esi+IMG_BACKGROUND]
|
; mov eax,[esi+IMG_BACKGROUND]
|
||||||
|
mov eax,[img_background]
|
||||||
|
mov eax,[esi+eax]
|
||||||
and eax,0xffffff
|
and eax,0xffffff
|
||||||
|
|
||||||
xchg edi, ebp
|
xchg edi, ebp
|
||||||
stosw
|
stosw
|
||||||
shr eax,16
|
shr eax,16
|
||||||
@ -946,35 +832,23 @@ vesa20_drawbackground_tiled:
|
|||||||
jz @f
|
jz @f
|
||||||
inc ebp ; +1
|
inc ebp ; +1
|
||||||
@@:
|
@@:
|
||||||
|
|
||||||
pop ebx
|
pop ebx
|
||||||
pop eax
|
pop eax
|
||||||
|
|
||||||
jmp hook1
|
jmp hook1
|
||||||
|
|
||||||
nbgp:
|
nbgp:
|
||||||
add ebp,3 ; +3
|
add ebp,3 ; +3
|
||||||
cmp [ScreenBPP],byte 24 ; 24 or 32 bpp ? - x size
|
cmp [ScreenBPP],byte 24 ; 24 or 32 bpp ? - x size
|
||||||
jz @f
|
jz @f
|
||||||
inc ebp ; +1
|
inc ebp ; +1
|
||||||
@@:
|
@@:
|
||||||
|
|
||||||
hook1:
|
hook1:
|
||||||
|
|
||||||
inc edi ; ptrBuffer++
|
inc edi ; ptrBuffer++
|
||||||
add esi,3 ; ptrImage+=3
|
add esi,3 ; ptrImage+=3
|
||||||
inc eax
|
inc eax
|
||||||
cmp eax,[draw_data+32+RECT.right] ; X > xend?
|
cmp eax,[draw_data+32+RECT.right] ; X > xend?
|
||||||
; jg nodp3
|
|
||||||
; jmp dp3
|
|
||||||
;
|
|
||||||
; nodp3:
|
|
||||||
jle dp3
|
jle dp3
|
||||||
|
|
||||||
mov ebp,[draw_data+32+RECT.left]
|
mov ebp,[draw_data+32+RECT.left]
|
||||||
|
|
||||||
inc ebx
|
inc ebx
|
||||||
|
|
||||||
mov eax,[BytesPerScanLine]
|
mov eax,[BytesPerScanLine]
|
||||||
mul ebx
|
mul ebx
|
||||||
xchg ebp, eax ; BytesPerScanLine*(Ywin+y)
|
xchg ebp, eax ; BytesPerScanLine*(Ywin+y)
|
||||||
@ -986,21 +860,11 @@ vesa20_drawbackground_tiled:
|
|||||||
add ebp,eax ; +X=X*4
|
add ebp,eax ; +X=X*4
|
||||||
@@:
|
@@:
|
||||||
add ebp,[LFBAddress] ; +LFB
|
add ebp,[LFBAddress] ; +LFB
|
||||||
|
|
||||||
; ebp:=Y*BytesPerScanLine+X*BytesPerPixel+AddrLFB
|
; ebp:=Y*BytesPerScanLine+X*BytesPerPixel+AddrLFB
|
||||||
|
|
||||||
call calculate_edi
|
call calculate_edi
|
||||||
|
|
||||||
cmp ebx,[draw_data+32+RECT.bottom]
|
cmp ebx,[draw_data+32+RECT.bottom]
|
||||||
; jg dp4
|
|
||||||
;
|
|
||||||
; jmp dp3
|
|
||||||
;
|
|
||||||
; dp4:
|
|
||||||
jle dp3
|
jle dp3
|
||||||
|
|
||||||
add esp,4
|
add esp,4
|
||||||
|
|
||||||
pop edx
|
pop edx
|
||||||
pop ecx
|
pop ecx
|
||||||
pop ebx
|
pop ebx
|
||||||
@ -1014,41 +878,33 @@ vesa20_drawbackground_tiled:
|
|||||||
|
|
||||||
|
|
||||||
vesa20_drawbackground_stretch:
|
vesa20_drawbackground_stretch:
|
||||||
|
|
||||||
call [disable_mouse]
|
call [disable_mouse]
|
||||||
|
|
||||||
push ebp
|
push ebp
|
||||||
push eax
|
push eax
|
||||||
push ebx
|
push ebx
|
||||||
push ecx
|
push ecx
|
||||||
push edx
|
push edx
|
||||||
|
|
||||||
mov edx,dword [WinMapAddress-8] ; B
|
mov edx,dword [WinMapAddress-8] ; B
|
||||||
add edx,dword [WinMapAddress-8] ; +B
|
add edx,dword [WinMapAddress-8] ; +B
|
||||||
add edx,dword [WinMapAddress-8] ; +B
|
add edx,dword [WinMapAddress-8] ; +B
|
||||||
push edx
|
push edx
|
||||||
|
|
||||||
mov ebp,[draw_data+32+RECT.left] ; x start:=(x+Xwin)
|
mov ebp,[draw_data+32+RECT.left] ; x start:=(x+Xwin)
|
||||||
mov ebx,[draw_data+32+RECT.top] ; y start:=(y+Ywin)
|
mov ebx,[draw_data+32+RECT.top] ; y start:=(y+Ywin)
|
||||||
|
dec ebx
|
||||||
mov eax,[BytesPerScanLine]
|
mov eax,[BytesPerScanLine]
|
||||||
mul ebx
|
mul ebx
|
||||||
xchg ebp, eax ; BytesPerScanLine*(Ywin+y)
|
xchg ebp, eax ; BytesPerScanLine*(Ywin+y)
|
||||||
add ebp, eax ; +X
|
add ebp, eax ; +X
|
||||||
add ebp, eax ; +X
|
add ebp, eax ; +X
|
||||||
add ebp, eax ; +X
|
add ebp, eax ; +X
|
||||||
|
|
||||||
cmp [ScreenBPP],byte 24 ; 24 or 32 bpp ? - x size
|
cmp [ScreenBPP],byte 24 ; 24 or 32 bpp ? - x size
|
||||||
jz @f
|
jz @f
|
||||||
add ebp,eax ; +X
|
add ebp,eax ; +X
|
||||||
@@:
|
@@:
|
||||||
add ebp,[LFBAddress] ; +LFB
|
add ebp,[LFBAddress] ; +LFB
|
||||||
|
|
||||||
; ebp:=Y*BytesPerScanLine+X*BytesPerPixel+AddrLFB
|
; ebp:=Y*BytesPerScanLine+X*BytesPerPixel+AddrLFB
|
||||||
|
|
||||||
call calculate_edi
|
call calculate_edi
|
||||||
|
|
||||||
|
|
||||||
sdp3: ; MAIN LOOP
|
sdp3: ; MAIN LOOP
|
||||||
cmp [edi+WinMapAddress],byte 1 ; ptrBuffer^<>byte(1)
|
cmp [edi+WinMapAddress],byte 1 ; ptrBuffer^<>byte(1)
|
||||||
jne snbgp
|
jne snbgp
|
||||||
@ -1070,7 +926,20 @@ shl ecx,16
|
|||||||
mov cx,dx
|
mov cx,dx
|
||||||
imul eax, [esp+8] ;8
|
imul eax, [esp+8] ;8
|
||||||
add esi,eax
|
add esi,eax
|
||||||
mov eax,[esi+IMG_BACKGROUND]
|
; mov eax,[esi+IMG_BACKGROUND]
|
||||||
|
mov eax,[img_background]
|
||||||
|
|
||||||
|
push eax
|
||||||
|
mov eax,[display_data-4]
|
||||||
|
imul eax,[display_data-8]
|
||||||
|
imul eax,3
|
||||||
|
sub eax,3
|
||||||
|
cmp eax,esi
|
||||||
|
pop eax
|
||||||
|
jbe @f
|
||||||
|
|
||||||
|
mov eax,[esi+eax]
|
||||||
|
@@:
|
||||||
push eax
|
push eax
|
||||||
ror ecx,16
|
ror ecx,16
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
@ -1083,7 +952,20 @@ div ebx
|
|||||||
cmp eax,5
|
cmp eax,5
|
||||||
pop eax
|
pop eax
|
||||||
jb @f
|
jb @f
|
||||||
mov ebx,[esi+IMG_BACKGROUND+3]
|
; mov ebx,[esi+IMG_BACKGROUND+3]
|
||||||
|
mov ebx,[img_background]
|
||||||
|
|
||||||
|
push eax
|
||||||
|
mov eax,[display_data-4]
|
||||||
|
imul eax,[display_data-8]
|
||||||
|
imul eax,3
|
||||||
|
sub eax,3
|
||||||
|
cmp eax,esi
|
||||||
|
pop eax
|
||||||
|
jbe @f
|
||||||
|
|
||||||
|
mov ebx,[esi+ebx+3]
|
||||||
|
|
||||||
call overlapping_of_points
|
call overlapping_of_points
|
||||||
@@:
|
@@:
|
||||||
push eax
|
push eax
|
||||||
@ -1101,7 +983,16 @@ jb @f
|
|||||||
mov ebx,[display_data-8]
|
mov ebx,[display_data-8]
|
||||||
shl ebx,1
|
shl ebx,1
|
||||||
add ebx,[display_data-8]
|
add ebx,[display_data-8]
|
||||||
add ebx,IMG_BACKGROUND
|
add ebx,[img_background] ;IMG_BACKGROUND
|
||||||
|
|
||||||
|
push eax
|
||||||
|
mov eax,[display_data-4]
|
||||||
|
imul eax,[display_data-8]
|
||||||
|
imul eax,3
|
||||||
|
cmp eax,esi
|
||||||
|
pop eax
|
||||||
|
jbe @f
|
||||||
|
|
||||||
add ebx,esi
|
add ebx,esi
|
||||||
mov ebx,[ebx]
|
mov ebx,[ebx]
|
||||||
call overlapping_of_points
|
call overlapping_of_points
|
||||||
@ -1162,12 +1053,12 @@ ret
|
|||||||
@@:
|
@@:
|
||||||
|
|
||||||
shook1:
|
shook1:
|
||||||
|
|
||||||
inc edi ; ptrBuffer++
|
inc edi ; ptrBuffer++
|
||||||
add esi,3 ; ptrImage+=3
|
add esi,3 ; ptrImage+=3
|
||||||
inc eax
|
inc eax
|
||||||
cmp eax,[draw_data+32+RECT.right] ; X > xend?
|
cmp eax,[draw_data+32+RECT.right] ; X > xend?
|
||||||
jle sdp3
|
jle sdp3
|
||||||
|
; jbe sdp3
|
||||||
|
|
||||||
mov ebp,[draw_data+32+RECT.left]
|
mov ebp,[draw_data+32+RECT.left]
|
||||||
|
|
||||||
@ -1189,9 +1080,13 @@ ret
|
|||||||
|
|
||||||
call calculate_edi
|
call calculate_edi
|
||||||
|
|
||||||
|
; cmp ebx,[ScreenHeight]
|
||||||
|
; ja @f
|
||||||
|
|
||||||
cmp ebx,[draw_data+32+RECT.bottom]
|
cmp ebx,[draw_data+32+RECT.bottom]
|
||||||
jle sdp3
|
jle sdp3
|
||||||
|
; jbe sdp3
|
||||||
|
@@:
|
||||||
add esp,4
|
add esp,4
|
||||||
|
|
||||||
pop edx
|
pop edx
|
||||||
|
Loading…
Reference in New Issue
Block a user