Subversion Repositories Kolibri OS

Compare Revisions

Problem with comparison.

Regard whitespace Rev HEAD → Rev 1

/trunk/detect/commouse.inc
0,0 → 1,121
;**************************************************
;* ÏÎÈÑÊ ÌÛØÈ ÏÎ ÏÎÑËÅÄÎÂÀÒÅËÜÍÛÌ ÏÎÐÒÀÌ *
;* Ïðîöåäóðà ïîäãîòàâëèâàåò ãëîáàëüíûå ïåðåìåííûå *
;* COMPortNum è COMPortBaseAddr äëÿ ïîäïðîãðàììû *
;* óñòàíîâêè îáðàáîò÷èêà ïðåðûâàíèÿ *
;**************************************************
; Àâòîð èñõîäíîãî òåêñòà Êóëàêîâ Âëàäèìèð Ãåííàäüåâè÷.
; Àäàïòàöèÿ è äîðàáîòêà Mario79
 
MSMouseSearch:
pusha
; Çàïðåòèòü ïðåðûâàíèå COM1 è COM2
cli
in AL,21h ;ïðî÷èòàòü ìàñêó ïðåðûâàíèé
or AL,18h ;çàïðåòèòü IRQ3 è IRQ4
out 21h,AL ;çàìåíèòü ìàñêó
sti
; ÏÎÈÑÊ ÌÛØÈ ×ÅÐÅÇ 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
; Óñòðîéñòâî ÿâëÿåòñÿ ìûøüþ?
cmp AL,'M'
je EndDetect
NoMouse:
inc [COMPortNum]
cmp [COMPortNum],1
ja EndDetect
sub [COMPortBaseAddr],100h
jmp MouseSearch
 
iglobal
COMPortBaseAddr dw 3F8h
COMPortNum dw 0
endg
 
iglobal
boot_setmouse_type db 'No COM mouse, set PS2',0
db 'Detected - COM1 mouse',0
db 'Detected - COM2 mouse',0
endg
 
EndDetect:
cmp [COMPortNum],0 ;íîìåð ïîðòà ìåíüøå 0?
jl ComMouseNotFound ;ìûøü íå íàéäåíà
cmp [COMPortNum],1 ;íîìåð ïîðòà áîëüøå 1?
ja ComMouseNotFound ;ìûøü íå íàéäåíà
mov ax,[COMPortNum]
add al,2
jmp set_detecting_mouse
ComMouseNotFound:
mov al,1
set_detecting_mouse:
mov [0xF604],al
dec al
movzx eax,al
imul eax,22
mov esi,boot_setmouse_type
add esi,eax
call boot_log
popa