Subversion Repositories Kolibri OS

Rev

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

  1. $Revision: 431 $
  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.         pusha
  25.  
  26.         mov   eax,4
  27.         shl   eax,2
  28.         mov   [irq_owner+eax], 1
  29.  
  30.         inc   dword [RESERVED_PORTS]
  31.         mov   edi,[RESERVED_PORTS]
  32.         shl   edi,4
  33.         mov   [RESERVED_PORTS+edi+0],dword 1
  34.         mov   [RESERVED_PORTS+edi+4],dword 0x3f0
  35.         mov   [RESERVED_PORTS+edi+8],dword 0x3ff
  36.  
  37.         popa
  38.         mov    esi,boot_setmouse_type+22
  39.         call  boot_log
  40.      @@:
  41.         sub    [COMPortBaseAddr],100h
  42.         call   MSMouseSearch
  43.         cmp    AL,'M'
  44.         jne    @f
  45.         mov    [com2_mouse_detected],1
  46.         pusha
  47.  
  48.         mov   eax,3
  49.         shl   eax,2
  50.         mov   [irq_owner+eax], 1
  51.  
  52.         inc   dword [RESERVED_PORTS]
  53.         mov   edi,[RESERVED_PORTS]
  54.         shl   edi,4
  55.         mov   [RESERVED_PORTS+edi+0],dword 1
  56.         mov   [RESERVED_PORTS+edi+4],dword 0x2f0
  57.         mov   [RESERVED_PORTS+edi+8],dword 0x2ff
  58.  
  59.         popa
  60.         mov    esi,boot_setmouse_type+44
  61.         call  boot_log
  62.      @@:
  63.         popa
  64.         jmp     end_detecting_mouse
  65.  
  66. MSMouseSearch:
  67.         ; ÏÎÈÑÊ ÌÛØÈ ×ÅÐÅÇ COM-ÏÎÐÒÛ
  68. MouseSearch:
  69.         ; Óñòàíàâëèâàåì ñêîðîñòü
  70.         ; ïðèåìà/ïåðåäà÷è 1200 áîä
  71.         mov     DX,[COMPortBaseAddr]
  72.         add     DX,3
  73.         in      AL,DX
  74.         or      AL,80h  ;óñòàíîâèòü áèò DLAB
  75.         out     DX,AL
  76.         mov     DX,[COMPortBaseAddr]
  77.         mov     AL,60h  ;1200 áîä
  78.         out     DX,AL
  79.         inc     DX
  80.         mov     AL,0
  81.         out     DX,AL
  82.         ; Óñòàíîâèòü äëèíó ñëîâà 7 áèò, 1 ñòîïîâûé áèò,
  83.         ; ÷åòíîñòü íå êîíòðîëèðîâàòü
  84.         mov     DX,[COMPortBaseAddr]
  85.         add     DX,3
  86.         mov     AL,00000010b
  87.         out     DX,AL
  88.         ; Çàïðåòèòü âñå ïðåðûâàíè
  89.         mov     DX,[COMPortBaseAddr]
  90.         inc     DX
  91.         mov     AL,0
  92.         out     DX,AL
  93. ; Ïðîâåðèòü, ÷òî óñòðîéñòâî ïîäêëþ÷åíî è ÿâëÿåòñ
  94. ; ìûøüþ òèïà MSMouse
  95.         ; Îòêëþ÷èòü ïèòàíèå ìûøè è ïðåðûâàíè
  96.         mov     DX,[COMPortBaseAddr]
  97.         add     DX,4    ;ðåãèñòð óïðàâëåíèÿ ìîäåìîì
  98.         mov     AL,0    ;ñáðîñèòü DTR, RTS è OUT2
  99.         out     DX,AL
  100.         ; Îæèäàòü 5 "òèêîâ" (0,2 ñ)
  101.         mov  ecx,0xffff
  102. dT_1:
  103.         dec  ecx
  104.         cmp ecx,0
  105.         jne dT_1
  106.         mov  ecx,0xffff
  107.         ; Âêëþ÷èòü ïèòàíèå ìûøè
  108.         mov     AL,11b  ;óñòàíîâèòü DTR è RTS
  109.         out     DX,AL
  110.         ; Î÷èñòèòü ðåãèñòð äàííûõ
  111.         mov     DX,[COMPortBaseAddr]
  112.         in      AL,DX
  113. ; Öèêë îïðîñà ïîðòà
  114. WaitData:
  115.         ; Îæèäàòü åùå 10 "òèêîâ"
  116.          dec  ecx
  117.          cmp  ecx,0
  118.          je     NoMouse
  119.         ; Ïðîâåðèòü íàëè÷èå èäåíòèôèêàöèîííîãî áàéòà
  120.         mov     DX,[COMPortBaseAddr]
  121.         add     DX,5
  122.         in      AL,DX
  123.         test    AL,1   ;Äàííûå ãîòîâû?
  124.         jz      WaitData
  125.         ; Ââåñòè äàííûå
  126.         mov     DX,[COMPortBaseAddr]
  127.         in      AL,DX
  128. NoMouse:
  129.         ret
  130.  
  131. iglobal
  132. COMPortBaseAddr dw 3F8h
  133. ;COMPortNum dw 0
  134. endg
  135.  
  136. iglobal
  137. boot_setmouse_type  db   'Detected - PS2  mouse',0
  138.                     db   'Detected - COM1 mouse',0
  139.                     db   'Detected - COM2 mouse',0
  140. endg
  141.  
  142. end_detecting_mouse:
  143.  
  144.