Subversion Repositories Kolibri OS

Rev

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

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                                              ;;
  3. ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
  4. ;; Distributed under terms of the GNU General Public License    ;;
  5. ;;                                                              ;;
  6. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  7.  
  8. $Revision: 593 $
  9.  
  10.  
  11. ;**************************************************
  12. ;*      ÏÎÈÑÊ ÌÛØÈ ÏÎ ÏÎÑËÅÄÎÂÀÒÅËÜÍÛÌ ÏÎÐÒÀÌ     *
  13. ;* Ïðîöåäóðà ïîäãîòàâëèâàåò ãëîáàëüíûå ïåðåìåííûå *
  14. ;* COMPortNum è COMPortBaseAddr äëÿ ïîäïðîãðàììû  *
  15. ;* óñòàíîâêè îáðàáîò÷èêà ïðåðûâàíèÿ               *
  16. ;**************************************************
  17. ; Àâòîð èñõîäíîãî òåêñòà Êóëàêîâ Âëàäèìèð Ãåííàäüåâè÷.
  18. ; Àäàïòàöèÿ è äîðàáîòêà Mario79
  19.  
  20. Detect_COM_Mouse:
  21.         pusha
  22.         call   MSMouseSearch
  23.         cmp    AL,'M'
  24.         jne    @f
  25.         mov    [com1_mouse_detected],1
  26.         mov     [irq_owner+4*4], 1      ; IRQ4 owner is System
  27.         mov     eax, [RESERVED_PORTS]
  28.         inc     eax
  29.         mov     [RESERVED_PORTS], eax
  30.         shl     eax, 4
  31.         mov     [RESERVED_PORTS+eax+0], dword 1
  32.         mov     [RESERVED_PORTS+eax+4], dword 0x3F8
  33.         mov     [RESERVED_PORTS+eax+8], dword 0x3FF
  34.         mov    esi,boot_setmouse_type+22
  35.         call  boot_log
  36.      @@:
  37.         sub    [COMPortBaseAddr],100h
  38.         call   MSMouseSearch
  39.         cmp    AL,'M'
  40.         jne    @f
  41.         mov    [com2_mouse_detected],1
  42.         mov     [irq_owner+3*4], 1      ; IRQ3 owner is System
  43.         mov     eax, [RESERVED_PORTS]
  44.         inc     eax
  45.         mov     [RESERVED_PORTS], eax
  46.         shl     eax, 4
  47.         mov     [RESERVED_PORTS+eax+0], dword 1
  48.         mov     [RESERVED_PORTS+eax+4], dword 0x2F8
  49.         mov     [RESERVED_PORTS+eax+8], dword 0x2FF
  50.         mov    esi,boot_setmouse_type+44
  51.         call  boot_log
  52.      @@:
  53.         popa
  54.         jmp     end_detecting_mouse
  55.  
  56. MSMouseSearch:
  57.         ; ÏÎÈÑÊ ÌÛØÈ ×ÅÐÅÇ COM-ÏÎÐÒÛ
  58. MouseSearch:
  59.         ; Óñòàíàâëèâàåì ñêîðîñòü
  60.         ; ïðèåìà/ïåðåäà÷è 1200 áîä
  61.         mov     DX,[COMPortBaseAddr]
  62.         add     DX,3
  63.         in      AL,DX
  64.         or      AL,80h  ;óñòàíîâèòü áèò DLAB
  65.         out     DX,AL
  66.         mov     DX,[COMPortBaseAddr]
  67.         mov     AL,60h  ;1200 áîä
  68.         out     DX,AL
  69.         inc     DX
  70.         mov     AL,0
  71.         out     DX,AL
  72.         ; Óñòàíîâèòü äëèíó ñëîâà 7 áèò, 1 ñòîïîâûé áèò,
  73.         ; ÷åòíîñòü íå êîíòðîëèðîâàòü
  74.         mov     DX,[COMPortBaseAddr]
  75.         add     DX,3
  76.         mov     AL,00000010b
  77.         out     DX,AL
  78.         ; Çàïðåòèòü âñå ïðåðûâàíè
  79.         mov     DX,[COMPortBaseAddr]
  80.         inc     DX
  81.         mov     AL,0
  82.         out     DX,AL
  83. ; Ïðîâåðèòü, ÷òî óñòðîéñòâî ïîäêëþ÷åíî è ÿâëÿåòñ
  84. ; ìûøüþ òèïà MSMouse
  85.         ; Îòêëþ÷èòü ïèòàíèå ìûøè è ïðåðûâàíè
  86.         mov     DX,[COMPortBaseAddr]
  87.         add     EDX,4   ;ðåãèñòð óïðàâëåíèÿ ìîäåìîì
  88.         mov     AL,0    ;ñáðîñèòü DTR, RTS è OUT2
  89.         out     DX,AL
  90.         ; Îæèäàòü 5 "òèêîâ" (0,2 ñ)
  91.         mov     ecx, 0xFFFF
  92.         loop    $
  93.         ; Âêëþ÷èòü ïèòàíèå ìûøè
  94.         mov     al, 1
  95.         out     dx, al
  96.         mov     ecx, 0xFFFF
  97.         loop    $
  98.         ; Î÷èñòèòü ðåãèñòð äàííûõ
  99.         sub     edx, 4
  100.         in      AL,DX
  101.         add     edx, 4
  102.         mov     AL,11b  ;óñòàíîâèòü DTR è RTS
  103.         out     DX,AL
  104.         mov     ecx, 0x1FFFF
  105. ; Öèêë îïðîñà ïîðòà
  106. WaitData:
  107.         ; Îæèäàòü åùå 10 "òèêîâ"
  108.          dec  ecx
  109.          cmp  ecx,0
  110.          je     NoMouse
  111.         ; Ïðîâåðèòü íàëè÷èå èäåíòèôèêàöèîííîãî áàéòà
  112.         mov     DX,[COMPortBaseAddr]
  113.         add     DX,5
  114.         in      AL,DX
  115.         test    AL,1   ;Äàííûå ãîòîâû?
  116.         jz      WaitData
  117.         ; Ââåñòè äàííûå
  118.         mov     DX,[COMPortBaseAddr]
  119.         in      AL,DX
  120. NoMouse:
  121.         ret
  122.  
  123. iglobal
  124. COMPortBaseAddr dw 3F8h
  125. ;COMPortNum dw 0
  126. endg
  127.  
  128. iglobal
  129. boot_setmouse_type  db   'Detected - PS2  mouse',0
  130.                     db   'Detected - COM1 mouse',0
  131.                     db   'Detected - COM2 mouse',0
  132. endg
  133.  
  134. end_detecting_mouse:
  135.  
  136.