Низкоуровневое програмирование Главная - Реальный режим - Прерывания Bios - INT 16h: Ввод/вывод клавиатуры, управление процессором и кэшем.

INT 16h: Ввод/вывод клавиатуры, управление процессором и кэшем.

AHФункция
0hЧитать буфер клавиатуры (84-клавишная клавиатура)

Выход:
AH - скан-код
AL - ASCII код

Примечания:
Ждёт нажатия, если клавиша не нажата, и потом выдаёт нажатую клавишу
1Получить состояние клавиатуры (84-клавишная клавиатура)

Выход:
При ZF=1 нет клавиши
При ZF=0:
     AH - скан-код
     AL - ASCII код
2 Флаги клавиатуры (84-клавишная клавиатура)

Выход:
AL - флаги (0 -незажата, 1 - зажата(для режимов - включён)):
     бит 0 : правый Shift
     бит 1 : левый Shift
     бит 2 : CTRL
     бит 3 : ALT
     бит 4 : режим Scroll lock
     бит 5 : режим Num Lock
     бит 6 : режим Caps Lock
     бит 7 : режим Insert

Примечания:
Многие биосы изменяют значение регистра AH
3Автоповтор
ALФункция
00hСбросить режим автоповтора

Примечания:
Перед преминением проверьте наличие этой функции с помощью функции 09
Многие биосы изменяют значение регистра AH
04hОтключить режим автоповтора

Примечания:
Перед преминением проверьте наличие этой функции с помощью функции 09
Многие биосы изменяют значение регистра AH
05h Режим автоповтора

Вход:
BH - задержка :
     0 - 250мс,
     1 - 500мс,
     2 - 750мс,
     3 - 1000мс;
BL - частота (символов в секунду):
     0h - 30,
     1h - 26.7,
     2h - 24.0,
     3h - 21.8,
     4h - 20.0,
     5h - 18.5,
     6h - 17.1,
     7h - 16.0,
     8h - 15.0,
     9h - 13.3,
     Ah - 12.0,
     Bh - 10.9,
     Ch - 10.0,
     Dh - 9.2,
     Eh - 8.6,
     Fh - 8.0,
     10h - 7.5,
     11h - 6.7,
     12h - 6.0,
     13h - 5.5,
     14h - 5.0,
     15h - 4.6,
     16h - 4.3,
     17h - 4.0,
     18h - 3.7,
     19h - 3.3,
     1Ah - 3.0,
     1Bh - 2.7,
     1Ch - 2.5,
     1Dh - 2.3,
     1Eh - 2.1,
     1Fh - 2.0.

Примечания:
Перед преминением проверьте наличие этой функции с помощью функции 09
Спецификация Embedded BIOS не описывает функцию 09, необходимую для проверки наличия этой функции, но поддерживает эту функцию
Многие биосы изменяют значение регистра AH
06hУзнать режим автоповтора

Вход:
BH - задержка :
     0 - 250мс,
     1 - 500мс,
     2 - 750мс,
     3 - 1000мс;
BL - частота (символов в секунду):
     0h - 30,
     1h - 26.7,
     2h - 24.0,
     3h - 21.8,
     4h - 20.0,
     5h - 18.5,
     6h - 17.1,
     7h - 16.0,
     8h - 15.0,
     9h - 13.3,
     Ah - 12.0,
     Bh - 10.9,
     Ch - 10.0,
     Dh - 9.2,
     Eh - 8.6,
     Fh - 8.0,
     10h - 7.5,
     11h - 6.7,
     12h - 6.0,
     13h - 5.5,
     14h - 5.0,
     15h - 4.6,
     16h - 4.3,
     17h - 4.0,
     18h - 3.7,
     19h - 3.3,
     1Ah - 3.0,
     1Bh - 2.7,
     1Ch - 2.5,
     1Dh - 2.3,
     1Eh - 2.1,
     1Fh - 2.0.

Примечания:
Перед преминением проверьте наличие этой функции с помощью функции 09
Многие биосы изменяют значение регистра AH
4 Звук клавиш

Вход:
Al==1 - включено, AL==0 - выключено

Примечания:
Поддерживается не всеми БИОСами
Многие биосы изменяют значение регистра AH
5 Поместить символ в бувер клавиатуры

Вход:
CH - скан-код
CL - ASCII код

Выход:
AL == 0 - успех, AL==1 - буфер переполнен

Примечания:
Многие биосы изменяют значение регистра AH
9 Функциональные возможности

Вход:
AL = 0

Выход:
AL (если AL==0, то AH): байт возможностей:
     бит 0 : поддержка функции 0300h
     бит 1 : поддержка функции 0304h
     бит 2 : поддержка функции 0305h
     бит 3 : поддержка функции 0306h
     бит 4 : поддержка функции 0Ah
     бит 5 : поддержка клавиатуры 101/102 клавиши
     бит 6 : поддержка клавиатуры 122 клавиши
     бит 7 : резерв

