Subversion Repositories Kolibri OS

Rev

Rev 431 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
425 victor 1
$Revision: 465 $
431 serge 2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3
;;                                                              ;;
4
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
5
;; Distributed under terms of the GNU General Public License    ;;
6
;;                                                              ;;
7
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8
 
1 ha 9
;**************************************************
10
;*      ПОИСК МЫШИ ПО ПОСЛЕДОВАТЕЛЬНЫМ ПОРТАМ     *
11
;* Процедура подготавливает глобальные переменные *
12
;* COMPortNum и COMPortBaseAddr для подпрограммы  *
13
;* установки обработчика прерывания               *
14
;**************************************************
15
; Автор исходного текста Кулаков Владимир Геннадьевич.
16
; Адаптация и доработка Mario79
17
 
33 mario79 18
Detect_COM_Mouse:
19
        pusha
20
        call   MSMouseSearch
21
        cmp    AL,'M'
22
        jne    @f
23
        mov    [com1_mouse_detected],1
58 mario79 24
        pusha
25
 
26
        mov   eax,4
27
        shl   eax,2
465 serge 28
        mov   [irq_owner+eax], 1
58 mario79 29
 
381 serge 30
        inc   dword [RESERVED_PORTS]
31
        mov   edi,[RESERVED_PORTS]
58 mario79 32
        shl   edi,4
381 serge 33
        mov   [RESERVED_PORTS+edi+0],dword 1
34
        mov   [RESERVED_PORTS+edi+4],dword 0x3f0
35
        mov   [RESERVED_PORTS+edi+8],dword 0x3ff
58 mario79 36
 
37
        popa
33 mario79 38
        mov    esi,boot_setmouse_type+22
39
        call  boot_log
40
     @@:
41
        sub    [COMPortBaseAddr],100h
42
        call   MSMouseSearch
43
        cmp    AL,'M'
381 serge 44
        jne    @f
33 mario79 45
        mov    [com2_mouse_detected],1
58 mario79 46
        pusha
47
 
48
        mov   eax,3
49
        shl   eax,2
465 serge 50
        mov   [irq_owner+eax], 1
381 serge 51
 
52
        inc   dword [RESERVED_PORTS]
53
        mov   edi,[RESERVED_PORTS]
58 mario79 54
        shl   edi,4
381 serge 55
        mov   [RESERVED_PORTS+edi+0],dword 1
56
        mov   [RESERVED_PORTS+edi+4],dword 0x2f0
57
        mov   [RESERVED_PORTS+edi+8],dword 0x2ff
58 mario79 58
 
59
        popa
33 mario79 60
        mov    esi,boot_setmouse_type+44
61
        call  boot_log
62
     @@:
63
        popa
64
        jmp     end_detecting_mouse
65
 
1 ha 66
MSMouseSearch:
33 mario79 67
        ; ПОИСК МЫШИ ЧЕРЕЗ COM-ПОРТЫ
1 ha 68
MouseSearch:
69
        ; Устанавливаем скорость
70
        ; приема/передачи 1200 бод
71
        mov     DX,[COMPortBaseAddr]
72
        add     DX,3
73
        in      AL,DX
74
        or      AL,80h  ;установить бит DLAB
75
        out     DX,AL
76
        mov     DX,[COMPortBaseAddr]
77
        mov     AL,60h  ;1200 бод
78
        out     DX,AL
79
        inc     DX
80
        mov     AL,0
81
        out     DX,AL
82
        ; Установить длину слова 7 бит, 1 стоповый бит,
83
        ; четность не контролировать
84
        mov     DX,[COMPortBaseAddr]
85
        add     DX,3
86
        mov     AL,00000010b
87
        out     DX,AL
381 serge 88
        ; Запретить все прерывани
1 ha 89
        mov     DX,[COMPortBaseAddr]
90
        inc     DX
91
        mov     AL,0
92
        out     DX,AL
381 serge 93
; Проверить, что устройство подключено и являетс
1 ha 94
; мышью типа MSMouse
381 serge 95
        ; Отключить питание мыши и прерывани
1 ha 96
        mov     DX,[COMPortBaseAddr]
97
        add     DX,4    ;регистр управления модемом
98
        mov     AL,0    ;сбросить DTR, RTS и OUT2
99
        out     DX,AL
100
        ; Ожидать 5 "тиков" (0,2 с)
101
        mov  ecx,0xffff
102
dT_1:
103
        dec  ecx
104
        cmp ecx,0
105
        jne dT_1
381 serge 106
        mov  ecx,0xffff
1 ha 107
        ; Включить питание мыши
108
        mov     AL,11b  ;установить DTR и RTS
109
        out     DX,AL
381 serge 110
        ; Очистить регистр данных
1 ha 111
        mov     DX,[COMPortBaseAddr]
112
        in      AL,DX
381 serge 113
; Цикл опроса порта
1 ha 114
WaitData:
115
        ; Ожидать еще 10 "тиков"
116
         dec  ecx
117
         cmp  ecx,0
118
         je     NoMouse
119
        ; Проверить наличие идентификационного байта
120
        mov     DX,[COMPortBaseAddr]
121
        add     DX,5
122
        in      AL,DX
123
        test    AL,1   ;Данные готовы?
124
        jz      WaitData
125
        ; Ввести данные
126
        mov     DX,[COMPortBaseAddr]
127
        in      AL,DX
128
NoMouse:
33 mario79 129
        ret
1 ha 130
 
131
iglobal
132
COMPortBaseAddr dw 3F8h
33 mario79 133
;COMPortNum dw 0
1 ha 134
endg
135
 
136
iglobal
33 mario79 137
boot_setmouse_type  db   'Detected - PS2  mouse',0
1 ha 138
                    db   'Detected - COM1 mouse',0
139
                    db   'Detected - COM2 mouse',0
140
endg
141
 
33 mario79 142
end_detecting_mouse:
1 ha 143