Информационные технологииStfw.Ru 🔍
🕛

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

Системная BIOS предоставляет ряд сервисов низкого уровня, в основном предназначенных для обслуживания ввода-вывода и имеющих отношения к стандартным аппаратным интерфейсам.Системная 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 Management);
• 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.

Также по теме:
Новые программы для Windows, Linux и Android.