Примечания:
Поддерживается не всеми BIOS
Перед пременение реккомендуется проверить подлержку с помошью функции C0h прерывания 15h

Многие биосы изменяют значение регистра AH даже если выход передан в AL
Ah ID клавиатуры

Вход:
AL = 0

Выход:
BX :
     0 - нет клавиатуры/неизвестная клавиатура
     41ABh - Японская "G" клавиатура (M2F) в режиме транслита
     54ABh - Японская "P" клавиатура в режиме транслита
     83ABh - Японская "G" клавиатура (M2F) в режиме pass-through
     84ABh - Японская "P" клавиатура в режиме pass-through
     86ABh - 122-х клавишная
     90ABh - старая Японская "G" клавиатура
     91ABh - старая Японская "P" клавиатура
     92ABh - старая Японская "A" клавиатура

Примечания:
Поддерживается не всеми БИОСами
10h Читать буфер клавиатуры (101/102-клавишная клавиатура)

Выход:
Для стандартных клавиш:
   AH - расширеный скан-код
   AL - ASCII код

Для клавиш и комбинаций с расширеным кодом:
   AL = 0
   AH - расширенный ASCII код

Для доп. клавиш:    AL = 0eh
   AH - расширенный ASCII код

Примечания:
Ждёт нажатия, если клавиша не нажата, и потом выдаёт нажатую клавишу
11hПолучить состояние клавиатуры (101/102-клавишная клавиатура)

Выход:
если ZF==1, то символа нет и AL может быть установлен в единицу
если ZF==0:
Для стандартных клавиш:
   AH - расширеный скан-код
   AL - ASCII код

Для клавиш и комбинаций с расширеным кодом:
   AL = 0
   AH - расширенный ASCII код

Для доп. клавиш:    AL = 0eh
   AH - расширенный ASCII код
12hФлаги Клавиатуры (101/102-клавишная клавиатура)

Выход:
AX - байт флагов(0 -незажата, 1 - зажата(для режмов - включён)):
     бит 0 : правый Shift
     бит 1 : левый Shift
     бит 2 : CTRL
     бит 3 : ALT
     бит 4 : режим Scroll lock
     бит 5 : режим Num Lock
     бит 6 : режим Caps Lock
     бит 7 : режим Insert
     бит 8 : Левый CTRL
     бит 9 : Левый ALT
     бит 10 : Правый CTRL
     бит 11 : Правый ALT
     бит 12 : Клавиша Scroll lock
     бит 13 : Клавиша Num Lock
     бит 14 : Клавиша Caps Lock
     бит 15 : Клавиша SysReq

Примечания:
В Phoenix BIOS 4 User Manual rev6 содержится ошибка: они перепутали местами значения AH и AL
20h Аналагично функции 10h, но для 122-х клавишной клавиатуры
21h Аналагично функции 11h, но для 122-х клавишной клавиатуры
22h Аналагично функции 12h, но для 122-х клавишной клавиатуры
F0hУстановить скорость процессора

Вход:
AL = 00 - низкая
      01 - средняя
      02 - высокая
      03 - использовать значение джампера на материнской плате
      08 - высокая, но с понижением при обращении к дискетному приводу

Примечания:
Поддерживается не всеми BIOS
как правило, реализованны только значения 00, 01 и 02
F1hУзнать скорость процессора

Выход:
AL = 00 - низкая
      01 - средняя
      02 - высокая
      03 - использовать значение джампера на материнской плате
      08 - высокая, но с понижением при обращении к дискетному приводу

Примечания:
Поддерживается не всеми BIOS
как правило, реализованны только значения 00, 01 и 02
F4hУпраление кэшем

ALПодфункция
00Узнать статус кэша

Выход:
AH = E2h
AL:
      00 - кэш отсутствует
      01 - кэш включён
      02 - кэш выключен
CX:
      биты 0 - 14 : размер кэша в Кб
      бит 15 : если установлен, то размер верный
DH:
      бит 0 : если установлен, то используется стратегия write-back, иначе write-through
      биты 1 - 6 : резерв
      бит 7 : если установлен, то данные верны
DL:
      бит 0 : если установлен, то кэш двухрядный ассоциативный, иначе используется direct mapping
      биты 1 - 6 : резерв
      бит 7 : если установлен, то данные верны

Примечания:
Поддерживается не всеми BIOS
AH не всегда содержит E2h
01Включить кэш

Выход:
AH = E2h

Примечания:
Поддерживается не всеми BIOS
AH не всегда содержит E2h
01Отключить кэш

Выход:
AH = E2h

Примечания:
Поддерживается не всеми BIOS
AH не всегда содержит E2h
FFhДобавить символ в конец буфера клавиатуры

Вход:
DX - скан-код клавиши

Выход:
AL == 0, иначе - ошибка

Примечания:
Поддерживается не всеми BIOS