Низкоуровневое програмирование Главная - Реальный режим - Прерывания Bios - INT 1Ah: Ввод/вывод таймера и сервисы PCI BIOS.

INT 1Ah: Ввод/вывод таймера и сервисы PCI BIOS.

Данное прерывание реализует несколько наборов API

Оглавление

API времени

AHФункция
0 Читать кванты времени

Выход:
CX,DX - кол-во квантов времени со времени последней полуночи (CX-старшая часть значения)
AL != 0 - было переполнение таймера

Примечание:
На большинстве систем в секунду умещается 18,2 кванта.
AL устанавливается в 1, если с момента включения уже была полночь, иначе в ноль.
1 Установить кванты времени

Выход:
CX,DX - кол-во квантов времени (CX-старшая часть значения)

Примечание:
На большинстве систем в секунду умещается 18,2 кванта.
Флаг переполнения таймера сбрасывается
2 Читать часы (RTC)

Выход:
CH - Часы в коде BCD
CL - Минуты в коде BCD
DH - Секунды в коде BCD
DL - если 1, то используется перевод времени между летним/зимним, если 0 - то нет.
флаг CF установлен, если часы отключены.

Примечание:
Только AT-совместимые компьютеры
Некоторые БИОСы не сбрасывают флаг CF при удачном выполнении функции, по-этому рекомендуется самостоятельно его збрасывать перед вызовом этой функции.
3 Установить часы (RTC)

Вход:
CH - Часы в коде BCD
CL - Минуты в коде BCD
DH - Секунды в коде BCD
DL - если 1, то используется перевод времени между летним/зимним, если 0 - то нет.

Выход:
AL - значение, записанное в CMOS-регист 0Bh

Примечание:
Только AT-совместимые компьютеры
AH может быть сброшен в ноль.
4 Читать дату (RTC)

Выход:
CH - Столетие в коде BCD
CL - Год в коде BCD
DH - Месяц в коде BCD
DL - День в коде BCD
флаг CF установлен, если часы отключены.

Примечание:
Только AT-совместимые компьютеры
Некоторые БИОСы не сбрасывают флаг CF при удачном выполнении функции, по-этому рекомендуется самостоятельно его збрасывать перед вызовом этой функции.
5 Установить дату (RTC)

Вход:
CH - Столетие в коде BCD
CL - Год в коде BCD
DH - Месяц в коде BCD
DL - День в коде BCD

Выход:
AL - значение, записанное в CMOS-регист 0Bh

Примечание:
Только AT-совместимые компьютеры
AH может быть сброшен в ноль.
6Установить сигнал

Вход:
CH - Часы в коде BCD
CL - Минуты в коде BCD
DH - Секунды в коде BCD
флаг CF установлен, если часы отключены или таймер уже установлен.

Примечание:
Только AT-совместимые компьютеры
В указаное время генерирует прерывание int 4Ah
7 Сбросить сигнал
Только AT-совместимые компьютеры
Отменяет действие функции 6

API PCI BIOS


Этот апи реализуется через функцию B1h, т.е. в AH необходимо передавать значение B1h
Функции того API могут потребовать до 1Кб стека
ALФункция
01Проверить наличие PCI BIOS

Вход:
EDI = 0

Выход:
AH = 0 и флаг переноса сброшен, если PCI BIOS присутствует
AH - код возврата.
EDX = 20494350h
AL - Флаги PCI:
     бит 0 : метод доступа к конфигурации №1 поддерживается
     бит 1 : метод доступа к конфигурации №2 поддерживается
     биты 2-3 : резерв
     бит 4 : механизм генерации специальных циклов №1 поддерживается
     бит 5 : механизм генерации специальных циклов №2 поддерживается
     биты 6-7 : резерв
BH - старший номер версии интерфейса (в формате BCD)
BL - младший номер версии интерфейса (в формате BCD)
CL - номер последней шины PCI
EDI - точка входа 32-х битного интерфейса

Примечание:
Регистры EAX, EBX, ECX и EDX могут быть изменены
Если биос не поддерживает 32-х битную точку входа, то регистр EDI не изменяется.
02Найти устройство по его ID

Вход:
CX - ID устройства
DX - ID изготовителя
SI - номер устройства

Выход:
AH - код возврата.
BH - номер шины
BL - биты 7-3 : номер устройства, биты 2-0: номер функции

Примечание:
Регистры EAX, EBX, ECX и EDX могут быть изменены
SI введён для случая, когда в системе есть несколько одинаковых устойств. Нумерация начинается с нуля. Что бы найти все такие устройства, надо повторять вызовы этой функции, увеличивая SI, пока в AH не будет возвращён код 86h
03Найти устройство по его классу

Вход:
ECX - класс устройства:
     биты 0 - 7 : интерфейс
     биты 15- 8 : подкласс
     биты 23-16 : класс
     биты 31-24 : сброшенны
SI - номер устройства

Выход:
AH - код возврата.
BH - номер шины
BL - биты 7-3 : номер устройства, биты 2-0: номер функции

Примечание:
Регистры EAX, EBX, ECX и EDX могут быть изменены
SI введён для случая, когда в системе есть несколько одинаковых устойств. Нумерация начинается с нуля. Что бы найти все такие устройства, надо повторять вызовы этой функции, увеличивая SI, пока в AH не будет возвращён код 86h
06Сгенерировать специальный цикл шины

