• биты 7:6 — число обнаруженных НГМД: 00 — 1, …, 11 — 4;

 • биты 5:4 — активный видеорежим: 00 — резерв, 10 — 80-колоночный цветной, 01 — 40-колоночный цветной, 11 — монохромный;

 • биты 3:2 — размер ОЗУ на системной плате (теперь обычно 00);

 • бит 1 — присутствие математического сопроцессора;

 • бит 0 — присутствие дисководов;

♦ Int 12h — размер непрерывной памяти;

♦ Int 13h — дисковый сервис (блочный ввод-вывод);

♦ Int 14h — обслуживание СОМ-портов;

♦ Int 15h — AT-функции (системный сервис, функции определяются значением АН/АХ):

 • 00-03h — управление и обмен данными с кассетным магнитофоном (были когда-то и такие «стриммеры»!) на старых PC;

 • 4fh — перехват клавиатуры;

 • 53xxh — сервисы управления потреблением АРМ (Advanced Power Management);

 • 8300h — запуск таймера, устанавливающего флаг в заданной ячейке;

 • 8301h — сброс того же таймера;

 • 84h — джойстик (см. п. 8.6);

 • 86h — программируемая задержка;

 • 87h — перемещение блока расширенной памяти;

 • 88h — получение размера расширенной памяти;

 • 89h — переключение в режим V86;

 • C0h — получение системной конфигурации, при успешном выполнении (CF=0, AH=0) ES:BX  указывает на таблицу данных конфигурации;

 • 80-82h, 85h, 90h, 91h — функции многозадачных ОС (BIOS устанавливает заглушки);

♦ Int 16h — клавиатурный ввод-вывод;

♦ Int 17h — обслуживание LPT-портов;

♦ Int 18h — процедура восстановления при неудаче начальной загрузки (прежде — ROM-Basic);

♦ Int 19h — начальная загрузка (вызов процедуры Bootstrap);

♦ Int 1Ah — системное время, дата, будильник и 16-битные вызовы сервисов PCI;

♦ Int 1Bh — обработчик нажатия клавиш Ctrl+Break;

♦ Int 1Ch — User Timer Interrupt, процедура, вызываемая обработчиком Int 08h каждые 55 мс; BIOS устанавливает простую заглушку (IRET), но программы могут перехватывать это прерывание; на время отработки этой процедуры все аппаратные прерывания запрещены (кроме NMI).

♦ Int 33h — поддержка мыши;

♦ Int 4Ah — обработчик будильника пользователя, установленного функцией BIOS Int 1Ah(6); прерывание вызывается асинхронно, так что при возврате из процедуры все регистры и флаги должны быть в том же состоянии, что и при входе; BIOS ставит заглушку (IRET);

♦ Int 67h — EMS-функции.

Указатели на таблицы:

♦ Int 1Dh — видеопараметры;

♦ Int 1Eh — параметры дискет;

♦ Int 1Fh — знакогенератор СGA;

♦ Int 41h — параметры HDD 0;

♦ Int 46h — параметры HDD 1;

♦ Int 43h — знакогенератор EGA.

<p>12.8.1. Int 09h, Int 16h — поддержка клавиатуры</p>

Поддержка клавиатуры заключается в обработке прерываний от устройства ввода и предоставлении сервисов ввода прикладным программам.

Прерывания, вызванные приходом кодов нажатия и отпускания клавиш, обрабатывает BIOS Int 9h. Каждый принятый скан-код (или цепочка) обрабатывается с учетом состояния клавиатурных флагов. Результат обработки (как правило, ASCII-символ в младшем байте и скан-код в старшем) помещается в клавиатурный буфер, расположенный в ОЗУ. По приему каждого символа указатель головы буфера увеличивается. Буфер организован в виде кольца, после достижения конца области буфера указатель головы установится на начало области. В случае переполнения буфера (указатель головы «догнал» указатель хвоста) очередное слово не записывается, и подается звуковой сигнал. Размер позволяет хранить описание шестнадцати фактов нажатий клавиш. Нажатие клавиш Ctrl, Shift, Alt и некоторых комбинаций в буфере не отмечается, но приводит к модификации бит ячеек флагов клавиатуры. Нажатие «системной» комбинации Ctrl+Alt+Del, клавиши PrintScreen (SysRq) и некоторых других к записи в клавиатурный буфер не приводит, а вызывает специальные процедуры.

Для обслуживания клавиатуры используются ячейки ОЗУ из области данных BIOS (BIOS Data Area):

♦ 0:0417, 0:418 — флаги клавиатуры;

♦ 0:0419 — аккумулятор кода Alt-набора;

♦ 0:041А — указатель головы буфера (Buffer Head), 2 байта (модифицируется при помещении символа в буфер);

♦ 0:041C — указатель хвоста буфера (Buffer Tail), 2 байта (модифицируется при извлечении символа из буфера);

♦ 0:041E-0:042D — область кольцевого буфера (16 слов).

Обработчик аппаратного прерывания до обработки принятого скан-кода вызывает прерывание BIOS Int 15h с AH=4Fh, а в AL находится принятый скан-код. Стандартный обработчик Int 15h(4Fh) просто выполняет возврат с CF=0, но его можно заменить специальным обработчиком, который будет при необходимости подменять принятые скан-коды на какие-либо иные (оставляя их в AL), что должно отмечаться установкой CF=1. В старых версиях BIOS такой возможности перехвата не было, ее наличие можно определить вызовом Int 15h(C0h).

Перейти на страницу:

Все книги серии Наиболее полное и подробное руководство

Похожие книги