Subversion Repositories Kolibri OS

Rev

Rev 33 | 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.         pusha
  17.  
  18.         mov   eax,4
  19.         shl   eax,2
  20.         mov   [irq_owner+eax],byte 1
  21.  
  22.         inc   dword [0x2d0000]
  23.         mov   edi,[0x2d0000]
  24.         shl   edi,4
  25.         mov   [0x2d0000+edi+0],dword 1
  26.         mov   [0x2d0000+edi+4],dword 0x3f0
  27.         mov   [0x2d0000+edi+8],dword 0x3ff
  28.  
  29.         popa
  30.         mov    esi,boot_setmouse_type+22
  31.         call  boot_log
  32.      @@:
  33.         sub    [COMPortBaseAddr],100h
  34.         call   MSMouseSearch
  35.         cmp    AL,'M'
  36.         jne    @f        
  37.         mov    [com2_mouse_detected],1
  38.         pusha
  39.  
  40.         mov   eax,3
  41.         shl   eax,2
  42.         mov   [irq_owner+eax],byte 1
  43.        
  44.         inc   dword [0x2d0000]
  45.         mov   edi,[0x2d0000]
  46.         shl   edi,4
  47.         mov   [0x2d0000+edi+0],dword 1
  48.         mov   [0x2d0000+edi+4],dword 0x2f0
  49.         mov   [0x2d0000+edi+8],dword 0x2ff        
  50.  
  51.         popa
  52.         mov    esi,boot_setmouse_type+44
  53.         call  boot_log
  54.      @@:
  55.         popa
  56.         jmp     end_detecting_mouse
  57.  
  58. MSMouseSearch:
  59.         ; ÏÎÈÑÊ ÌÛØÈ ×ÅÐÅÇ COM-ÏÎÐÒÛ
  60. MouseSearch:
  61.         ; Óñòàíàâëèâàåì ñêîðîñòü
  62.         ; ïðèåìà/ïåðåäà÷è 1200 áîä
  63.         mov     DX,[COMPortBaseAddr]
  64.         add     DX,3
  65.         in      AL,DX
  66.         or      AL,80h  ;óñòàíîâèòü áèò DLAB
  67.         out     DX,AL
  68.         mov     DX,[COMPortBaseAddr]
  69.         mov     AL,60h  ;1200 áîä
  70.         out     DX,AL
  71.         inc     DX
  72.         mov     AL,0
  73.         out     DX,AL
  74.         ; Óñòàíîâèòü äëèíó ñëîâà 7 áèò, 1 ñòîïîâûé áèò,
  75.         ; ÷åòíîñòü íå êîíòðîëèðîâàòü
  76.         mov     DX,[COMPortBaseAddr]
  77.         add     DX,3
  78.         mov     AL,00000010b
  79.         out     DX,AL
  80.         ; Çàïðåòèòü âñå ïðåðûâàíèÿ
  81.         mov     DX,[COMPortBaseAddr]
  82.         inc     DX
  83.         mov     AL,0
  84.         out     DX,AL
  85. ; Ïðîâåðèòü, ÷òî óñòðîéñòâî ïîäêëþ÷åíî è ÿâëÿåòñÿ
  86. ; ìûøüþ òèïà MSMouse
  87.         ; Îòêëþ÷èòü ïèòàíèå ìûøè è ïðåðûâàíèÿ
  88.         mov     DX,[COMPortBaseAddr]
  89.         add     DX,4    ;ðåãèñòð óïðàâëåíèÿ ìîäåìîì
  90.         mov     AL,0    ;ñáðîñèòü DTR, RTS è OUT2
  91.         out     DX,AL
  92.         ; Îæèäàòü 5 "òèêîâ" (0,2 ñ)
  93.         mov  ecx,0xffff
  94. dT_1:
  95.         dec  ecx
  96.         cmp ecx,0
  97.         jne dT_1
  98.         mov  ecx,0xffff
  99.         ; Âêëþ÷èòü ïèòàíèå ìûøè
  100.         mov     AL,11b  ;óñòàíîâèòü DTR è RTS
  101.         out     DX,AL
  102.         ; Î÷èñòèòü ðåãèñòð äàííûõ
  103.         mov     DX,[COMPortBaseAddr]
  104.         in      AL,DX
  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.