Int 16h не работает

Функции 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 код

Примечания:
Ждёт нажатия, если клавиша не нажата, и потом выдаёт нажатую клавишу 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 (если 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 клавиатуры

Выход:
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 Включить кэш

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

01 Отключить кэш

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

FFh Добавить символ в конец буфера клавиатуры

Вход:
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 с клавиатуры.
Данные типа int вводятся с клавиатуры. нужно поставить защиту от дурака. Полазил на форуме нашёл.

Запросить с клавиатуры ввод целого числа типа unsigned int
Запросить с клавиатуры ввод целого числа типа unsigned int. Записать бинарное представление этого.

Запросить с клавиатуры ввод трех целых чисел типа int
1. Запросить с клавиатуры ввод трех целых чисел типа int. Найти и распечатать на экран.

Работа с функциями BIOS драйвера клавиатуры с использованием прерывания 16H — С++
Доброго времени суток. Помогите пожалуйста написать программу на языке С++ с использованием.

Источник

Читайте также:  Adventure sync pokemon go не работает
Оцените статью