Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 129 → Rev 384

/kernel/branches/gfx_kernel/hid/keyboard.inc
86,15 → 86,15
 
align 4
irq1:
save_ring3_context
mov ax, os_data
mov ds, ax
mov es, ax
; save_ring3_context
; mov ax, os_data
; mov ds, ax
; mov es, ax
 
mov eax, [0x3004] ; top window process
movzx eax,word[0xC400+eax*2]
movzx eax,word[TASK_COUNT] ; top window process
movzx eax,word[WIN_POS+eax*2]
shl eax,8
mov al,[0x80000+eax+APPDATA.keyboard_mode]
mov al,[SLOT_BASE+eax+APPDATA.keyboard_mode]
mov [keyboard_mode],al
 
in al,0x60
267,21 → 267,22
.scancode:
mov bl, ch
.dowrite:
movzx eax,byte[0xF400]
movzx eax,byte[KEY_COUNT]
cmp al,120
jae .exit.irq1
inc eax
mov [0xF400],al
mov [0xF400+eax],bl
mov [KEY_COUNT],al
mov [KEY_COUNT+eax],bl
 
.exit.irq1:
mov [check_idle_semaphore],5
 
mov al,0x20 ; ready for next irq
out 0x20,al
; mov al,0x20 ; ready for next irq
; out 0x20,al
 
restore_ring3_context
iret
; restore_ring3_context
; iret
ret
 
