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 |