Subversion Repositories Kolibri OS

Rev

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

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