1) small fix of code VGA.

2) decrease of an error "track of cursor ".

git-svn-id: svn://kolibrios.org@119 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Marat Zakiyanov (Mario79) 2006-08-12 15:21:53 +00:00
parent d99e3ea921
commit df2e1aa3a9
3 changed files with 49 additions and 151 deletions

View File

@ -35,47 +35,32 @@ include 'm_com2.inc'
;process_test_m79 db 'K : Process - test Mario79 error 00000000',13,10,0
draw_mouse_under:
; return old picture
pushad
xor ecx,ecx
xor edx,edx
;cli ; !!!****
align 4
mres:
movzx eax,word [0xfb4a]
movzx ebx,word [0xfb4c]
add eax,ecx
add ebx,edx
push ecx
push edx
push eax
push ebx
mov eax,edx
shl eax,6
shl ecx,2
add eax,ecx
add eax,mouseunder
mov ecx,[eax]
pop ebx
pop eax
;;;push edi
mov edi, 1 ;force
call [putpixel]
;;;pop edi
pop edx
pop ecx
inc ecx
cmp ecx, 16
jnz mres
@ -83,35 +68,26 @@ draw_mouse_under:
inc edx
cmp edx, 24
jnz mres
;sti ; !!!****
popad
ret
save_draw_mouse:
pushad
; save & draw
mov [0xfb4a],ax
mov [0xfb4c],bx
push eax
push ebx
mov ecx,0
mov edx,0
;cli ; !!!****
align 4
drm:
push eax
push ebx
push ecx
push edx
; helloworld
push ecx
; push eax ebx ecx
add eax,ecx ; save picture under mouse
add ebx,edx
push ecx
@ -125,9 +101,7 @@ save_draw_mouse:
add eax,mouseunder
mov ebx,[0xfb30]
mov [eax],ebx
; pop ecx ebx eax
pop ecx
mov edi,edx ; y cycle
shl edi,4 ; *16 bytes per row
add edi,ecx ; x cycle
@ -142,29 +116,19 @@ save_draw_mouse:
call combine_colors
mov [0xfb10], ecx
pop ecx
pop edx
pop ecx
pop ebx
pop eax
add eax,ecx ; we have x coord+cycle
add ebx,edx ; and y coord+cycle
; push ecx edi
push ecx
mov ecx, [0xfb10]
mov edi, 1
call [putpixel]
pop ecx
; pop edi ecx
; mnext:
mov ebx,[esp+0] ; pure y coord again
mov eax,[esp+4] ; and x
inc ecx ; +1 cycle
cmp ecx,16 ; if more than 16
jnz drm
@ -172,17 +136,12 @@ save_draw_mouse:
inc edx
cmp edx,24
jnz drm
pop ebx
pop eax
;sti ; !!!****
add esp,8
popad
ret
combine_colors:
; in
; ecx - color ( 00 RR GG BB )
; edi - ref to new color byte
@ -190,7 +149,6 @@ combine_colors:
;
; out
; ecx - new color ( roughly (ecx*[esi]>>8)+([edi]*[esi]>>8) )
push eax
push ebx
push edx
@ -205,12 +163,10 @@ combine_colors:
mul ebx
shr eax, 8
add ecx, eax
; xor eax, eax
; xor ebx, ebx
; mov al, [edi+0]
; mov bl, [esi+0]
movzx eax, byte [edi+0]
movzx ebx, byte [esi+0]
xor eax, eax
xor ebx, ebx
mov al, [edi+0]
mov bl, [esi+0]
mul ebx
shr eax, 8
add ecx, eax
@ -224,12 +180,10 @@ combine_colors:
mul ebx
shr eax, 8
add ecx, eax
; xor eax, eax
; xor ebx, ebx
; mov al, [edi+1]
; mov bl, [esi+1]
movzx eax, byte [edi+1]
movzx ebx, byte [esi+1]
xor eax, eax
xor ebx, ebx
mov al, [edi+1]
mov bl, [esi+1]
mul ebx
shr eax, 8
add ecx, eax
@ -242,16 +196,13 @@ combine_colors:
mul ebx
shr eax, 8
add ecx, eax
; xor eax, eax
; xor ebx, ebx
; mov al, [edi+2]
; mov bl, [esi+2]
movzx eax, byte [edi+2]
movzx ebx, byte [esi+2]
xor eax, eax
xor ebx, ebx
mov al, [edi+2]
mov bl, [esi+2]
mul ebx
shr eax, 8
add ecx, eax
pop eax
pop edx
pop ebx
@ -260,48 +211,30 @@ combine_colors:
__sys_disable_mouse:
cmp dword [0xf204],dword 0
je @f
ret
@@:
; cli
pushad
cmp [0x3000],dword 1
je disable_m
mov edx,[0x3000]
shl edx,5
add edx,window_data
movzx eax, word [0xfb0a]
movzx ebx, word [0xfb0c]
mov ecx,[0xfe00]
inc ecx
imul ecx,ebx
add ecx,eax
add ecx, display_data
mov eax, [0x3000]
movzx ebx, byte [ecx]
cmp eax,ebx
je yes_mouse_disable
movzx ebx, byte [ecx+16]
cmp eax,ebx
je yes_mouse_disable
; mov ebx,[0xfe00]
; inc ebx
; imul ebx,10
; add ecx,ebx
; movzx ebx, byte [ecx]
; cmp eax,ebx
; je yes_mouse_disable
mov ebx,[0xfe00]
inc ebx
imul ebx,10
@ -309,61 +242,44 @@ __sys_disable_mouse:
movzx ebx, byte [ecx]
cmp eax,ebx
je yes_mouse_disable
movzx ebx, byte [ecx+16]
cmp eax,ebx
je yes_mouse_disable
jmp no_mouse_disable
yes_mouse_disable:
mov edx,[0x3000]
shl edx,5
add edx,window_data
movzx eax, word [0xfb0a]
movzx ebx, word [0xfb0c]
mov ecx,[edx+0] ; mouse inside the area ?
add eax,14
cmp eax,ecx
jb no_mouse_disable
sub eax,14
add ecx,[edx+8]
cmp eax,ecx
jg no_mouse_disable
mov ecx,[edx+4]
add ebx,20
cmp ebx,ecx
jb no_mouse_disable
sub ebx,20
add ecx,[edx+12]
cmp ebx,ecx
jg no_mouse_disable
disable_m:
cmp dword [0xf204],dword 0
jne @f
jne no_mouse_disable
cli
call draw_mouse_under
sti
; @@:
mov [0xf204],dword 1
; inc dword [0xf204]
@@:
no_mouse_disable:
popad
; sti
ret
__sys_draw_pointer:
cmp [mouse_pause],0
je @f
ret
@ -379,12 +295,9 @@ __sys_draw_pointer:
mov eax,[timer_ticks]
mov [MouseTickCounter],eax
pop eax
; cli
pushad
cmp dword [0xf204],dword 0 ; mouse visible ?
je chms00
mov [0xf204], dword 0
movzx ebx,word [0xfb0c]
movzx eax,word [0xfb0a]
@ -393,25 +306,17 @@ __sys_draw_pointer:
sti
nodmu2:
popad
ret
chms00:
movzx ecx,word [0xfb4a]
movzx edx,word [0xfb4c]
movzx ebx,word [0xfb0c]
movzx eax,word [0xfb0a]
cmp eax,ecx
jne redrawmouse
cmp ebx,edx
jne redrawmouse
jmp nodmp
redrawmouse:
cli
call draw_mouse_under
@ -419,5 +324,5 @@ __sys_draw_pointer:
sti
nodmp:
popad
; sti
ret

