Subversion Repositories Kolibri OS

Rev

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