Subversion Repositories Kolibri OS

Rev

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

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