Subversion Repositories Kolibri OS

Rev

Rev 33 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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