Subversion Repositories Kolibri OS

Rev

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

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