Функции BIOS — INT 16H: сервис клавиатуры
Это — интерфейс прикладного уровня с клавиатурой. Нажатия клавиш на самом деле обрабатываются асинхронно на заднем плане. когда клавиша получена от клавиатуры, она обрабатывается прерыванием INT 09H и помещается в циклическую очередь.
Оставить комментарий
Комментарии
Vadik94 / 12 сентября 2009, 22:03:05
кто-нибудь что-то знает про функцию 10h прерывания 16h?
и есть ли другие функции этого прерывания и где их можно найти?
1.Хороший справочник по прерываниям BIOS:
автор — Владимир Кулаков
книга называется «Программирование на аппаратном уровне»
Все функции описаны подробно + многое показано на примерах.
Vadik94 / 12 сентября 2009, 22:03:05>
кто-нибудь что-то знает про функцию 10h прерывания 16h?
Это функция BIOS! Она ждет нажатия клавиши клавиатуры, а потом помещает в AL код нажатой клавиши!
Источник
Int 16h не работает
Выход:
AH — скан-код
AL — ASCII код
Примечания:
Ждёт нажатия, если клавиша не нажата, и потом выдаёт нажатую клавишу
Выход:
При ZF=1 нет клавиши
При ZF=0:
AH — скан-код
AL — ASCII код
Выход:
AL — флаги (0 -незажата, 1 — зажата(для режимов — включён)):
бит 0 : правый Shift
бит 1 : левый Shift
бит 2 : CTRL
бит 3 : ALT
бит 4 : режим Scroll lock
бит 5 : режим Num Lock
бит 6 : режим Caps Lock
бит 7 : режим Insert
Примечания:
Многие биосы изменяют значение регистра AH
| AL | Функция |
| 00h | Сбросить режим автоповтора Примечания: |
| 04h | Отключить режим автоповтора Примечания: |
| 05h | Режим автоповтора Вход: Примечания: |
| 06h | Узнать режим автоповтора Вход: Примечания: |
Вход:
Al==1 — включено, AL==0 — выключено
Примечания:
Поддерживается не всеми БИОСами
Многие биосы изменяют значение регистра AH
Вход:
CH — скан-код
CL — ASCII код
Выход:
AL == 0 — успех, AL==1 — буфер переполнен
Примечания:
Многие биосы изменяют значение регистра AH
Выход:
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
Выход:
BX :
0 — нет клавиатуры/неизвестная клавиатура
41ABh — Японская «G» клавиатура (M2F) в режиме транслита
54ABh — Японская «P» клавиатура в режиме транслита
83ABh — Японская «G» клавиатура (M2F) в режиме pass-through
84ABh — Японская «P» клавиатура в режиме pass-through
86ABh — 122-х клавишная
90ABh — старая Японская «G» клавиатура
91ABh — старая Японская «P» клавиатура
92ABh — старая Японская «A» клавиатура
Примечания:
Поддерживается не всеми БИОСами
Выход:
Для стандартных клавиш:
AH — расширеный скан-код
AL — ASCII код
Для клавиш и комбинаций с расширеным кодом:
AL = 0
AH — расширенный ASCII код
Для доп. клавиш: AL = 0eh
AH — расширенный ASCII код
Примечания:
Ждёт нажатия, если клавиша не нажата, и потом выдаёт нажатую клавишу
Выход:
если ZF==1, то символа нет и AL может быть установлен в единицу
если ZF==0:
Для стандартных клавиш:
AH — расширеный скан-код
AL — ASCII код
Для клавиш и комбинаций с расширеным кодом:
AL = 0
AH — расширенный ASCII код
Для доп. клавиш: AL = 0eh
AH — расширенный ASCII код
Выход:
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
Вход:
AL = 00 — низкая
01 — средняя
02 — высокая
03 — использовать значение джампера на материнской плате
08 — высокая, но с понижением при обращении к дискетному приводу
Примечания:
Поддерживается не всеми BIOS
как правило, реализованны только значения 00, 01 и 02
Выход:
AL = 00 — низкая
01 — средняя
02 — высокая
03 — использовать значение джампера на материнской плате
08 — высокая, но с понижением при обращении к дискетному приводу
Примечания:
Поддерживается не всеми BIOS
как правило, реализованны только значения 00, 01 и 02
| AL | Подфункция |
| 00 | Узнать статус кэша Выход: Примечания: |
| 01 | Включить кэш Примечания: |
| 01 | Отключить кэш Примечания: |
Вход:
DX — скан-код клавиши
Выход:
AL == 0, иначе — ошибка
Источник
Прерывание int 16h
Дата добавления: 2014-11-27 ; просмотров: 7886 ; Нарушение авторских прав
Функция 00h (10h). Чтение символа клавиатуры с ожиданием.
Читает из кольцевого буфера ввода символ и скан-код. После считывания они удаляются из буфера и возвращаются в регистре AX. Если буфер пуст, ожидает ввода. Каждой клавише на клавиатуре соответствует так называемый скан-код, соответствующий только этой клавише. Этот код посылается клавиатурой при каждом нажатии и отпускании клавиши и обрабатывается в BIOS обработчиком прерывания Int 09h. Функция 00h даёт возможность получить код нажатия, не перехватывая этот обработчик. Если нажатой клавише соответствует ASCII-символ, то:
AL – ASCII-код символа, AH – скан-код клавиши.
Если нажатой клавише соответствует расширенный ASCII-код, то:
AL – 00h, AH – расширенный ASCII-код.
Возврат: AL = ASCII-код символа, изображённый на клавише/00h,
AH = скан-код/расширенный ASCII-код клавиши.
Функция 10h (AH = 10h) – усовершенствованный вариант функции 00h для расширенной клавиатуры (101/102-key). Позволяет получить расширенные ASCII-коды для клавиш F11, F12, а также для ряда других комбинаций. В качества признака управляющих клавиш или их комбинаций, помимо значения 00h, используются 0Ah, 0Dh и E0h.
Функция 01h (11h). Поверка буфера клавиатуры на наличие в нём символа.
Определяет, имеются ли в кольцевом буфере ожидающие ввода символы; возвращает флаг ожидания и сам символ при его наличии. Однако символ и его скан-код не извлекаются из буфера и могут быть снова получены при повторном вызове функции 00h Int 16h. Данная функция относится к числу асинхронных: определив состояние буфера ввода, она возвращает управление программе.
Возврат: ZF = 1, если буфер пуст и ZF = 0, если в буфере имеется ожидающий считывания символ. В этом случае:
AL = ASCII-код символа/00h, AH = скан-код клавиши/расширенный ASCII-код.
Функция 11h (AH = 11h) – усовершенствованный вариант функции 01h для расширенной клавиатуры (101/102-key). Позволяет получить расширенные ASCII-коды для клавиш F11, F12, а также для ряда других комбинаций. В качестве признака управляющих клавиш или их комбинаций, помимо значения 00h, используются 0Ah, 0Dh и E0h.
Функция 02h (12h). Получение флагов клавиатуры.
Возвращает байт флагов клавиатуры, описывающих состояние управляющих клавиш, записанное в байте (слове) области данных BIOS по адресу 0000h:0417h.
Возврат: AL=1-ый байт флагов клавиатуры.
Биты байта имеют следующие значения:
– 0 : 1 – правая Shift нажата
– 1 : 1 – левая Shift нажата
– 2 : 1 – Ctrl (любая) нажата
– 3 : 1 – Alt (любая) нажата
– 4 : 1 – режим Scroll Lock
– 5 : 1 – режим Num Lock
– 6 : 1 – режим Caps Lock
– 7 : 1 – режим Insert активен
Функция 12h (AH = 12h) – усовершенствованный вариант функции 02h для расширенной клавиатуры (101/102-key). Выводит такое же значение байта, как и функция 02h, по адресу 0000h:0417h, и, дополнительно, второй байт статуса клавиатуры (адрес 0000h:0418h) со следующими значениями:
0: 1 – левая Ctrl нажата 4: 1 – нажата Scroll Lock
1: 1 – левая Alt нажата 5: 1 – нажата Num Lock
2: 1 – правая Ctrl нажата 6: 1 – нажата Caps Lock
3: 1 – правая Alt нажата 7: 1 – нажата SysReg
Источник
Прерывание int 16h, ввод с клавиатуры
Помощь в написании контрольных, курсовых и дипломных работ здесь.
BIOS Int 16h
Огромная просьба ко всем форумчанам подсказать дилетанту почему код не выполняется так как должен.
Функция 10h прерывание 16h
Для понятности приведу код CSEG segment org 100h Begin: mov ah,10h int 16h int 20h
Модификация функции 00h прерывания int 16h
Можно ли перехватом прерывания 16h изменить значения, возвращаемые функцией 00h ?
Как эмулировать нажатие клавиш int 16h
Здравствуйте, работаю вот с 05h, хочу эмулировать нажатие клавиши. mov al, 02h mov ah, 05h mov.
Данные типа int вводятся с клавиатуры. нужно поставить защиту от дурака. Полазил на форуме нашёл.
Запросить с клавиатуры ввод целого числа типа unsigned int. Записать бинарное представление этого.
1. Запросить с клавиатуры ввод трех целых чисел типа int. Найти и распечатать на экран.
Работа с функциями BIOS драйвера клавиатуры с использованием прерывания 16H — С++
Доброго времени суток. Помогите пожалуйста написать программу на языке С++ с использованием.
Источник