set_lights:
mov al,0xED
/kernel/branches/gfx_kernel/hid/m_com1.inc
61,7 → 61,7
shr ah,5
and ah,1
add al,ah
mov [0xfb40],al
mov [BTN_DOWN],al
mov [mouse_active],1
; Ïðèáàâèòü ïåðåìåùåíèå ïî X ê êîîðäèíàòå X
mov AL,[FirstByte]
69,14 → 69,14
or AL,[SecondByte]
cbw
call mouse_acceleration_com1
add AX,[0xFB0A] ;[XCoordinate]
add AX,[MOUSE_X] ;[XCoordinate]
; Êóðñîð íå äîëæåí âûõîäèòü çà ëåâóþ èëè
; ïðàâóþ ãðàíèöó ýêðàíà
js @@X1
cmp AX,[0xFE00] ;ScreenLength
cmp AX,[ScreenWidth] ;ScreenLength
jb @@X2
; Óñòàíîâèòü êîîðäèíàòó X ïî ïðàâîé ãðàíèöå
mov AX,[0xFE00] ;ScreenLength-1
mov AX,[ScreenWidth] ;ScreenLength-1
dec ax
jmp @@X2
@@X1:
83,7 → 83,7
; Óñòàíîâèòü êîîðäèíàòó X ïî ëåâîé ãðàíèöå
xor AX,AX
@@X2:
mov [0xFB0A],AX ;[XCoordinate]
mov [MOUSE_X],AX ;[XCoordinate]
; Ïðèáàâèòü ïåðåìåùåíèå ïî Y ê êîîðäèíàòå Y
mov AL,[FirstByte]
and AL,00001100b
91,14 → 91,14
or AL,[ThirdByte]
cbw
call mouse_acceleration_com1
add AX,[0xFB0C] ;[YCoordinate]
add AX,[MOUSE_Y] ;[YCoordinate]
; Êóðñîð íå äîëæåí âûõîäèòü çà âåðõíþþ èëè
; íèæíþþ ãðàíèöó ýêðàíà
js @@Y1
cmp AX,[0xFE04] ;ScreenHeigth
cmp AX,[ScreenHeight] ;ScreenHeigth
jb @@Y2
; Óñòàíîâèòü êîîðäèíàòó X ïî íèæíåé ãðàíèöå
mov AX,[0xFE04] ;ScreenHeigth-1
mov AX,[ScreenHeight] ;ScreenHeigth-1
dec ax
jmp @@Y2
@@Y1:
105,7 → 105,7
; Óñòàíîâèòü êîîðäèíàòó X ïî âåðõíåé ãðàíèöå
xor AX,AX
@@Y2:
mov [0xFB0C],AX ;[YCoordinate]
mov [MOUSE_Y],AX ;[YCoordinate]
mov eax,[timer_ticks]
mov [timer_ticks_com],eax
jmp @@EndMouseInterrupt
125,6 → 125,6
cmp eax,[mouse_delay]
pop eax
ja @f
shl ax,1
imul ax,[mouse_speed_factor]
@@:
ret
/kernel/branches/gfx_kernel/hid/m_com2.inc
61,7 → 61,7
shr ah,5
and ah,1
add al,ah
mov [0xfb40],al
mov [BTN_DOWN],al
mov [mouse_active],1
; Ïðèáàâèòü ïåðåìåùåíèå ïî X ê êîîðäèíàòå X
mov AL,[FirstByte_1]
69,14 → 69,14
or AL,[SecondByte_1]
cbw
call mouse_acceleration_com2
add AX,[0xFB0A] ;[XCoordinate]
add AX,[MOUSE_X] ;[XCoordinate]
; Êóðñîð íå äîëæåí âûõîäèòü çà ëåâóþ èëè
; ïðàâóþ ãðàíèöó ýêðàíà
js @@X1_1
cmp AX,[0xFE00] ;ScreenLength
cmp AX,[ScreenWidth] ;ScreenLength
jb @@X2_1
; Óñòàíîâèòü êîîðäèíàòó X ïî ïðàâîé ãðàíèöå
mov AX,[0xFE00] ;ScreenLength-1
mov AX,[ScreenWidth] ;ScreenLength-1
dec ax
jmp @@X2_1
@@X1_1:
83,7 → 83,7
; Óñòàíîâèòü êîîðäèíàòó X ïî ëåâîé ãðàíèöå
xor AX,AX
@@X2_1:
mov [0xFB0A],AX ;[XCoordinate]
mov [MOUSE_X],AX ;[XCoordinate]
; Ïðèáàâèòü ïåðåìåùåíèå ïî Y ê êîîðäèíàòå Y
mov AL,[FirstByte_1]
and AL,00001100b
91,14 → 91,14
or AL,[ThirdByte_1]
cbw
call mouse_acceleration_com2
add AX,[0xFB0C] ;[YCoordinate]
add AX,[MOUSE_Y] ;[YCoordinate]
; Êóðñîð íå äîëæåí âûõîäèòü çà âåðõíþþ èëè
; íèæíþþ ãðàíèöó ýêðàíà
js @@Y1_1
cmp AX,[0xFE04] ;ScreenHeigth
cmp AX,[ScreenHeight] ;ScreenHeigth
jb @@Y2_1
; Óñòàíîâèòü êîîðäèíàòó X ïî íèæíåé ãðàíèöå
mov AX,[0xFE04] ;ScreenHeigth-1
mov AX,[ScreenHeight] ;ScreenHeigth-1
dec ax
jmp @@Y2_1
@@Y1_1:
105,7 → 105,7
; Óñòàíîâèòü êîîðäèíàòó X ïî âåðõíåé ãðàíèöå
xor AX,AX
@@Y2_1:
mov [0xFB0C],AX ;[YCoordinate]
mov [MOUSE_Y],AX ;[YCoordinate]
mov eax,[timer_ticks]
mov [timer_ticks_com_1],eax
jmp @@EndMouseInterrupt_1
125,6 → 125,6
cmp eax,[mouse_delay]
pop eax
ja @f
shl ax,1
imul ax,[mouse_speed_factor]
@@:
ret
/kernel/branches/gfx_kernel/hid/m_ps2.inc
42,7 → 42,7
; Çàïèñàòü íîâîå çíà÷åíèå áàéòà ñîñòîÿíèÿ êíîïîê
mov al,[FirstByte_2] ;[0xfb01]
and eax,3
mov [0xfb40],al
mov [BTN_DOWN],al
mov [mouse_active],1
; Âû÷èñëèòü íîâóþ X-êîîðäèíàòó êóðñîðà
; Çàíåñòè â AX ïåðåìåùåíèå ïî X
57,18 → 57,18
call mouse_acceleration_ps2
; Âû÷èñëèòü íîâîå çíà÷åíèå êîîðäèíàòû
; êóðñîðà ïî X
add AX,[0xFB0A] ;[XCoordinate]
add AX,[MOUSE_X] ;[XCoordinate]
cmp AX,0
jge @@M1
mov AX,0
jmp @@M2
@@M1:
cmp AX,[0xFE00] ;ScreenLength
cmp AX,[ScreenWidth] ;ScreenLength
jl @@M2
mov AX,[0xFE00] ;ScreenLength-1
mov AX,[ScreenWidth] ;ScreenLength-1
dec ax
@@M2:
mov [0xFB0A],AX ;[XCoordinate]
mov [MOUSE_X],AX ;[XCoordinate]
 
