Аппаратные интерфейсы ПК

Сервисы и прерывания BIOS


Системная BIOS предоставляет ряд сервисов низкого уровня, в основном пред­назначенных для обслуживания ввода-вывода и имеющих отношения к стан­дартным аппаратным интерфейсам. Традиционные сервисы BIOS обычно вы­зываются в реальном режиме или V86 посредством инструкций программных прерываний (Int xx). Большинство сервисов может быть вызвано и через фак­тически стандартизованные точки входа (адреса в области ROM BIOS) дальни­ми вызовами процедур (CAL L f a r) с предварительным помещением в стек регис­тра флагов (сервисы построены как обработчики прерыаний). Все традиционные сервисы BIOS работают в 16-разрядном режиме процессора, и ими можно пользо­ваться в реальном режиме, V86 и малопривлекательном 16-разрядном защищен­ном режиме.

Для процессоров 386+ оптимальным по эффективности является 32-разрядный защищенный режим. Для того чтобы из этого режима можно было пользоваться сервисами BIOS (правда, не всеми) без промежуточных переключений, по ини­циативе фирмы Phoenix ввели 32-разрядные вызовы BIOS32. Адрес точки входа BIOS32 заранее не известен, но известен способ его нахождения: в диапазоне ад­ресов памяти OEOOOO-OFFFFFh на границе параграфов (младшие 4 бита адреса нулевые) ищется строка-сигнатура "_32_" (число 325F5F33H) заголовка, за кото­рой следует физический адрес точки входа. Сами сервисы вызываются дальними вызовами точки входа в сервис. Номер, параметры вызываемых функций и резуль­таты передаются на регистрах процессора.

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

12.8. Сервисы и прерывания BIOS____________________________________ 481

Внутренние прерывания:

¦ Int 00h — деление на 0;

¦      Int 01h — пошаговый режим;

¦      Int 03h — точка останова;

¦      Int 04h — переполнение;

¦      Int 06h — недопустимая команда 286+;


¦      Int 07h — вызов отсутствующего NPU.

Аппаратные прерывания:



¦      Int 02h — немаскируемое прерывание;

¦      Int 08h - таймер 8253/8254;

¦      Int 09h — клавиатура;

¦      Int 0Ah - IRQ2/9;

¦      Int 0Bh- IRQ3;

¦      Int 0Ch-IRQ4;

¦      Int 0Dh — IRQ5;

¦      Int 0Eh — IRQ6 — контроллер гибких дисков;

¦      Int 0Fh-IRQ7;

¦      Int 70h - CMOS-таймер;

¦      Int 7Ih — IRQ9 (перенаправлено на Int 0Ah);

¦      Int 72h- IRQ10;

¦      Int 73h — IRQ11;

¦      Int 74h — IRQ 12 (контроллер мыши PS/2);

¦      Int 75h — IRQ 13 — исключение сопроцессора;

¦      Int 76h — IRQ14— контроллер жестких дисков;

¦      Int 77h-IRQ15.

ПРИМЕЧАНИЕ

Прерывания Int 70h-77h имеют место только в AT.

Функции ROM BIOS (16-битные сервисы):

¦      Int 05h (FOOO:FF54h) - печать экрана;

¦      Int 10h — видеосервис;

¦      Int llh — чтение списка оборудования (слово из BDA 0040:001 0h), возвра­

щает в АХ:

•       биты 15:14 — число обнаруженных LPT-портов: 00 —0,... 11 — 3;

•       бит 13 — резерв;

•     бит 12 — обнаружен игровой адаптер;

482______ Глава 12. Архитектурные компоненты IBM PC-совместимого компьютера

•       биты 11:9 — число обнаруженных СОМ-портов: 000 —0,... 111 — 7;

•       бит 8 — наличие контроллера DMA;

•       биты 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 — АТ-функции (системный сервис, функции определяются значени­

ем АН/АХ):

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

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

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

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

•       830 lh — сброс того же таймера;

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

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

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

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

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

•       COh — получение системной конфигурации, при успешном выполнении (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 lAh— системное время, дата, будильник и 16-битные вызовы сервисов PCI;

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

12.8. Сервисы и прерывания BIOS____________________________________   483

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

¦     Int ЗЗп — поддержка мыши;

¦     Int 4Ah — обработчик будильника пользователя, установленного функцией

BIOS Int lAh(6); прерывание вызывается асинхронно, так что при возврате

из процедуры все регистры и флаги должны быть в том же состоянии, что и при

входе; BIOS ставит заглушку (IRET);

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

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

¦     Int   IDh — видеопараметры;

¦     Int   lEh — параметры дискет;

¦     Int   IFh — знакогенератор СGA;

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

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

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


Содержание раздела