/kernel/trunk/hid/keyboard.inc |
---|
267,12 → 267,12 |
.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 |
/kernel/trunk/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 |
/kernel/trunk/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 |
/kernel/trunk/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/trunk/hid/mousedrv.inc |
---|
43,8 → 43,8 |
cmp [set_hw_cursor], 0 |
jz @F |
pushad |
movzx eax,word [0xfb4a] |
movzx ebx,word [0xfb4c] |
movzx eax,word [X_UNDER] |
movzx ebx,word [Y_UNDER] |
stdcall [hw_restore], eax, ebx |
popad |
ret |
54,8 → 54,8 |
xor edx,edx |
align 4 |
mres: |
movzx eax,word [0xfb4a] |
movzx ebx,word [0xfb4c] |
movzx eax,word [X_UNDER] |
movzx ebx,word [Y_UNDER] |
add eax,ecx |
add ebx,edx |
push ecx |
90,14 → 90,14 |
jz @F |
pushad |
mov [0xfb4a],ax |
mov [0xfb4c],bx |
movzx eax,word [0xfb0c] |
movzx ebx,word [0xfb0a] |
mov [X_UNDER],ax |
mov [Y_UNDER],bx |
movzx eax,word [MOUSE_Y] |
movzx ebx,word [MOUSE_X] |
push eax |
push ebx |
mov ecx, [0xfe00] |
mov ecx, [ScreenWidth] |
inc ecx |
mul ecx |
movzx edx, byte [display_data+ebx+eax] |
123,8 → 123,8 |
@@: |
pushad |
; save & draw |
mov [0xfb4a],ax |
mov [0xfb4c],bx |
mov [X_UNDER],ax |
mov [Y_UNDER],bx |
push eax |
push ebx |
mov ecx,0 |
141,7 → 141,7 |
add ebx,edx |
push ecx |
call getpixel |
mov [0xfb30],ecx |
mov [COLOR_TEMP],ecx |
pop ecx |
mov eax,edx |
shl eax,6 |
148,7 → 148,7 |
shl ecx,2 |
add eax,ecx |
add eax,mouseunder |
mov ebx,[0xfb30] |
mov ebx,[COLOR_TEMP] |
mov [eax],ebx |
pop ecx |
mov edi,edx ; y cycle |
157,13 → 157,13 |
mov esi, edi |
add edi, esi |
add edi, esi ; *3 |
add edi,[0xf200] ; we have our str address |
add edi,[MOUSE_PICTURE] ; we have our str address |
mov esi, edi |
add esi, 16*24*3 |
push ecx |
mov ecx, [0xfb30] |
mov ecx, [COLOR_TEMP] |
call combine_colors |
mov [0xfb10], ecx |
mov [MOUSE_COLOR_MEM], ecx |
pop ecx |
pop edx |
pop ecx |
172,7 → 172,7 |
add eax,ecx ; we have x coord+cycle |
add ebx,edx ; and y coord+cycle |
push ecx |
mov ecx, [0xfb10] |
mov ecx, [MOUSE_COLOR_MEM] |
mov edi, 1 |
call [putpixel] |
pop ecx |
260,7 → 260,7 |
__sys_disable_mouse: |
cmp dword [0xf204],dword 0 |
cmp dword [MOUSE_VISIBLE],dword 0 |
je @f |
ret |
@@: |
270,9 → 270,9 |
mov edx,[CURRENT_TASK] |
shl edx,5 |
add edx,window_data |
movzx eax, word [0xfb0a] |
movzx ebx, word [0xfb0c] |
mov ecx,[0xfe00] |
movzx eax, word [MOUSE_X] |
movzx ebx, word [MOUSE_Y] |
mov ecx,[ScreenWidth] |
inc ecx |
imul ecx,ebx |
add ecx,eax |
284,7 → 284,7 |
movzx ebx, byte [ecx+16] |
cmp eax,ebx |
je yes_mouse_disable |
mov ebx,[0xfe00] |
mov ebx,[ScreenWidth] |
inc ebx |
imul ebx,10 |
add ecx,ebx |
299,8 → 299,8 |
mov edx,[CURRENT_TASK] |
shl edx,5 |
add edx,window_data |
movzx eax, word [0xfb0a] |
movzx ebx, word [0xfb0c] |
movzx eax, word [MOUSE_X] |
movzx ebx, word [MOUSE_Y] |
mov ecx,[edx+0] ; mouse inside the area ? |
add eax,14 |
cmp eax,ecx |
318,12 → 318,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 |
345,11 → 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] |
mov [MOUSE_VISIBLE], dword 0 |
movzx ebx,word [MOUSE_Y] |
movzx eax,word [MOUSE_X] |
cli |
call save_draw_mouse |
sti |
357,10 → 357,10 |
popad |
ret |
chms00: |
movzx ecx,word [0xfb4a] |
movzx edx,word [0xfb4c] |
movzx ebx,word [0xfb0c] |
movzx eax,word [0xfb0a] |
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 |