Subversion Repositories Kolibri OS

Rev

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

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