View File

@ -4035,9 +4035,9 @@ sys_putimage:
@@:
mov eax, vesa20_putimage
.doit:
; inc [mouse_pause]
inc [mouse_pause]
call eax
; dec [mouse_pause]
dec [mouse_pause]
jmp [draw_pointer]
; eax x beginning
@ -4881,7 +4881,6 @@ syscall_writeramdiskfile: ; WriteRamdiskFile
align 4
syscall_getpixel: ; GetPixel
mov ecx,[0xfe00]
inc ecx
xor edx,edx

View File

@ -172,10 +172,7 @@ checkVga_N13:
m13pix:
lodsd
cmp eax,0
jne @f
xor eax,eax
jmp .save_pixel
@@:
je .save_pixel
push eax
mov ebx,eax
and eax,(128+64+32) ; blue
@ -198,7 +195,10 @@ checkVga_N13:
popad
ret
novesal_1:
VGA_drawbackground:
; draw all
cmp [0xfe0c],dword 0x12
jne .end
pushad
mov esi,[0xfe80]
mov edi,0xa0000
@ -217,6 +217,7 @@ checkVga_N13:
jnz @r
call VGA_draw_long_line_1
popad
.end:
ret
VGA_draw_long_line:
@ -263,25 +264,25 @@ VGA_draw_32_pixels:
dec cl
shl ch,cl
cmp al,85
jb .p13green
jbe .p13green
or [ebp],ch
cmp al,170
jb .p13green
jbe .p13green
or [ebp+12],ch
.p13green:
cmp ah,85
jb .p13red
jbe .p13red
or [ebp+4],ch
cmp ah,170
jb .p13red
jbe .p13red
or [ebp+12],ch
.p13red:
shr eax,8
cmp ah,85
jb .p13cont
jbe .p13cont
or [ebp+8],ch
cmp ah,170
jb .p13cont
jbe .p13cont
or [ebp+12],ch
.p13cont:
ror eax,8
@ -333,25 +334,25 @@ VGA_putpixel:
cmp eax,0
je .p13cont
cmp al,85
jb .p13green
jbe .p13green
or dl,0x01
cmp al,170
jb .p13green
jbe .p13green
or dl,0x08
.p13green:
cmp ah,85
jb .p13red
jbe .p13red
or dl,0x02
cmp ah,170
jb .p13red
jbe .p13red
or dl,0x08
.p13red:
shr eax,8
cmp ah,85
jb .p13cont
jbe .p13cont
or dl,0x04
cmp ah,170
jb .p13cont
jbe .p13cont
or dl,0x08
.p13cont:
ror edx,8
@ -375,7 +376,6 @@ VGA__putimage:
cmp [0xfe0c],dword 0x12
jne @f
pushad
; calculate absolute (i.e. screen) coordinates
rol edx,16
movzx eax,dx
rol edx,16
@ -443,10 +443,4 @@ VGA_draw_long_line_1:
pop edi esi edx ebx
ret
VGA_drawbackground:
; draw all
cmp [0xfe0c],dword 0x12
jne @f
call novesal_1
@@:
ret