Subversion Repositories Kolibri OS

Rev

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