8042
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]
Команды управления контроллером:
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 - может быть среди возвращенных ею байтов будет и нужный.
Подскажи как правильно записать в буфер клавиатуры последовательность скан - кодов на assemblere
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
Вот, что-то в этом роде.