Subversion Repositories Kolibri OS

Rev

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

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