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