Subversion Repositories Kolibri OS

Rev

Rev 2 | Blame | Last modification | View Log | Download | RSS feed

  1. ;**************************************************
  2. ;*      ÏÎÈÑÊ ÌÛØÈ ÏÎ ÏÎÑËÅÄÎÂÀÒÅËÜÍÛÌ ÏÎÐÒÀÌ     *
  3. ;* Ïðîöåäóðà ïîäãîòàâëèâàåò ãëîáàëüíûå ïåðåìåííûå *
  4. ;* COMPortNum è COMPortBaseAddr äëÿ ïîäïðîãðàììû  *
  5. ;* óñòàíîâêè îáðàáîò÷èêà ïðåðûâàíèÿ               *
  6. ;**************************************************
  7. ; Àâòîð èñõîäíîãî òåêñòà Êóëàêîâ Âëàäèìèð Ãåííàäüåâè÷.
  8. ; Àäàïòàöèÿ è äîðàáîòêà Mario79
  9.  
  10. MSMouseSearch:
  11.         pusha
  12. ; ÏÎÈÑÊ ÌÛØÈ ×ÅÐÅÇ COM-ÏÎÐÒÛ
  13. MouseSearch:
  14.         ; Óñòàíàâëèâàåì ñêîðîñòü
  15.         ; ïðèåìà/ïåðåäà÷è 1200 áîä
  16.         mov     DX,[COMPortBaseAddr]
  17.         add     DX,3
  18.         in      AL,DX
  19.         or      AL,80h  ;óñòàíîâèòü áèò DLAB
  20.         out     DX,AL
  21.         mov     DX,[COMPortBaseAddr]
  22.         mov     AL,60h  ;1200 áîä
  23.         out     DX,AL
  24.         inc     DX
  25.         mov     AL,0
  26.         out     DX,AL
  27.         ; Óñòàíîâèòü äëèíó ñëîâà 7 áèò, 1 ñòîïîâûé áèò,
  28.         ; ÷åòíîñòü íå êîíòðîëèðîâàòü
  29.         mov     DX,[COMPortBaseAddr]
  30.         add     DX,3
  31.         mov     AL,00000010b
  32.         out     DX,AL
  33.         ; Çàïðåòèòü âñå ïðåðûâàíèÿ
  34.         mov     DX,[COMPortBaseAddr]
  35.         inc     DX
  36.         mov     AL,0
  37.         out     DX,AL
  38. ; Ïðîâåðèòü, ÷òî óñòðîéñòâî ïîäêëþ÷åíî è ÿâëÿåòñÿ
  39. ; ìûøüþ òèïà MSMouse
  40.         ; Îòêëþ÷èòü ïèòàíèå ìûøè è ïðåðûâàíèÿ
  41.         mov     DX,[COMPortBaseAddr]
  42.         add     DX,4    ;ðåãèñòð óïðàâëåíèÿ ìîäåìîì
  43.         mov     AL,0    ;ñáðîñèòü DTR, RTS è OUT2
  44.         out     DX,AL
  45.         ; Îæèäàòü 5 "òèêîâ" (0,2 ñ)
  46.         mov  ecx,0xffff
  47. dT_1:
  48.         dec  ecx
  49.         cmp ecx,0
  50.         jne dT_1
  51.        mov  ecx,0xffff
  52.         ; Âêëþ÷èòü ïèòàíèå ìûøè
  53.         mov     AL,11b  ;óñòàíîâèòü DTR è RTS
  54.         out     DX,AL
  55.         ; Î÷èñòèòü ðåãèñòð äàííûõ
  56.         mov     DX,[COMPortBaseAddr]
  57.         in      AL,DX
  58. ; Öèêë îïðîñà ïîðòà
  59. WaitData:
  60.         ; Îæèäàòü åùå 10 "òèêîâ"
  61.          dec  ecx
  62.          cmp  ecx,0
  63.          je     NoMouse
  64.         ; Ïðîâåðèòü íàëè÷èå èäåíòèôèêàöèîííîãî áàéòà
  65.         mov     DX,[COMPortBaseAddr]
  66.         add     DX,5
  67.         in      AL,DX
  68.         test    AL,1   ;Äàííûå ãîòîâû?
  69.         jz      WaitData
  70.         ; Ââåñòè äàííûå
  71.         mov     DX,[COMPortBaseAddr]
  72.         in      AL,DX
  73.         ; Óñòðîéñòâî ÿâëÿåòñÿ ìûøüþ?
  74.         cmp     AL,'M'
  75.         je EndDetect
  76. NoMouse:
  77.         inc     [COMPortNum]
  78.         cmp     [COMPortNum],1
  79.         ja      EndDetect
  80.         sub     [COMPortBaseAddr],100h
  81.         jmp     MouseSearch
  82.  
  83. iglobal
  84. COMPortBaseAddr dw 3F8h
  85. COMPortNum dw 0
  86. endg
  87.  
  88. iglobal
  89. boot_setmouse_type  db   'No COM mouse, set PS2',0
  90.                     db   'Detected - COM1 mouse',0
  91.                     db   'Detected - COM2 mouse',0
  92.  
  93. endg
  94.  
  95. EndDetect:
  96.         cmp     [COMPortNum],0  ;íîìåð ïîðòà ìåíüøå 0?
  97.         jl      ComMouseNotFound ;ìûøü íå íàéäåíà
  98.         cmp     [COMPortNum],1  ;íîìåð ïîðòà áîëüøå 1?
  99.         ja      ComMouseNotFound ;ìûøü íå íàéäåíà
  100.         mov     ax,[COMPortNum]
  101.         add     al,2
  102.         jmp     set_detecting_mouse
  103.  ComMouseNotFound:
  104.         mov al,1
  105.  set_detecting_mouse:
  106.         mov   [0xF604],al
  107.         dec   al
  108.         movzx eax,al
  109.         imul  eax,22
  110.         mov   esi,boot_setmouse_type
  111.         add   esi,eax
  112.         call  boot_log
  113.         popa
  114.  
  115.  
  116.