позволяют считывать и модифицировать значения системного таймера, даты и времени, а также установки будильника часов реального времени CMOS RTC. Перечисленные ниже номера функций указываются при вызове в регистре
АН
.
1.
АН
=0 — чтение системного таймера (двойного слова по адресу 40:006Eh в BIOS Data Area, инкрементируемого по прерываниям от канала 0 счетчика- таймера 8253/8254 примерно раз в 55 мс. Таймер обнуляется при выполнении теста POST после аппаратного сброса). Возвращает значение таймера, в
СХ
—
старшую часть, в
DX
— младшую.
AL
=0, если за последние 24 часа не было переполнения таймера. В современных версиях сброс
AL
возвращает счетчик переполнений таймера, хранящийся в ячейке 40:0070h (в старых версиях это был флаг).
2.
АН
=1 — установка системного таймера (
СХ
— старшая часть, в
DX
— младшая) и сброс флага (счетчика) переполнения таймера в ячейке 40:0070h. В случае ошибки устанавливается флаг
CF
=1.
3.
АН
=2 — чтение времени из RTC. Возвращает в упакованном BCD-формате час (в регистре
СН
), минуту (
CL
), секунду (
DH
) и признак коррекции летнего/зимнего времени (
DL
=1 — коррекция используется,
DL
=0 — нет). Признаком успешной операции является флаг
CF
=0. Во избежание ошибок некоторых BIOS при вызове флаг
CF
должен быть сброшен.
4.
АН
=3 — установка времени в RTC, назначение регистров и признак результата аналогичен функции 2.
5.
АН
=4 — чтение даты из RTC. Возвращает в упакованном BCD-формате век (в регистре
СН
), две старшие цифры года (
CL
), месяц (
DH
) и день (
DL
). Признаком успешной операции является флаг
CF
=0. Во избежание ошибок некоторых BIOS при вызове флаг
CF
должен быть сброшен.
6.
АН
=5 — установка даты в RTC, назначение регистров и признак результата аналогичен функции 4.
7.
АН
=6 — установка времени срабатывания будильника RTC. Возвращает в упакованном BCD-формате час (в регистре
СН
), минуту (
CL
) и секунду (
DH
). Если будильник уже установлен, переустановка не производится и возвращается флаг
CF
=1. При срабатывании будильник вызывает прерывание
Int 4Ah
.
8.
АН
=7 — отмена установки будильника.
Функции BIOS
Int 15h
позволяют программировать таймер CMOS RTC — вводить задержку или запускать таймер установки флага, указывая время в микросекундах (СХ — старшее слово, DX — младшее). Нулевое значение интервала не вызывает никаких действий. Достижимое разрешение в зависимости от производительности ПК может достигать единиц миллисекунд, максимальная выдержка — около 70 часов. Перечисленные ниже номера функций указываются при вызове в регистре
АН
или
АХ
.
9.
AH
=86h — задержка на заданное время. Управление будет возвращено вызвавшему процессу только через указанный интервал. По окончании задержки будет установлен бит 7 в ячейке BDA 0040:00A0. Таймер может оказаться занятым, тогда вызов сразу возвратит флаг
CF
=1 (при успехе
CF
=0, а в
AL
окажется маска, записанная в 8259А#2).
10.
AX
=8300h — запуск таймера, устанавливающего флаг после указанной задержке бит 7 в ячейке, заданной регистрами
ES
:
BX
. При успешном запуске
CF
=0; если таймер занят (он один) —
CF
=1 и
AL
=0. Управление возвращается процессу сразу, а флаг будет установлен через заданное время. Перед завершением программа, запускавшая таймер, должна его сбросить функцией 8301h (во-первых, чтобы освободить; во-вторых, чтобы снять «адскую машинку», которая неожиданно сама может изменить значение ячейки памяти, вполне возможно уже задействованную другим, ничего не «подозревающим» процессом).
11.
AX
=8301h — сброс того же таймера.
12.8.7. PCI BIOS
Функции PCI BIOS используются только для поиска и конфигурирования устройств PCI — процедур, требующих доступа к их конфигурационному пространству (см. п. 8.2). Регулярная работа с этими устройствами выполняется через обращения к регистрам устройств по адресам, полученным при конфигурировании, и обработке известных номеров прерываний от этих устройств. Для 16-битного интерфейса реального режима, V86 и 16-битного реального режима, функции PCI BIOS вызываются через прерывание
Int 1Ah
; номер функции задается при вызове в регистре
АХ
. Возможна и программная имитация прерывания дальним вызовом по физическому адресу 000FFE6EH (стандартная точка входа в обработчик
Int 1Ah
) с предварительным занесением в стек регистра флагов.
Признаком нормального выполнения является
CF
=0 и
АН
=0; при
CF
=1
АН
содержит код ошибки:
♦ 81h — неподдерживаемая функция;
♦ 83h — неправильный идентификатор производителя;
♦ 86h — устройство не найдено;
♦ 87h — неправильный номер регистра PCI.
Вызовы требуют глубокого стека (до 1024 байт). Для 32-разрядных вызовов защищенного режима все эти же функции вызываются через точку входа, найденную через каталог 32-разрядных сервисов (см. выше), при этом назначение входных и выходных регистров и флага
CF
сохраняется. До использования 32-разрядного интерфейса следует сначала найти его каталог и убедиться в наличии сервисов PCI. Функции PCI BIOS перечислены ниже:
♦
АХ
= B101h — проверка присутствия PCI BIOS. При наличии PCI BIOS возвращает
CF
=0,
АН
=0 и
EDX
=20494350h (строка символов "PCI "); проверяться должны все три признака. При этом в
AL
находится описатель аппаратного механизма доступа к конфигурационному пространству и генерации специальных циклов PCI:
• Бит 0 — поддержка механизма № 1 для доступа к конфигурационному пространству;
• Бит 1 — поддержка механизма № 2 для доступа к конфигурационному пространству;
• Биты 2:3=00 (резерв);
• Бит 4 — поддержка генерации специального цикла по механизму № 1;
• Бит 5 — поддержка генерации специального цикла по механизму № 2;
• Биты 6:7=00 (резерв).
В регистрах
ВН
и
BL
возвращается старший и младший номер версии (BCD-цифры), в
CL
— максимальный номер шины PCI, присутствующий в системе (число шин +1, поскольку они нумеруются с нуля последовательно). В регистре
EDI
может возвращаться линейный адрес точки входа 32-разрядных сервисов BIOS. Этот адрес возвращается не всеми версиями BIOS (некоторые не изменяют
EDI
); для проверки можно при вызове обнулять
EDI
и проверять на нуль возвращенное значение.
♦
АХ
= B102h — поиск устройства по идентификатору. При вызове в
СХ
указывается идентификатор устройства, в
DX
— идентификатор производителя, в
SI
— индекс (порядковый номер) устройства. При успешном возврате в
ВН
— номер шины, в
BL[7:3]
— номер устройства,
BL[2:0]
— номер функции. Для нахождения всех устройств с указанными идентификаторами вызовы выполняют, последовательно инкрементируя