Subversion Repositories Kolibri OS

Rev

Rev 120 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. ; Íîìåð ïðèíèìàåìîãî îò ìûøè áàéòà
  2. MouseByteNumber_1 DB 0
  3. ; Òðåõáàéòîâàÿ ñòðóêòóðà äàííûõ, ïåðåäàâàåìàÿ ìûøüþ
  4. FirstByte_1       DB 0
  5. SecondByte_1      DB 0
  6. ThirdByte_1       DB 0
  7. timer_ticks_com_1 dd 0
  8. ;***************************************
  9. ;* ÍÎÂÛÉ ÎÁÐÀÁÎÒ×ÈÊ ÏÐÅÐÛÂÀÍÈß ÎÒ ÌÛØÈ *
  10. ;***************************************
  11. check_mouse_data_com2:
  12. ;        cmp     [com2_mouse_detected],0
  13. ;        je      @@EndMouseInterrupt_1
  14. ; Ïðîâåðèòü íàëè÷èå äàííûõ
  15.         mov     DX,2F8h  ;[COMPortBaseAddr]
  16.         add     DX,5         ;xFDh
  17.         in      AL,DX
  18.         test    AL,1   ;Äàííûå ãîòîâû?
  19.         jz      @@Error_1
  20. ; Ââåñòè äàííûå
  21.         mov     DX,2F8h   ;[COMPortBaseAddr]   ;xF8h
  22.         in      AL,DX
  23. ; Ñáðîñèòü ñòàðøèé íåçíà÷àùèé áèò
  24.         and     AL,01111111b
  25.  
  26. ; Îïðåäåëèòü ïîðÿäêîâûé íîìåð ïðèíèìàåìîãî áàéòà
  27.         cmp     [MouseByteNumber_1],0
  28.         je      @@FirstByte_1
  29.         cmp     [MouseByteNumber_1],1
  30.         je      @@SecondByte_1
  31.         cmp     [MouseByteNumber_1],2
  32.         je      @@ThirdByte_1
  33.         jmp     @@Error_1
  34.  
  35. ; Ñîõðàíèòü ïåðâûé áàéò äàííûõ
  36. @@FirstByte_1:
  37.         test    AL,1000000b       ;Ïåðâûé áàéò ïîñûëêè?
  38.         jz      @@Error_1
  39.         mov     [FirstByte_1],AL
  40.         inc     [MouseByteNumber_1] ;óâåëè÷èòü ñ÷åò÷èê
  41.         jmp     @@EndMouseInterrupt_1
  42. ; Ñîõðàíèòü âòîðîé áàéò äàííûõ
  43. @@SecondByte_1:
  44.         test    AL,1000000b
  45.         jnz     @@Error_1
  46.         mov     [SecondByte_1],AL
  47.         inc     [MouseByteNumber_1] ;óâåëè÷èòü ñ÷åò÷èê
  48.         jmp     @@EndMouseInterrupt_1
  49. ; Ñîõðàíèòü òðåòèé áàéò äàííûõ
  50. @@ThirdByte_1:
  51.         test    AL,1000000b
  52.         jnz     @@Error_1
  53.         mov     [ThirdByte_1],AL    ;óâåëè÷èòü ñ÷åò÷èê
  54.         mov     [MouseByteNumber_1],0
  55. ; (Ïàêåò äàííûõ îò ìûøè ïðèíÿò ïîëíîñòüþ).
  56. ; Çàïèñàòü íîâîå çíà÷åíèå ñîñòîÿíèÿ êíîïîê ìûøè
  57.         mov al,[FirstByte_1]   ;[0xfb01]
  58.         mov ah,al
  59.         shr al,3
  60.         and al,2
  61.         shr ah,5
  62.         and ah,1
  63.         add al,ah
  64.         mov    [0xfb40],al
  65.         mov    [mouse_active],1
  66. ; Ïðèáàâèòü ïåðåìåùåíèå ïî X ê êîîðäèíàòå X
  67.         mov     AL,[FirstByte_1]
  68.         shl     AL,6
  69.         or      AL,[SecondByte_1]
  70.         cbw
  71.         call    mouse_acceleration_com2
  72.         add     AX,[0xFB0A]    ;[XCoordinate]
  73.         ; Êóðñîð íå äîëæåí âûõîäèòü çà ëåâóþ èëè
  74.         ; ïðàâóþ ãðàíèöó ýêðàíà
  75.         js      @@X1_1
  76.         cmp     AX,[0xFE00]   ;ScreenLength
  77.         jb      @@X2_1
  78.         ; Óñòàíîâèòü êîîðäèíàòó X ïî ïðàâîé ãðàíèöå
  79.         mov     AX,[0xFE00]   ;ScreenLength-1
  80.         dec     ax
  81.         jmp     @@X2_1
  82. @@X1_1:
  83.        ; Óñòàíîâèòü êîîðäèíàòó X ïî ëåâîé ãðàíèöå
  84.         xor     AX,AX
  85. @@X2_1:
  86.         mov     [0xFB0A],AX     ;[XCoordinate]
  87.         ; Ïðèáàâèòü ïåðåìåùåíèå ïî Y ê êîîðäèíàòå Y
  88.         mov     AL,[FirstByte_1]
  89.         and     AL,00001100b
  90.         shl     AL,4
  91.         or      AL,[ThirdByte_1]
  92.         cbw
  93.         call    mouse_acceleration_com2
  94.         add     AX,[0xFB0C]   ;[YCoordinate]
  95.         ; Êóðñîð íå äîëæåí âûõîäèòü çà âåðõíþþ èëè
  96.         ; íèæíþþ ãðàíèöó ýêðàíà
  97.         js      @@Y1_1
  98.         cmp     AX,[0xFE04]  ;ScreenHeigth
  99.         jb      @@Y2_1
  100.         ; Óñòàíîâèòü êîîðäèíàòó X ïî íèæíåé ãðàíèöå
  101.         mov     AX,[0xFE04] ;ScreenHeigth-1
  102.         dec     ax
  103.         jmp     @@Y2_1
  104. @@Y1_1:
  105.        ; Óñòàíîâèòü êîîðäèíàòó X ïî âåðõíåé ãðàíèöå
  106.         xor     AX,AX
  107. @@Y2_1:
  108.         mov     [0xFB0C],AX     ;[YCoordinate]
  109.         mov   eax,[timer_ticks]
  110.         mov   [timer_ticks_com_1],eax
  111.         jmp     @@EndMouseInterrupt_1
  112.  
  113. @@Error_1:
  114. ; Ïðîèçîøåë ñáîé â ïîðÿäêå ïåðåäà÷è èíôîðìàöèè îò
  115. ; ìûøè, îáíóëèòü ñ÷åò÷èê áàéòîâ ïàêåòà äàííûõ
  116.         mov     [MouseByteNumber_1],0
  117. @@EndMouseInterrupt_1:
  118.         call  ready_for_next_irq
  119.         ret
  120.  
  121. mouse_acceleration_com2:
  122.         push    eax
  123.         mov   eax,[timer_ticks]
  124.         sub   eax,[timer_ticks_com_1]
  125.         cmp   eax,[mouse_delay]
  126.         pop    eax
  127.         ja     @f
  128.         imul  ax,[mouse_speed_factor]
  129. @@:
  130.         ret
  131.