; Âû÷èñëÿåì íîâóþ Y-êîîðäèíàòó êóðñîðà
; Çàíåñòè â AX ïåðåìåùåíèå ïî Y
85,18 → 85,18
; ïî Y (Y-êîîðäèíàòà ìûøè PS/2 íàïðàâëåíà
; ïðîòèâîïîëîæíî ýêðàííîé)
neg AX
add AX,[0xFB0C] ;[YCoordinate]
add AX,[MOUSE_Y] ;[YCoordinate]
cmp AX,0
jge @@M4
mov AX,0
jmp @@M5
@@M4:
cmp AX,[0xFE04] ;ScreenHeigth
cmp AX,[ScreenHeight] ;ScreenHeigth
jl @@M5
mov AX,[0xFE04] ;ScreenHeigth-1
mov AX,[ScreenHeight] ;ScreenHeigth-1
dec ax
@@M5:
mov [0xFB0C],AX ;[YCoordinate]
mov [MOUSE_Y],AX ;[YCoordinate]
 
; Ïîêàçàòü êóðñîð â íîâîé ïîçèöèè
mov eax,[timer_ticks]
106,7 → 106,7
; Îáíàðóæåí ñáîé â ïîðÿäêå ïåðåäà÷è èíôîðìàöèè îò ìûøè
@@Error_2:
mov [MouseByteNumber_2],0
; Íîðìàëüíîå çàâåðøåíèå ïðåðûâàíèÿ
; Íîðìàëüíîå çàâåðøåíèå ïðåðûâàíè
@@EndMouseInterrupt_2:
call ready_for_next_irq_1
ret
129,7 → 129,7
;***********************************************
Wait8042BufferEmpty:
; push CX
; mov CX,0FFFFh ;çàäàòü ÷èñëî öèêëîâ îæèäàíèÿ
; mov CX,0FFFFh ;çàäàòü ÷èñëî öèêëîâ îæèäàíè
;@@kb:
; in AL,64h ;ïîëó÷èòü ñòàòóñ
; test AL,10b ;áóôåð i8042 ñâîáîäåí?
151,7 → 151,7
;***************************************
WaitMouseData:
; push CX
; mov CX,0FFFFh ;çàäàòü ÷èñëî öèêëîâ îæèäàíèÿ
; mov CX,0FFFFh ;çàäàòü ÷èñëî öèêëîâ îæèäàíè
;@@mouse:
; in AL,64h ;îïðîñèòü ðåãèñòð ñòàòóñà
; test AL,100000b ;äàííûå ïîñòóïèëè?
/kernel/branches/gfx_kernel/hid/mousedrv.inc
40,124 → 40,152
__sys_draw_mouse_under:
; return old picture
 
cmp [set_hw_cursor], 0
jz @F
pushad
 
movzx eax,word [X_UNDER]
movzx ebx,word [Y_UNDER]
stdcall [hw_restore], eax, ebx
popad
ret
@@:
pushad
xor ecx,ecx
xor edx,edx
mov esi,mouseunder-4
 
align 4
mres:
 
add esi,4
 
movsx eax,word[0xfb4a]
movzx eax,word [X_UNDER]
movzx ebx,word [Y_UNDER]
add eax,ecx
js .skip
movsx ebx,word[0xfb4c]
add ebx,edx
js .skip
 
push ecx
push edx
mov ecx,[esi]
 
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
mov edi,1 ;force
push esi
call [putpixel]
pop esi
 
pop edx
pop ecx
.skip:
inc ecx
cmp ecx,32
 
cmp ecx, 16
jnz mres
xor ecx, ecx
inc edx
cmp edx,32
cmp edx, 24
jnz mres
 
popad
ret
 
save_draw_mouse:
 
save_draw_mouse:
cmp [set_hw_cursor], 0
jz @F
pushad
; save & draw
mov [0xfb4a],ax
mov [0xfb4c],bx
 
mov [X_UNDER],ax
mov [Y_UNDER],bx
movzx eax,word [MOUSE_Y]
movzx ebx,word [MOUSE_X]
push eax
push ebx
xor ecx,ecx
mov edx,ecx
mov esi,mouseunder-4;3
mov edi,mousepointer+62-4
 
mov dword[0x6900],mouseunder+mousecomb
mov ecx, [ScreenWidth]
inc ecx
mul ecx
movzx edx, byte [display_data+ebx+eax]
shl edx, 8
mov ecx, [edx+SLOT_BASE+APPDATA.cursor]
 
