Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
431 serge 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
3
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7
 
593 mikedld 8
$Revision: 593 $
9
 
10
 
1 ha 11
;**************************************************
12
;*      ПОИСК МЫШИ ПО ПОСЛЕДОВАТЕЛЬНЫМ ПОРТАМ     *
13
;* Процедура подготавливает глобальные переменные *
14
;* COMPortNum и COMPortBaseAddr для подпрограммы  *
15
;* установки обработчика прерывания               *
16
;**************************************************
17
; Автор исходного текста Кулаков Владимир Геннадьевич.
18
; Адаптация и доработка Mario79
19
 
33 mario79 20
Detect_COM_Mouse:
21
        pusha
22
        call   MSMouseSearch
23
        cmp    AL,'M'
24
        jne    @f
25
        mov    [com1_mouse_detected],1
473 diamond 26
        mov     [irq_owner+4*4], 1      ; IRQ4 owner is System
27
        mov     eax, [RESERVED_PORTS]
28
        inc     eax
29
        mov     [RESERVED_PORTS], eax
30
        shl     eax, 4
31
        mov     [RESERVED_PORTS+eax+0], dword 1
32
        mov     [RESERVED_PORTS+eax+4], dword 0x3F8
33
        mov     [RESERVED_PORTS+eax+8], dword 0x3FF
33 mario79 34
        mov    esi,boot_setmouse_type+22
35
        call  boot_log
36
     @@:
37
        sub    [COMPortBaseAddr],100h
38
        call   MSMouseSearch
39
        cmp    AL,'M'
381 serge 40
        jne    @f
33 mario79 41
        mov    [com2_mouse_detected],1
473 diamond 42
        mov     [irq_owner+3*4], 1      ; IRQ3 owner is System
43
        mov     eax, [RESERVED_PORTS]
44
        inc     eax
45
        mov     [RESERVED_PORTS], eax
46
        shl     eax, 4
47
        mov     [RESERVED_PORTS+eax+0], dword 1
48
        mov     [RESERVED_PORTS+eax+4], dword 0x2F8
49
        mov     [RESERVED_PORTS+eax+8], dword 0x2FF
33 mario79 50
        mov    esi,boot_setmouse_type+44
51
        call  boot_log
52
     @@:
53
        popa
54
        jmp     end_detecting_mouse
55
 
1 ha 56
MSMouseSearch:
33 mario79 57
        ; ПОИСК МЫШИ ЧЕРЕЗ COM-ПОРТЫ
1 ha 58
MouseSearch:
59
        ; Устанавливаем скорость
60
        ; приема/передачи 1200 бод
61
        mov     DX,[COMPortBaseAddr]
62
        add     DX,3
63
        in      AL,DX
64
        or      AL,80h  ;установить бит DLAB
65
        out     DX,AL
66
        mov     DX,[COMPortBaseAddr]
67
        mov     AL,60h  ;1200 бод
68
        out     DX,AL
69
        inc     DX
70
        mov     AL,0
71
        out     DX,AL
72
        ; Установить длину слова 7 бит, 1 стоповый бит,
73
        ; четность не контролировать
74
        mov     DX,[COMPortBaseAddr]
75
        add     DX,3
76
        mov     AL,00000010b
77
        out     DX,AL
381 serge 78
        ; Запретить все прерывани
1 ha 79
        mov     DX,[COMPortBaseAddr]
80
        inc     DX
81
        mov     AL,0
82
        out     DX,AL
381 serge 83
; Проверить, что устройство подключено и являетс
1 ha 84
; мышью типа MSMouse
381 serge 85
        ; Отключить питание мыши и прерывани
1 ha 86
        mov     DX,[COMPortBaseAddr]
473 diamond 87
        add     EDX,4   ;регистр управления модемом
1 ha 88
        mov     AL,0    ;сбросить DTR, RTS и OUT2
89
        out     DX,AL
90
        ; Ожидать 5 "тиков" (0,2 с)
473 diamond 91
        mov     ecx, 0xFFFF
92
        loop    $
1 ha 93
        ; Включить питание мыши
473 diamond 94
        mov     al, 1
95
        out     dx, al
96
        mov     ecx, 0xFFFF
97
        loop    $
98
        ; Очистить регистр данных
99
        sub     edx, 4
100
        in      AL,DX
101
        add     edx, 4
1 ha 102
        mov     AL,11b  ;установить DTR и RTS
103
        out     DX,AL
473 diamond 104
        mov     ecx, 0x1FFFF
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