Вход:
BH - номер шины
EDX - данные

Выход:
AH - код возврата.

Примечание:
Регистры EAX, EBX, ECX и EDX могут быть изменены
08Прочитать байт конфигурации

Вход:
BH - номер шины
BL - биты 7-3 : номер устройства, биты 2-0: номер функции
DI - смещение

Выход:
AH - код возврата.
CL - считанный байт

Примечание:
Регистры EAX, EBX, ECX и EDX могут быть изменены
Award BIOS 4.51PG (датирован 05/24/96) при номере функции, отличном от нуля всегда возвращает нулевой байт конфигурации равным FFh.
09Прочитать слово конфигурации

Вход:
BH - номер шины
BL - биты 7-3 : номер устройства, биты 2-0: номер функции
DI - смещение

Выход:
AH - код возврата.
CX - считанное слово

Примечание:
Регистры EAX, EBX, ECX и EDX могут быть изменены
DI должно быть чётным
Award BIOS 4.51PG (датирован 05/24/96) при номере функции, отличном от нуля всегда возвращает нулевое слово конфигурации равным FFFFh.
0AhПрочитать двойное слово конфигурации

Вход:
BH - номер шины
BL - биты 7-3 : номер устройства, биты 2-0: номер функции
DI - смещение

Выход:
AH - код возврата.
ECX - считанное двойное слово

Примечание:
Регистры EAX, EBX, ECX и EDX могут быть изменены
DI должно быть кратно 4-м
Award BIOS 4.51PG (датирован 05/24/96) при номере функции, отличном от нуля всегда возвращает нулевое слово конфигурации равным FFFFFFFFh.
0BhЗаписать байт конфигурации

Вход:
BH - номер шины
BL - биты 7-3 : номер устройства, биты 2-0: номер функции
DI - смещение
CL - записываемый байт

Выход:
AH - код возврата.

Примечание:
Регистры EAX, EBX, ECX и EDX могут быть изменены
0ChЗаписать слово конфигурации

Вход:
BH - номер шины
BL - биты 7-3 : номер устройства, биты 2-0: номер функции
DI - смещение
CX - записываемое слово

Выход:
AH - код возврата.

Примечание:
Регистры EAX, EBX, ECX и EDX могут быть изменены
DI должно быть чётным
0DhЗаписать двойное слово конфигурации

Вход:
BH - номер шины
BL - биты 7-3 : номер устройства, биты 2-0: номер функции
DI - смещение
ECX - считанное двойное слово

Выход:
AH - код возврата.

Примечание:
Регистры EAX, EBX, ECX и EDX могут быть изменены
DI должно быть кратно 4-м
0EhПолучить информацию о перенаправлении прерываний PCI

Вход:
BX = 0
DS = Сегмент данных PCI BIOS (стандартное значение - F000h)
ES:EDI - Заголовок таблицы перенаправления прерываний

Выход:
AH - код возврата. Если AH = 59h или 89h, то таблица слишком маленькая, а в слове по адресу ES:DI записан необходимый размер
BX - битовая маска, описывающая, какие IRQ используются исключительно шинами PCI (бит 0 - IRQ 0, ... , бит 15 - IRQ 15)
ES:DI - размер заполненных данных
Таблица перенаправления прерываний заполнена

Примечание:
PCI BIOS версии 2.1 или выше
Заголовок таблицы перенаправления прерываний выглядит следующим образом:
СмещениеРазмерСмысл
00WORDРазмер таблицы перенаправления прерываний в байтах
02DWORDУказатель на таблицу перенаправления прерываний
Таблица перенаправления прерываний является массивом, состоящим из элементов следующего вида:
СмещениеРазмерСмысл
00BYTEномер шины
01BYTEбиты 7-3: номер устройства
02BYTEлиния сигнала INTA#
03WORDбитовая маска сопоставления сигнала INTA# и номера IRQ
05BYTEлиния сигнала INTB#
06WORDбитовая маска сопоставления сигнала INTB# и номера IRQ
08BYTEлиния сигнала INTC#
09WORDбитовая маска сопоставления сигнала INTC# и номера IRQ
0BhBYTEлиния сигнала INTD#
0ChWORDбитовая маска сопоставления сигнала INTD# и номера IRQ
0EhBYTEНомер слота (00 - материнская плата)
0FhBYTEрезерв
0FhУстановить IRQ

Вход:
BH - номер шины
BL - биты 7-3 : номер устройства, биты 2-0: номер функции
CL - изменяемый сигнал ( 0Ah - сигнал INTA#, ... , 0Dh - сигнал INTD#)
CH - новый номер IRQ
DS = Сегмент данных PCI BIOS (стандартное значение - F000h)

Выход:
AH - код возврата.

Примечание:
PCI BIOS версии 2.1 или выше
Эта функция исходит из того, что вызвавшая её программа проверила отсутствие конфликтов через таблицу перенаправления прерываний, и изменяет номер прерывания для всех устройств, использующих ту же линию, которую использует это устройство для указанного сигнала

Коды возврата PCI BIOS
КодЗначение
00Успешно
81hНеизвестная функция
83hНеправильный Vendor ID
86hУстройство не найдено
87hНеправильный номер регистра PCI
88hНеудалось задать новое значение
89hБуфер слишком маленький