Subversion Repositories Kolibri OS

Rev

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

  1. ; ═юьхЁ яЁшэшьрхьюую юЄ ь√°ш срщЄр
  2. MouseByteNumber DB 0
  3. ; ╥ЁхїсрщЄютр  ёЄЁєъЄєЁр фрээ√ї, яхЁхфртрхьр  ь√°№■
  4. FirstByte       DB 0
  5. SecondByte      DB 0
  6. ThirdByte       DB 0
  7.  
  8. ;***************************************
  9. ;* ═╬┬█╔ ╬┴╨└┴╬╥╫╚╩ ╧╨┼╨█┬└═╚▀ ╬╥ ╠█╪╚ *
  10. ;***************************************
  11. check_mouse_data_com1:
  12. ;        cmp     [com1_mouse_detected],0
  13. ;        je      @@EndMouseInterrupt
  14. ; ╧ЁютхЁшЄ№ эрышўшх фрээ√ї
  15.         mov     DX,3F8h  ;[COMPortBaseAddr]
  16.         add     DX,5         ;xFDh
  17.         in      AL,DX
  18.         test    AL,1   ;─рээ√х уюЄют√?
  19.         jz      @@Error
  20. ; ┬тхёЄш фрээ√х
  21.         mov     DX,3F8h   ;[COMPortBaseAddr]   ;xF8h
  22.         in      AL,DX
  23. ; ╤сЁюёшЄ№ ёЄрЁ°шщ эхчэрўр∙шщ сшЄ
  24.         and     AL,01111111b
  25.  
  26. ; ╬яЁхфхышЄ№ яюЁ фъют√щ эюьхЁ яЁшэшьрхьюую срщЄр
  27.         cmp     [MouseByteNumber],0
  28.         je      @@FirstByte
  29.         cmp     [MouseByteNumber],1
  30.         je      @@SecondByte
  31.         cmp     [MouseByteNumber],2
  32.         je      @@ThirdByte
  33.         jmp     @@Error
  34.  
  35. ; ╤юїЁрэшЄ№ яхЁт√щ срщЄ фрээ√ї
  36. @@FirstByte:
  37.         test    AL,1000000b       ;╧хЁт√щ срщЄ яюё√ыъш?
  38.         jz      @@Error
  39.         mov     [FirstByte],AL
  40.         inc     [MouseByteNumber] ;єтхышўшЄ№ ёўхЄўшъ
  41.         jmp     @@EndMouseInterrupt
  42. ; ╤юїЁрэшЄ№ тЄюЁющ срщЄ фрээ√ї
  43. @@SecondByte:
  44.         test    AL,1000000b
  45.         jnz     @@Error
  46.         mov     [SecondByte],AL
  47.         inc     [MouseByteNumber] ;єтхышўшЄ№ ёўхЄўшъ
  48.         jmp     @@EndMouseInterrupt
  49. ; ╤юїЁрэшЄ№ ЄЁхЄшщ срщЄ фрээ√ї
  50. @@ThirdByte:
  51.         test    AL,1000000b
  52.         jnz     @@Error
  53.         mov     [ThirdByte],AL    ;єтхышўшЄ№ ёўхЄўшъ
  54.         mov     [MouseByteNumber],0
  55. ; (╧ръхЄ фрээ√ї юЄ ь√°ш яЁшэ Є яюыэюёЄ№■).
  56. ; ╟ряшёрЄ№ эютюх чэрўхэшх ёюёЄю эш  ъэюяюъ ь√°ш
  57.         mov al,[FirstByte]   ;[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]
  68.         shl     AL,6
  69.         or      AL,[SecondByte]
  70.         cbw
  71.          shl  ax,1
  72.         add     AX,[0xFB0A]    ;[XCoordinate]
  73.         ; ╩єЁёюЁ эх фюыцхэ т√їюфшЄ№ чр ыхтє■ шыш
  74.         ; яЁртє■ уЁрэшЎє ¤ъЁрэр
  75.         js      @@X1
  76.         cmp     AX,[0xFE00]   ;ScreenLength
  77.         jb      @@X2
  78.         ; ╙ёЄрэютшЄ№ ъююЁфшэрЄє X яю яЁртющ уЁрэшЎх
  79.         mov     AX,[0xFE00]   ;ScreenLength-1
  80.         dec     ax
  81.         jmp     @@X2
  82. @@X1:
  83.        ; ╙ёЄрэютшЄ№ ъююЁфшэрЄє X яю ыхтющ уЁрэшЎх
  84.         xor     AX,AX
  85. @@X2:
  86.         mov     [0xFB0A],AX     ;[XCoordinate]
  87.         ; ╧ЁшсртшЄ№ яхЁхьх∙хэшх яю Y ъ ъююЁфшэрЄх Y
  88.         mov     AL,[FirstByte]
  89.         and     AL,00001100b
  90.         shl     AL,4
  91.         or      AL,[ThirdByte]
  92.         cbw
  93.          shl  ax,1
  94.         add     AX,[0xFB0C]   ;[YCoordinate]
  95.         ; ╩єЁёюЁ эх фюыцхэ т√їюфшЄ№ чр тхЁїэ■■ шыш
  96.         ; эшцэ■■ уЁрэшЎє ¤ъЁрэр
  97.         js      @@Y1
  98.         cmp     AX,[0xFE04]  ;ScreenHeigth
  99.         jb      @@Y2
  100.         ; ╙ёЄрэютшЄ№ ъююЁфшэрЄє X яю эшцэхщ уЁрэшЎх
  101.         mov     AX,[0xFE04] ;ScreenHeigth-1
  102.         dec     ax
  103.         jmp     @@Y2
  104. @@Y1:
  105.        ; ╙ёЄрэютшЄ№ ъююЁфшэрЄє X яю тхЁїэхщ уЁрэшЎх
  106.         xor     AX,AX
  107. @@Y2:
  108.         mov     [0xFB0C],AX     ;[YCoordinate]
  109.         jmp     @@EndMouseInterrupt
  110.  
  111. @@Error:
  112. ; ╧Ёюшчю°хы ёсющ т яюЁ фъх яхЁхфрўш шэЇюЁьрЎшш юЄ
  113. ; ь√°ш, юсэєышЄ№ ёўхЄўшъ срщЄют яръхЄр фрээ√ї
  114.         mov     [MouseByteNumber],0
  115. @@EndMouseInterrupt:
  116.         call  ready_for_next_irq
  117.         ret
  118.  
  119.