Subversion Repositories Kolibri OS

Rev

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

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