Subversion Repositories Kolibri OS

Rev

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

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