Subversion Repositories Kolibri OS

Rev

Rev 425 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. $Revision: 431 $
  2. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  3. ;;                                                              ;;
  4. ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
  5. ;; Distributed under terms of the GNU General Public License    ;;
  6. ;;                                                              ;;
  7. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  8.  
  9. ; ═юьхЁ яЁшэшьрхьюую юЄ ь√°ш срщЄр
  10. MouseByteNumber_2 DB 0
  11. ; ╥ЁхїсрщЄютр  ёЄЁєъЄєЁр фрээ√ї, яхЁхфртрхьр  ь√°№■
  12. FirstByte_2       DB 0
  13. SecondByte_2      DB 0
  14. ThirdByte_2       DB 0
  15. timer_ticks_ps2   dd 0
  16.  
  17. ;**************************************
  18. ;* ╬┴╨└┴╬╥╫╚╩ ╧╨┼╨█┬└═╚▀ ╬╥ ╠█╪╚ PS/2 *
  19. ;**************************************
  20. check_mouse_data_ps2:
  21.         cmp     [ps2_mouse_detected],0
  22.         je      @@EndMouseInterrupt_2
  23.         call    Wait8042BufferEmpty ;юўшёЄър сєЇхЁр
  24.         in      AL,0x60              ;яюыєўшЄ№ ёъ¤э-ъюф
  25. ; ┬√сшЁрЄ№ яюЁ фъют√щ эюьхЁ яЁшэшьрхьюую срщЄр
  26.         cmp     [MouseByteNumber_2],0
  27.         je      @@SaveFirstByte
  28.         cmp     [MouseByteNumber_2],1
  29.         je      @@SaveSecondByte
  30.         cmp     [MouseByteNumber_2],2
  31.         je      @@SaveThirdByte
  32.         jmp     @@Error_2
  33. ; ╟ряшёрЄ№ яхЁт√щ срщЄ яюё√ыъш
  34. @@SaveFirstByte:
  35.         test    AL,1000b  ;яхЁт√щ срщЄ яюё√ыъш?
  36.         jz      @@Error_2     ;ёсющ ёшэїЁюэшчрЎшш
  37.         mov     [FirstByte_2],AL
  38.         inc     [MouseByteNumber_2]
  39.         jmp     @@EndMouseInterrupt_2
  40. ; ╟ряшёрЄ№ тЄюЁющ срщЄ яюё√ыъш
  41. @@SaveSecondByte:
  42.         mov     [SecondByte_2],AL
  43.         inc     [MouseByteNumber_2]
  44.         jmp     @@EndMouseInterrupt_2
  45. ; ╟ряшёрЄ№ ЄЁхЄшщ срщЄ яюё√ыъш
  46. @@SaveThirdByte:
  47.         mov     [ThirdByte_2],AL
  48.         mov     [MouseByteNumber_2],0
  49. ; (яръхЄ фрээ√ї юЄ ь√°ш яЁшэ Є яюыэюёЄ№■)
  50. ; ╟ряшёрЄ№ эютюх чэрўхэшх срщЄр ёюёЄю эш  ъэюяюъ
  51.         mov al,[FirstByte_2]   ;[0xfb01]
  52.         and    eax,3
  53.         mov    [BTN_DOWN],al
  54.         mov    [mouse_active],1
  55. ; ┬√ўшёышЄ№ эютє■ X-ъююЁфшэрЄє ъєЁёюЁр
  56.         ; ╟рэхёЄш т AX яхЁхьх∙хэшх яю X
  57.         mov     AH,0   ;фєсышЁєхь чэръ тю тёх ЁрчЁ ф√ AH
  58.         mov     AL,[FirstByte_2]
  59.         test    AL,10000b
  60.         jz      @@M0
  61.         mov     AH,0FFh
  62.         ; ╟рэхёЄш т AL ьырф°шщ срщЄ
  63. @@M0:
  64.          mov     AL,[SecondByte_2]
  65.         call     mouse_acceleration_ps2
  66.         ; ┬√ўшёышЄ№ эютюх чэрўхэшх ъююЁфшэрЄ√
  67.         ; ъєЁёюЁр яю X
  68.         add     AX,[MOUSE_X]    ;[XCoordinate]
  69.         cmp     AX,0
  70.         jge     @@M1
  71.         mov     AX,0
  72.         jmp     @@M2
  73. @@M1:
  74.         cmp     AX,[ScreenWidth]   ;ScreenLength
  75.         jl      @@M2
  76.         mov     AX,[ScreenWidth]   ;ScreenLength-1
  77.         dec     ax
  78. @@M2:
  79.         mov     [MOUSE_X],AX     ;[XCoordinate]
  80.  
  81. ; ┬√ўшёы хь эютє■ Y-ъююЁфшэрЄє ъєЁёюЁр
  82.         ; ╟рэхёЄш т AX яхЁхьх∙хэшх яю Y
  83.         mov     AH,0   ;фєсышЁєхь чэръ тю тёх ЁрчЁ ф√ AH
  84.         mov     AL,[FirstByte_2]
  85.         test    AL,100000b
  86.         jz      @@M3
  87.         mov     AH,0FFh
  88.         ; ╟рэхёЄш т AL ьырф°шщ срщЄ
  89. @@M3:
  90.         mov     AL,[ThirdByte_2]
  91.         call     mouse_acceleration_ps2
  92.         ; ┬√ўшёышЄ№ эютюх чэрўхэшх ъююЁфшэрЄ√ ъєЁёюЁр
  93.         ; яю Y (Y-ъююЁфшэрЄр ь√°ш PS/2 эряЁртыхэр
  94.         ; яЁюЄштюяюыюцэю ¤ъЁрээющ)
  95.         neg     AX
  96.         add     AX,[MOUSE_Y]   ;[YCoordinate]
  97.         cmp     AX,0
  98.         jge     @@M4
  99.         mov     AX,0
  100.         jmp     @@M5
  101. @@M4:
  102.         cmp     AX,[ScreenHeight]  ;ScreenHeigth
  103.         jl      @@M5
  104.         mov     AX,[ScreenHeight] ;ScreenHeigth-1
  105.         dec     ax
  106. @@M5:
  107.         mov     [MOUSE_Y],AX     ;[YCoordinate]
  108.  
  109. ; ╧юърчрЄ№ ъєЁёюЁ т эютющ яючшЎшш
  110.         mov   eax,[timer_ticks]
  111.         mov   [timer_ticks_ps2],eax
  112.         jmp     @@EndMouseInterrupt_2
  113.  
  114. ; ╬сэрЁєцхэ ёсющ т яюЁ фъх яхЁхфрўш шэЇюЁьрЎшш юЄ ь√°ш
  115. @@Error_2:
  116.         mov   [MouseByteNumber_2],0
  117. ; ═юЁьры№эюх чртхЁ°хэшх яЁхЁ√трэш
  118. @@EndMouseInterrupt_2:
  119.         call  ready_for_next_irq_1
  120.         ret
  121.  
  122. mouse_acceleration_ps2:
  123.         push    eax
  124.         mov   eax,[timer_ticks]
  125.         sub   eax,[timer_ticks_ps2]
  126.         cmp   eax,[mouse_delay]
  127.         pop    eax
  128.         ja     @f
  129.         imul  ax,[mouse_speed_factor]
  130. @@:
  131.         ret
  132. ;***********************************************
  133. ;*   ╬╞╚─└═╚┼ ╬╫╚╤╥╩╚ ┬╒╬─═╬├╬ ┴╙╘┼╨└ I8042    *
  134. ;* ╧Ёш т√їюфх шч яЁюЎхфєЁ√:                    *
  135. ;* Їыру ZF єёЄрэютыхэ - эюЁьры№эюх чртхЁ°хэшх, *
  136. ;* Їыру ZF ёсЁю°хэ - ю°шсър Єрщь-рєЄр.         *
  137. ;***********************************************
  138. Wait8042BufferEmpty:
  139. ;        push    CX
  140. ;        mov     CX,0FFFFh  ;чрфрЄ№ ўшёыю Ўшъыют юцшфрэш
  141. ;@@kb:
  142. ;        in      AL,64h     ;яюыєўшЄ№ ёЄрЄєё
  143. ;        test    AL,10b     ;сєЇхЁ i8042 ётюсюфхэ?
  144. ;        loopnz  @@kb       ;хёыш эхЄ, Єю Ўшъы
  145. ;        pop     CX
  146.         push ecx
  147.         xor ecx,ecx
  148.       @@:
  149.         in     al,64h
  150.         test    al,00000010b
  151.         loopnz @b
  152.         pop    ecx
  153.         ;┼ёыш яЁш т√їюфх шч яюфяЁюуЁрьь√ ёсЁю°хэ
  154.         ;Їыру ZF - ю°шсър
  155.         ret                   ;тючтЁрЄ т яюфяЁюуЁрььє
  156.  
  157. ;***************************************
  158. ;* ╬╞╚─└═╚┼ ╧╬╤╥╙╧╦┼═╚▀ ─└══█╒ ╬╥ ╠█╪╚ *
  159. ;***************************************
  160. WaitMouseData:
  161. ;        push    CX
  162. ;        mov     CX,0FFFFh  ;чрфрЄ№ ўшёыю Ўшъыют юцшфрэш
  163. ;@@mouse:
  164. ;        in      AL,64h     ;юяЁюёшЄ№ ЁхушёЄЁ ёЄрЄєёр
  165. ;        test    AL,100000b ;фрээ√х яюёЄєяшыш?
  166. ;        loopz   @@mouse    ;хёыш эхЄ, Єю Ўшъы
  167. ;        pop     CX
  168.         push ecx
  169.         mov     ECX,0FFFFh
  170.       @@:
  171.         in     al,64h
  172.         test    al,100000b
  173.         loopz @b
  174.         pop    ecx
  175.         ;┼ёыш яЁш т√їюфх шч яюфяЁюуЁрьь√ єёЄрэютыхэ
  176.         ;Їыру ZF - ю°шсър
  177.         ret
  178.  
  179.