Subversion Repositories Kolibri OS

Rev

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

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