Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

8042

569
12 февраля 2002 года
Kar|_SuSe
6 / / 20.12.1999
privet narod
est' li u kogonet' codi command i8042-go (kontroller klavi) ?
ili hotyabi code dlya polucheniya v output-buffere (na portu 60h) dannij Typematic-Rate ...

TIA

[EMAIL]andypetr@compuserve.de[/EMAIL]
461
13 февраля 2002 года
gerard
102 / / 20.12.1999
Прежде всего, следует уточнить, что команды управления контроллера i8042 делятся на те, которые управляют самим контроллером, и те, которые управляют клавиатурой (или мышью PS/2, которая тоже подключается через этот контроллер). Поэтому опишу их по отдельности.

Команды управления контроллером:
20h - прочитать содержимое регистра команд
60h - записать байт в регистр команд
A1h - прочитать номер версии контроллера
A4h - проверить подключение клавиатуры (если она подключена, возвращется строка "F1")
A7h - запретить работу с мышью
A8h - разрешить работу с мышью
A9h - проверить работу мыши (в случае успеха возвращается код 00h)
AAh - проверить работу контроллера (в случае успеха возвращается код 55h)
ABh - проверить работу клавиатуры (в случае успеха возвращается код 00h)
ACh - возвращает 16 байт внутренней памяти контроллера
ADh - запретить работу с клавиатурой
AEh - разрешить работу с клавиатурой
AFh - возвращает номер версии
C0h - возвращает содержимое входного порта контроллера (не путать с регистрами команд и данных)
D0h - возвращает содержимое выходного порта контроллера (не путать с регистром состояния)
D1h - записать байт в выходной порт
D2h - записать байт в буфер клавиатуры
D3h - записать байт в буфер мыши
D4h - передать байт мыши
В двухбайтных командах (60h, D1h-D4h) второй байт следует послылать через регистр данных (порт 60h)

Команды управления клавиатурой:
EDh - установить состояние светодиодов в соостветствии со следующим байтом (бит 0 - Scroll Lock, 1 - Num Lock, 2 - Caps Lock)
EEh - эхо-диагностика клавиатуры (в случае успеха возвращает то же значение - EEh)
F0h - установить набор скан-кодов (1,2 или 3)
F2h - проверить тип устройства, подключенного
к разъему клавиатуры (клавиатура вернет коды ABh, 03h)
F3h - установить частоту автоповтора (биты 0-4 следующего байта) и задержку автоповтора (биты 5,6 следующего байта)
F4h - разрешить передачу скан-кодов
F5h - восстановить принятые по умолчанию параметры клавиатуры и прекратить передачу скан-кодов
F6h - восстановить принятые по умолчанию параметры клавиатуры без прекращения передачи
скан-кодов
F7h - разрешить автоповтор для всех клавиш
F8h - разрешить посылку кодов нажатия и отпускания для всех клавиш
F9h - разрешить посылку только кодов нажатия для всех клавиш
FAh - разрешить автоповтор и посылку кодов нажатия и отпускания для всех клавиш
FBh - разрешить автоповтор для клавиши с указанным в следущем байте номером
FCh - разрешить посылку кодов нажатия и отпускания для клавиши с указанным номером
FDh - разрешить посылку только кода нажатия для клавиши с указанным номером
FEh - повторить последнюю передачу
FFh - сброс клавиатуры
Для двухбайтовых команд (все, кроме EEh, FEh и FFh) после получения первого байта клавиатура возвращает байт FAh, служащий подтверждением приема

Регистр команд имеет следующий формат:
бит 0 - разрешить прерывание от клавиатуры
бит 1 - разрешить прерывание от мыши
бит 2 - признак последнего системного сброса (0 - включение питания, 1 - программный)
бит 3 - запретить блокировку клавиатуры
бит 4 - запретить работу с клавиатурой
бит 5 - запретить работу с мышью
бит 6 - преобразовывать клавиатурные скан-коды в PC-совместимые
бит 7 - не используется

Формат входного порта контроллера:
биты 0-3 - не используются
бит 4 - объем памяти RAM на системной плате (0 - 512 Кб, 1 - 256 Кб)
бит 5 - наличие перемычек (0 - есть, 1 - нет)
бит 6 - тип графического адаптера (0 - цвет, 1 - монохром)
бит 7 - блокировка клавиатуры (0 - разрешена,
1 - запрещена)

Формат выходного порта контроллера:
бит 0 - перезагрузка системы (как по Reset)
бит 1 - блокировка линии A20
биты 2,3 - не используются
бит 4 - переполнение выходного буфера
бит 5 - входной буфер пуст
бит 6 - линия таймера клавиатуры
бит 7 - линия данных клавиатуры

Коды задержки автоповтора:
0 - 250 мс, 1 - 500 мс, 2 - 750 мс, 3 - 1 с

Коды частоты автоповтора:
00h - 30.00 08h - 15.00 10h - 7.50 18h - 3.75
01h - 26.67 09h - 13.33 11h - 6.67 19h - 3.33
02h - 24.00 0Ah - 12.00 12h - 6.00 1Ah - 3.00
03h - 21.83 0Bh - 10.92 13h - 5.46 1Bh - 2.73
04h - 20.00 0Ch - 10.00 14h - 5.00 1Ch - 2.50
05h - 18.50 0Dh - 09.25 15h - 4.62 1Dh - 2.31
06h - 17.14 0Eh - 08.57 16h - 4.28 1Eh - 2.14
07h - 16.00 0Fh - 08.00 17h - 4.00 1Fh - 2.00

Как получить параметры автоповтора - точно не знаю. Знаю только, что по умолчанию (при сбросе клавиатуры) устанавливается 500 мс и 10 символов/с. Попробуйте команду ACh - может быть среди возвращенных ею байтов будет и нужный.
4.4K
21 мая 2003 года
Goodwin
1 / / 21.05.2003
Привет
Подскажи как правильно записать в буфер клавиатуры последовательность скан - кодов на assemblere
461
25 мая 2003 года
gerard
102 / / 20.12.1999
Пусть последовательность скан-кодов расположена по адресу Scan и заканчивается нулем. Тогда можно занести ее в буфер следующим образом:

  mov si, Scan
@1: mov al, 0D2 ; код команды
out 064h,al ; записи в буфер
lodsb ; очередной
out 060h,al ; скан-код
@2: in al,064h ; ждем, пока
test al,002 ; буфер не
jne @2 ; освободится
cmp byte ptr [si], 0
jne @1
...
Scan: db ..., 0

Вот, что-то в этом роде.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог