Книга: Аппаратные интерфейсы ПК. Энциклопедия
12.8. Сервисы и прерывания BIOS
Системная BIOS предоставляет ряд сервисов низкого уровня, в основном предназначенных для обслуживания ввода-вывода и имеющих отношения к стандартным аппаратным интерфейсам. Традиционные сервисы BIOS обычно вызываются в реальном режиме или V86 посредством инструкций программных прерываний (Int xx
). Большинство сервисов может быть вызвано и через фактически стандартизованные точки входа (адреса в области ROM BIOS) дальними вызовами процедур (CALL Far
) с предварительным помещением в стек регистра флагов (сервисы построены как обработчики прерываний). Все традиционные сервисы BIOS работают в 16-разрядном режиме процессора, и ими можно пользоваться в реальном режиме, V86 и малопривлекательном 16-разрядном защищенном режиме.
Для процессоров 386+ оптимальным по эффективности является 32-разрядный защищенный режим. Для того чтобы из этого режима можно было пользоваться сервисами BIOS (правда, не всеми) без промежуточных переключений, по инициативе фирмы Phoenix ввели 32-разрядные вызовы BIOS32. Адрес точки входа BIOS32 заранее не известен, но известен способ его нахождения: в диапазоне адресов памяти 0E0000-0FFFFFh на границе параграфов (младшие 4 бита адреса нулевые) ищется строка-сигнатура "_32_
" (число 325F5F33h) заголовка, за которой следует физический адрес точки входа. Сами сервисы вызываются дальними вызовами точки входа в сервис. Номер, параметры вызываемых функций и результаты передаются на регистрах процессора.
Прерывания, обслуживаемые системной BIOS, перечислены ниже. Кроме них несколько векторов используются как указатели на различные структуры данных.
Внутренние прерывания:
? 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 71h
— IRQ9
(перенаправлено на Int 0Ah
);
? Int 72h
— IRQ10
;
? Int 73h
— IRQ11
;
? Int 74h
— IRQ12
(контроллер мыши PS/2);
? Int 75h
— IRQ13
— исключение сопроцессора;
? Int 76h
— IRQ14
— контроллер жестких дисков;
? Int 77h
— IRQ15
.
ПРИМЕЧАНИЕ
Прерывания Int 70h
-77h
имеют место только в AT.
Функции ROM BIOS (16-битные сервисы):
? Int 05h
(F000:FF54h) — печать экрана;
? Int 10h
— видеосервис;
? Int 11h
— чтение списка оборудования (слово из BDA 0040:0010h), возвращает в АХ
:
• биты 15:14 — число обнаруженных LPT-портов: 00 — 0, …, 11 — 3;
• бит 13 — резерв;
• бит 12 — обнаружен игровой адаптер;
• биты 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
— 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.
- Настройка дополнительных параметров BIOS
- Глава 7 Сервисы сайта mail.ru
- Глава 6 Прерывания и обработка прерываний
- Сервисы по платной регистрации сайта
- Глава 12 Знакомство с BIOS
- Сервисы и команды
- Другие сервисы
- Глава 6 BIOS – базовая система ввода-вывода
- BIOS
- Как работает BIOS
- Описание программы настройки BIOS
- Настройка основных параметров BIOS