cmp [ecx+CURSOR.magic], 'CURS'
jne .fail
; cmp [ecx+CURSOR.size], CURSOR_SIZE
; jne .fail
push ecx
call [set_hw_cursor]
popad
ret
.fail:
mov ecx, [def_cursor]
mov [edx+SLOT_BASE+APPDATA.cursor], ecx
push ecx
call [set_hw_cursor]
popad
ret
 
@@:
pushad
; save & draw
mov [X_UNDER],ax
mov [Y_UNDER],bx
push eax
push ebx
mov ecx,0
mov edx,0
align 4
drm:
 
add esi,4;3
add edi,4
 
push eax ebx ecx edx
 
push eax ebx
push eax
push ebx
push ecx
push edx
; helloworld
push ecx
add eax,ecx ; save picture under mouse
js @f
add ebx,edx
js @f
push esi edi
call [getpixel]
pop edi esi
mov [esi],ecx
pop ebx eax
 
push esi edi
push ecx
call getpixel
mov [COLOR_TEMP],ecx
pop ecx
mov eax,edx
shl eax,6
shl ecx,2
add eax,ecx
add eax,mouseunder
mov ebx,[COLOR_TEMP]
mov [eax],ebx
pop ecx
mov edi,edx ; y cycle
shl edi,4 ; *16 bytes per row
add edi,ecx ; x cycle
mov esi, edi
add edi, esi
add edi, esi ; *3
add edi,[MOUSE_PICTURE] ; we have our str address
mov esi, edi
add esi, 16*24*3
push ecx
mov ecx, [COLOR_TEMP]
call combine_colors
pop edi esi
mov [0xfb10],ecx
 
pop edx ecx ebx eax
 
xchg esi,[0x6900]
push dword[0xFB10]
pop dword[esi]
add esi,3
xchg esi,[0x6900]
 
jc mnext
 
mov [MOUSE_COLOR_MEM], ecx
pop ecx
pop edx
pop ecx
pop ebx
pop eax
add eax,ecx ; we have x coord+cycle
js mnext
add ebx,edx ; and y coord+cycle
js mnext
 
push ecx edi esi
mov ecx, [0xfb10]
push ecx
mov ecx, [MOUSE_COLOR_MEM]
mov edi, 1
call [putpixel]
pop esi edi ecx
jmp mnext
@@: add esp,8
pop edx ecx ebx eax
mnext:
 
pop ecx
mov ebx,[esp+0] ; pure y coord again
mov eax,[esp+4] ; and x
 
inc ecx ; +1 cycle
cmp ecx,32
cmp ecx,16 ; if more than 16
jnz drm
xor ecx,ecx
inc edx
cmp edx,32
cmp edx,24
jnz drm
pop ebx
pop eax
 
add esp,8
popad
ret
 
170,141 → 198,132
;
; out
; ecx - new color ( roughly (ecx*[esi]>>8)+([edi]*[esi]>>8) )
; colors:
; [esp] = background:
; [edi] = cursor
; <ecx> = combined
 
cmp byte[edi+3],0
jne @f
stc
ret
@@:
cmp byte[edi+3],255
jne @f
mov ecx,[edi]
and ecx,0x00FFFFFF
clc
ret
@@:
push eax
push ebx
push edx
push ecx
 
xor ecx,ecx
 
movzx eax,byte[edi+2]
movzx ebx,byte[esp+2]
sub eax,ebx
movzx ebx,byte[edi+3]
imul ebx
xor edx,edx
mov ebx,255
div ebx
add al,[esp+2]
mov cl,al
; byte 2
mov eax, 0xff
sub al, [esi+0]
mov ebx, [esp]
shr ebx, 16
and ebx, 0xff
mul ebx
shr eax, 8
add ecx, eax
xor eax, eax
xor ebx, ebx
mov al, [edi+0]
mov bl, [esi+0]
mul ebx
shr eax, 8
add ecx, eax
shl ecx,8
 
movzx eax,byte[edi+1]
movzx ebx,byte[esp+1]
sub eax,ebx
movzx ebx,byte[edi+3]
imul ebx
xor edx,edx
mov ebx,255
div ebx
add al,[esp+1]
mov cl,al
; byte 1
mov eax, 0xff
sub al, [esi+1]
mov ebx, [esp]
shr ebx, 8
and ebx, 0xff
mul ebx
shr eax, 8
add ecx, eax
xor eax, eax
xor ebx, ebx
mov al, [edi+1]
mov bl, [esi+1]
mul ebx
shr eax, 8
add ecx, eax
shl ecx,8
 
