Subversion Repositories Kolibri OS

Rev

Rev 425 | Go to most recent revision | 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 DB 0
  11. ; ╥ЁхїсрщЄютр  ёЄЁєъЄєЁр фрээ√ї, яхЁхфртрхьр  ь√°№■
  12. FirstByte       DB 0
  13. SecondByte      DB 0
  14. ThirdByte       DB 0
  15. timer_ticks_com dd 0
  16. ;***************************************
  17. ;* ═╬┬█╔ ╬┴╨└┴╬╥╫╚╩ ╧╨┼╨█┬└═╚▀ ╬╥ ╠█╪╚ *
  18. ;***************************************
  19. check_mouse_data_com1:
  20. ;        cmp     [com1_mouse_detected],0
  21. ;        je      @@EndMouseInterrupt
  22. ; ╧ЁютхЁшЄ№ эрышўшх фрээ√ї
  23.         mov     DX,3F8h  ;[COMPortBaseAddr]
  24.         add     DX,5         ;xFDh
  25.         in      AL,DX
  26.         test    AL,1   ;─рээ√х уюЄют√?
  27.         jz      @@Error
  28. ; ┬тхёЄш фрээ√х
  29.         mov     DX,3F8h   ;[COMPortBaseAddr]   ;xF8h
  30.         in      AL,DX
  31. ; ╤сЁюёшЄ№ ёЄрЁ°шщ эхчэрўр∙шщ сшЄ
  32.         and     AL,01111111b
  33.  
  34. ; ╬яЁхфхышЄ№ яюЁ фъют√щ эюьхЁ яЁшэшьрхьюую срщЄр
  35.         cmp     [MouseByteNumber],0
  36.         je      @@FirstByte
  37.         cmp     [MouseByteNumber],1
  38.         je      @@SecondByte
  39.         cmp     [MouseByteNumber],2
  40.         je      @@ThirdByte
  41.         jmp     @@Error
  42.  
  43. ; ╤юїЁрэшЄ№ яхЁт√щ срщЄ фрээ√ї
  44. @@FirstByte:
  45.         test    AL,1000000b       ;╧хЁт√щ срщЄ яюё√ыъш?
  46.         jz      @@Error
  47.         mov     [FirstByte],AL
  48.         inc     [MouseByteNumber] ;єтхышўшЄ№ ёўхЄўшъ
  49.         jmp     @@EndMouseInterrupt
  50. ; ╤юїЁрэшЄ№ тЄюЁющ срщЄ фрээ√ї
  51. @@SecondByte:
  52.         test    AL,1000000b
  53.         jnz     @@Error
  54.         mov     [SecondByte],AL
  55.         inc     [MouseByteNumber] ;єтхышўшЄ№ ёўхЄўшъ
  56.         jmp     @@EndMouseInterrupt
  57. ; ╤юїЁрэшЄ№ ЄЁхЄшщ срщЄ фрээ√ї
  58. @@ThirdByte:
  59.         test    AL,1000000b
  60.         jnz     @@Error
  61.         mov     [ThirdByte],AL    ;єтхышўшЄ№ ёўхЄўшъ
  62.         mov     [MouseByteNumber],0
  63. ; (╧ръхЄ фрээ√ї юЄ ь√°ш яЁшэ Є яюыэюёЄ№■).
  64. ; ╟ряшёрЄ№ эютюх чэрўхэшх ёюёЄю эш  ъэюяюъ ь√°ш
  65.         mov al,[FirstByte]   ;[0xfb01]
  66.         mov ah,al
  67.         shr al,3
  68.         and al,2
  69.         shr ah,5
  70.         and ah,1
  71.         add al,ah
  72.         mov    [BTN_DOWN],al
  73.         mov    [mouse_active],1
  74. ; ╧ЁшсртшЄ№ яхЁхьх∙хэшх яю X ъ ъююЁфшэрЄх X
  75.         mov     AL,[FirstByte]
  76.         shl     AL,6
  77.         or      AL,[SecondByte]
  78.         cbw
  79.         call    mouse_acceleration_com1
  80.         add     AX,[MOUSE_X]    ;[XCoordinate]
  81.         ; ╩єЁёюЁ эх фюыцхэ т√їюфшЄ№ чр ыхтє■ шыш
  82.         ; яЁртє■ уЁрэшЎє ¤ъЁрэр
  83.         js      @@X1
  84.         cmp     AX,[ScreenWidth]   ;ScreenLength
  85.         jb      @@X2
  86.         ; ╙ёЄрэютшЄ№ ъююЁфшэрЄє X яю яЁртющ уЁрэшЎх
  87.         mov     AX,[ScreenWidth]   ;ScreenLength-1
  88.         dec     ax
  89.         jmp     @@X2
  90. @@X1:
  91.        ; ╙ёЄрэютшЄ№ ъююЁфшэрЄє X яю ыхтющ уЁрэшЎх
  92.         xor     AX,AX
  93. @@X2:
  94.         mov     [MOUSE_X],AX     ;[XCoordinate]
  95.         ; ╧ЁшсртшЄ№ яхЁхьх∙хэшх яю Y ъ ъююЁфшэрЄх Y
  96.         mov     AL,[FirstByte]
  97.         and     AL,00001100b
  98.         shl     AL,4
  99.         or      AL,[ThirdByte]
  100.         cbw
  101.         call    mouse_acceleration_com1
  102.         add     AX,[MOUSE_Y]   ;[YCoordinate]
  103.         ; ╩єЁёюЁ эх фюыцхэ т√їюфшЄ№ чр тхЁїэ■■ шыш
  104.         ; эшцэ■■ уЁрэшЎє ¤ъЁрэр
  105.         js      @@Y1
  106.         cmp     AX,[ScreenHeight]  ;ScreenHeigth
  107.         jb      @@Y2
  108.         ; ╙ёЄрэютшЄ№ ъююЁфшэрЄє X яю эшцэхщ уЁрэшЎх
  109.         mov     AX,[ScreenHeight] ;ScreenHeigth-1
  110.         dec     ax
  111.         jmp     @@Y2
  112. @@Y1:
  113.        ; ╙ёЄрэютшЄ№ ъююЁфшэрЄє X яю тхЁїэхщ уЁрэшЎх
  114.         xor     AX,AX
  115. @@Y2:
  116.         mov     [MOUSE_Y],AX     ;[YCoordinate]
  117.         mov   eax,[timer_ticks]
  118.         mov   [timer_ticks_com],eax
  119.         jmp     @@EndMouseInterrupt
  120.  
  121. @@Error:
  122. ; ╧Ёюшчю°хы ёсющ т яюЁ фъх яхЁхфрўш шэЇюЁьрЎшш юЄ
  123. ; ь√°ш, юсэєышЄ№ ёўхЄўшъ срщЄют яръхЄр фрээ√ї
  124.         mov     [MouseByteNumber],0
  125. @@EndMouseInterrupt:
  126.         call  ready_for_next_irq
  127.         ret
  128.  
  129. mouse_acceleration_com1:
  130.         push    eax
  131.         mov   eax,[timer_ticks]
  132.         sub   eax,[timer_ticks_com]
  133.         cmp   eax,[mouse_delay]
  134.         pop    eax
  135.         ja     @f
  136.         imul  ax,[mouse_speed_factor]
  137. @@:
  138.         ret
  139.