forked from KolibriOS/kolibrios
fef69aab20
git-svn-id: svn://kolibrios.org@465 a494cfbc-eb01-0410-851d-a64ba20cac60
144 lines
4.1 KiB
PHP
144 lines
4.1 KiB
PHP
$Revision$
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; ;;
|
|
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
|
|
;; Distributed under terms of the GNU General Public License ;;
|
|
;; ;;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
;**************************************************
|
|
;* ÏÎÈÑÊ ÌÛØÈ ÏÎ ÏÎÑËÅÄÎÂÀÒÅËÜÍÛÌ ÏÎÐÒÀÌ *
|
|
;* Ïðîöåäóðà ïîäãîòàâëèâàåò ãëîáàëüíûå ïåðåìåííûå *
|
|
;* COMPortNum è COMPortBaseAddr äëÿ ïîäïðîãðàììû *
|
|
;* óñòàíîâêè îáðàáîò÷èêà ïðåðûâàíèÿ *
|
|
;**************************************************
|
|
; Àâòîð èñõîäíîãî òåêñòà Êóëàêîâ Âëàäèìèð Ãåííàäüåâè÷.
|
|
; Àäàïòàöèÿ è äîðàáîòêà Mario79
|
|
|
|
Detect_COM_Mouse:
|
|
pusha
|
|
call MSMouseSearch
|
|
cmp AL,'M'
|
|
jne @f
|
|
mov [com1_mouse_detected],1
|
|
pusha
|
|
|
|
mov eax,4
|
|
shl eax,2
|
|
mov [irq_owner+eax], 1
|
|
|
|
inc dword [RESERVED_PORTS]
|
|
mov edi,[RESERVED_PORTS]
|
|
shl edi,4
|
|
mov [RESERVED_PORTS+edi+0],dword 1
|
|
mov [RESERVED_PORTS+edi+4],dword 0x3f0
|
|
mov [RESERVED_PORTS+edi+8],dword 0x3ff
|
|
|
|
popa
|
|
mov esi,boot_setmouse_type+22
|
|
call boot_log
|
|
@@:
|
|
sub [COMPortBaseAddr],100h
|
|
call MSMouseSearch
|
|
cmp AL,'M'
|
|
jne @f
|
|
mov [com2_mouse_detected],1
|
|
pusha
|
|
|
|
mov eax,3
|
|
shl eax,2
|
|
mov [irq_owner+eax], 1
|
|
|
|
inc dword [RESERVED_PORTS]
|
|
mov edi,[RESERVED_PORTS]
|
|
shl edi,4
|
|
mov [RESERVED_PORTS+edi+0],dword 1
|
|
mov [RESERVED_PORTS+edi+4],dword 0x2f0
|
|
mov [RESERVED_PORTS+edi+8],dword 0x2ff
|
|
|
|
popa
|
|
mov esi,boot_setmouse_type+44
|
|
call boot_log
|
|
@@:
|
|
popa
|
|
jmp end_detecting_mouse
|
|
|
|
MSMouseSearch:
|
|
; ÏÎÈÑÊ ÌÛØÈ ×ÅÐÅÇ COM-ÏÎÐÒÛ
|
|
MouseSearch:
|
|
; Óñòàíàâëèâàåì ñêîðîñòü
|
|
; ïðèåìà/ïåðåäà÷è 1200 áîä
|
|
mov DX,[COMPortBaseAddr]
|
|
add DX,3
|
|
in AL,DX
|
|
or AL,80h ;óñòàíîâèòü áèò DLAB
|
|
out DX,AL
|
|
mov DX,[COMPortBaseAddr]
|
|
mov AL,60h ;1200 áîä
|
|
out DX,AL
|
|
inc DX
|
|
mov AL,0
|
|
out DX,AL
|
|
; Óñòàíîâèòü äëèíó ñëîâà 7 áèò, 1 ñòîïîâûé áèò,
|
|
; ÷åòíîñòü íå êîíòðîëèðîâàòü
|
|
mov DX,[COMPortBaseAddr]
|
|
add DX,3
|
|
mov AL,00000010b
|
|
out DX,AL
|
|
; Çàïðåòèòü âñå ïðåðûâàíè
|
|
mov DX,[COMPortBaseAddr]
|
|
inc DX
|
|
mov AL,0
|
|
out DX,AL
|
|
; Ïðîâåðèòü, ÷òî óñòðîéñòâî ïîäêëþ÷åíî è ÿâëÿåòñ
|
|
; ìûøüþ òèïà MSMouse
|
|
; Îòêëþ÷èòü ïèòàíèå ìûøè è ïðåðûâàíè
|
|
mov DX,[COMPortBaseAddr]
|
|
add DX,4 ;ðåãèñòð óïðàâëåíèÿ ìîäåìîì
|
|
mov AL,0 ;ñáðîñèòü DTR, RTS è OUT2
|
|
out DX,AL
|
|
; Îæèäàòü 5 "òèêîâ" (0,2 ñ)
|
|
mov ecx,0xffff
|
|
dT_1:
|
|
dec ecx
|
|
cmp ecx,0
|
|
jne dT_1
|
|
mov ecx,0xffff
|
|
; Âêëþ÷èòü ïèòàíèå ìûøè
|
|
mov AL,11b ;óñòàíîâèòü DTR è RTS
|
|
out DX,AL
|
|
; Î÷èñòèòü ðåãèñòð äàííûõ
|
|
mov DX,[COMPortBaseAddr]
|
|
in AL,DX
|
|
; Öèêë îïðîñà ïîðòà
|
|
WaitData:
|
|
; Îæèäàòü åùå 10 "òèêîâ"
|
|
dec ecx
|
|
cmp ecx,0
|
|
je NoMouse
|
|
; Ïðîâåðèòü íàëè÷èå èäåíòèôèêàöèîííîãî áàéòà
|
|
mov DX,[COMPortBaseAddr]
|
|
add DX,5
|
|
in AL,DX
|
|
test AL,1 ;Äàííûå ãîòîâû?
|
|
jz WaitData
|
|
; Ââåñòè äàííûå
|
|
mov DX,[COMPortBaseAddr]
|
|
in AL,DX
|
|
NoMouse:
|
|
ret
|
|
|
|
iglobal
|
|
COMPortBaseAddr dw 3F8h
|
|
;COMPortNum dw 0
|
|
endg
|
|
|
|
iglobal
|
|
boot_setmouse_type db 'Detected - PS2 mouse',0
|
|
db 'Detected - COM1 mouse',0
|
|
db 'Detected - COM2 mouse',0
|
|
endg
|
|
|
|
end_detecting_mouse:
|
|
|