movzx eax,byte[edi+0]
movzx ebx,byte[esp+0]
sub eax,ebx
movzx ebx,byte[edi+3]
imul ebx
xor edx,edx
mov ebx,255
div ebx
add al,[esp+0]
mov cl,al
 
add esp,4
 
clc
; byte 2
mov eax, 0xff
sub al, [esi+2]
mov ebx, [esp]
and ebx, 0xff
mul ebx
shr eax, 8
add ecx, eax
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
pop eax
ret
 
 
__sys_disable_mouse:
cmp dword [0xf204],dword 0
cmp dword [MOUSE_VISIBLE],dword 0
je @f
ret
@@:
pushad
cmp [0x3000],dword 1
cmp [CURRENT_TASK],dword 1
je disable_m
mov edx,[0x3000]
mov edx,[CURRENT_TASK]
shl edx,5
add edx,window_data
movzx eax,word[0xfb0a]
movzx ecx,word[mousepointer+10]
sub eax,ecx
movzx ebx,word[0xfb0c]
movzx ecx,word[mousepointer+12]
sub ebx,ecx
mov ecx,[0xfe00]
movzx eax, word [MOUSE_X]
movzx ebx, word [MOUSE_Y]
mov ecx,[ScreenWidth]
inc ecx
imul ecx,ebx
add ecx,eax
add ecx, display_data
; mov eax, [0x3000]
movzx eax, byte [edx+twdw+0xe]
mov eax, [CURRENT_TASK]
movzx ebx, byte [ecx]
cmp eax,ebx
je yes_mouse_disable
movzx ebx, byte [ecx+32]
movzx ebx, byte [ecx+16]
cmp eax,ebx
je yes_mouse_disable
mov ebx,[0xfe00]
mov ebx,[ScreenWidth]
inc ebx
imul ebx,32
imul ebx,10
add ecx,ebx
movzx ebx, byte [ecx]
cmp eax,ebx
je yes_mouse_disable
movzx ebx, byte [ecx+32]
movzx ebx, byte [ecx+16]
cmp eax,ebx
je yes_mouse_disable
jmp no_mouse_disable
yes_mouse_disable:
mov edx,[0x3000]
mov edx,[CURRENT_TASK]
shl edx,5
add edx,window_data
movzx eax, word [0xfb0a]
movzx ebx, word [0xfb0c]
movzx ecx,word[mousepointer+10]
sub eax,ecx
movzx ecx,word[mousepointer+12]
sub ebx,ecx
movzx eax, word [MOUSE_X]
movzx ebx, word [MOUSE_Y]
mov ecx,[edx+0] ; mouse inside the area ?
add eax,32
add eax,14
cmp eax,ecx
jl no_mouse_disable
sub eax,32
jb no_mouse_disable
sub eax,14
add ecx,[edx+8]
cmp eax,ecx
jg no_mouse_disable
mov ecx,[edx+4]
add ebx,32
add ebx,20
cmp ebx,ecx
jl no_mouse_disable
sub ebx,32
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
cmp dword [MOUSE_VISIBLE],dword 0
jne no_mouse_disable
cli
call [draw_mouse_under]
sti
mov [0xf204],dword 1
mov [MOUSE_VISIBLE],dword 1
no_mouse_disable:
popad
ret
326,15 → 345,11
mov [MouseTickCounter],eax
pop eax
pushad
cmp dword [0xf204],dword 0 ; mouse visible ?
cmp dword [MOUSE_VISIBLE],dword 0 ; mouse visible ?
je chms00
mov [0xf204], dword 0
movzx ebx,word [0xfb0c]
movzx eax,word [0xfb0a]
movzx esi,word[mousepointer+10]
sub eax,esi
movzx esi,word[mousepointer+12]
sub ebx,esi
mov [MOUSE_VISIBLE], dword 0
movzx ebx,word [MOUSE_Y]
movzx eax,word [MOUSE_X]
cli
call save_draw_mouse
sti
342,14 → 357,10
popad
ret
chms00:
movsx ecx,word[0xfb4a]
movsx edx,word[0xfb4c]
movzx ebx,word [0xfb0c]
movzx eax,word [0xfb0a]
movzx esi,word[mousepointer+10]
sub eax,esi
movzx esi,word[mousepointer+12]
sub ebx,esi
movzx ecx,word [X_UNDER]
movzx edx,word [Y_UNDER]
movzx ebx,word [MOUSE_Y]
movzx eax,word [MOUSE_X]
cmp eax,ecx
jne redrawmouse
cmp ebx,edx