Сделай Сам Свою Работу на 5

Int 1Ah и Int 15h—поддержка таймеров





Сервисы BIOS Int I Ah позволяют считывать и модифицировать значения систем­ного таймера, даты и времени, а также установки будильника часов реального вре­мени CMOS RTC. Перечисленные ниже номера функций указываются при вызо­ве в регистре АН.

1. АН=0 — чтение системного таймера (двойного слова по адресу 40:006Eh в BIOS Data Area, инкрементируемого по прерываниям от канала 0 счетчика-таймера 8253/8254 примерно раз в 55 мс. Таймер обнуляется при выполнении тестаPOST после аппаратного сброса). Возвращает значение таймера, в СХ — стар­шую часть, в DX — младшую. А1_=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.


12.8. Сервисы и прерывания BIOS______________________________________ 495

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:ООАО. Таймер может оказаться заня­тым, тогда вызов сразу возвратит флаг CF=1 (при успехе CF=0, а в AL окажется маска, записанная в 8259А#2).

10. AX=8300h — запуск таймера, устанавливающего флаг после указанной задерж­ке бит 7 в ячейке, заданной регистрами ES: ВХ. При успешном запуске CF=0; если таймер занят (он один) — CF=1 и AL=0. Управление возвращается про­цессу сразу, а флаг будет установлен через заданное время. Перед завершени­ем программа, запускавшая таймер, должна его сбросить функцией 830 lh (во-первых, чтобы освободить; во-вторых, чтобы снять «адскую машинку», которая неожиданно сама может изменить значение ячейки памяти, вполне возможно уже задействованную другим, ничего не «подозревающим» процессом).

И. AX=8301h —сброс того же таймера.

PCI BIOS

Функции PCI BIOS используются только для поиска и конфигурирования уст­ройств PCI — процедур, требующих доступа к их конфигурационному простран­ству (см. п. 8.2). Регулярная работа с этими устройствами выполняется через об­ращения к регистрам устройств по адресам, полученным при конфигурировании, и обработке известных номеров прерываний от этих устройств. Для 16-битного интерфейса реального режима, V86 и 16-битного реального режима, функции PCI BIOS вызываются через прерывание Int lAh; номер функции задается при вызо­ве в регистре АХ. Возможна и программная имитация прерывания дальним вызо-




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

вом по физическому адресу OOOFFE6EH (стандартная точка входа в обработчик Int lAh) с предварительным занесением в стек регистра флагов.

Признаком нормального выполнения является CF=0 и АН=0; при CF-1 АН содер­жит код ошибки:

♦ 81h — неподдерживаемая функция;

♦ 83h — неправильный идентификатор производителя;

♦ 86h — устройство не найдено;

♦ 87h — неправильный номер регистра PCI.

Вызовы требуют глубокого стека (до 1024 байт). Для 32-разрядных вызовов защи­щенного режима все эти же функции вызываются через точку входа, найденную через каталог 32-разрядных сервисов (см. выше), при этом назначение входных и выходных регистров и флага CF сохраняется. До использования 32-разрядного интерфейса следует сначала найти его каталог и убедиться в наличии сервисов PCI. Функции PCI BIOS перечислены ниже:

♦ АХ - В101Н проверка присутствия 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 и проверять на нуль возвращенное значение.

АХ = В102Н — поиск устройства по идентификатору. При вызове в СХ указыва­ется идентификатор устройства, в DX — идентификатор производителя, в SI —индекс (порядковый номер) устройства. При успешном возврате в ВН — номер шины, в BL[7:3] — номер устройства, BL[2:0] — номер функции. Для нахожде­ния всех устройств с указанными идентификаторами вызовы выполняют, по­следовательно инкрементируя SI от 0 до получения кода возврата 86h.


12.9. Расширения ROM BIOS__________________________________________ 497

♦ AX = B103h поиск устройства по коду класса. При вызове в ЕСХ[23:16] указы­вается код класса, в ЕСХ[15:8] — подкласса, в ЕСХ[7:0] — интерфейс, в SI — ин­декс устройства (аналогично предыдущему). При успешном возврате в ВН —номер шины, в BL[7:3] — номер устройства, BL[2:0] — номер функции.

♦ АХ - B106h генерация специального цикла PCI. При вызове в BL указывается номер шины, в EDX — данные специального цикла.

♦ АХ = В108h чтение байта конфигурационного пространства устройства PCI. При вызове в ВН — номер шины, в BL[7:3] — номер устройства, BL[2:0] — номер функции, в DI — номер регистра (О-FFh). При успешном возврате в CL — счи­танный байт.

♦ АХ = B109h чтение слова конфигурационного пространства устройства PCI. При вызове в ВН — номер шины, в BL[7:3] — номер устройства, BL[2:0] — номер функции, в DI — номер регистра (О-FFh, четный). При успешном возврате в СХ — считанное слово.

♦ АХ = В10Ah чтение двойного слова конфигурационного пространства устройства PCI. При вызове в ВН — номер шины, в BL[7:3] — номер устройства, BL[2:0] — номер функции, в DI — номер регистра (О-FFh, кратный 4). При ус­пешном возврате в ЕСХ — считанное двойное слово.

♦ АХ = В 10Bh запись байта конфигурационного пространства устройства PCI. При вызове в ВН — номер шины, в BL[7:3] — номер устройства, BL[2:0] — номер функции, в DI — номер регистра (О-FFh), в CL — записываемый байт.

♦ АХ = В10СН запись слова конфигурацгЛрнного пространства устройства PCI. При вызове в ВН — номер шины, в BL[7:3] — номер устройства, BL[2:0] — номер функции, в DI — номер регистра (О-FFh, четный), в СХ — записываемое слово.

♦ АХ = BWAh запись двойного слова конфигурационного пространства устрой­ства PCI. При вызове в ВН — номер шины, в BL[7:3] — номер устройства, BL[2:0] — номер функции, в DI — номер регистра (О-FFh, кратный 4), в ЕСХ — записываемое двойное слово.

Расширения ROM BIOS

В микросхеме ROM BIOS, установленной на системной плате, поддерживаются только стандартные (по назначению и реализации) устройства. При необходимости дополнительные устройства, устанавливаемые в слоты шин расширения (ISA, PCI, PCMCIA), могут иметь микросхемы ПЗУ своей программной поддержки — Add­itional ROM BIOS (дополнительные модули ROM BIOS), они же Expansion ROM. Эта необходимость возникает, когда программная поддержка устройств требуется до загрузки ОС и прикладного ПО. В таком модуле может содержаться и вся програм­ма функционирования специализированного бездискового контроллера на базе PC. Расширения ROM BIOS используют графические адаптеры EGA/VGA/SVGA, некоторые контроллеры жестких дисков, контроллеры SCSI, сетевые адаптеры с уда­ленной загрузкой и другие периферийные устройства. Для модулей расширения устройств с шиной ISA в пространстве памяти зарезервирована область CSOOOh-


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

F4000h. POST сканирует эту область с шагом 2 Кбайт в поисках дополнительных модулей BIOS на завершающем этапе выполнения (после загрузки векторов преры­ваний указателями на собственные обработчики). Дополнительный модуль BIOS графического адаптера (EGA, VGA, SVGA...) имеет фиксированный адрес СОООО и инициализируется раньше (на шаге инициализации видеоадаптера). Устройства с шиной PCI в своем конфигурационном пространстве содержат лишь признак ис­пользования модуля расширения, а его приписку к адресам памяти назначает POST,

Дополнительный модуль ROM BIOS должен иметь заголовок, выровненный по границе 2-килобайтной страницы памяти, формат заголовка ПЗУ иллюстрирует табл. 12.8.

Таблица 12.8.Заголовок модуля дополнительного ПЗУ Смещение Длина Назначение

6-17h  
18h

Сигнатура (признак начала модуля): байт 0=55h, байт1=ААп

Длина, указанная в блоках по 512 байт

Точка входа процедуры инициализации, заканчивающейся дальним возвратом Ret Far (вызывается инструкцией Far Call во время POST). Обычно здесь располагается трехбайтная инструкция JMP, указывающая на начало процедуры

Резерв

Указатель на структуру данных PCI (только для карт PCI), см. ниже п. 12.9.1

1Ah 2 Указатель на структуру расширенного заголовка карт ISA PnP, см. ниже

п. 12.9.2

В традиционном заголовке присутствовали только первые 3 поля, указатели на структуры PCI и ISA PnP ввели позже. Корректным считается модуль, начина­ющийся с признака АА55Н (значения слова с учетом порядка байтов) и нулевой суммой (по модулю 256) всех байтов в объявленной области (реальная длина мо­дуля может превышать объявленную, но байт контрольной суммы, естественно, должен входить в объявленную область).

В случае обнаружения корректного модуля POST дальним вызовом (Call Far) вызывает процедуру инициализации модуля, начинающуюся с 3-го адреса заго­ловка модуля. Ответственность за ее корректность полностью ложится на разра­ботчика. Процедура может переопределять векторы прерываний, обслуживаемых BIOS. Переопределив на себя Bootstrap (Int 19h), можно получить управление при загрузке, что и используется, например, для удаленной загрузки компьютеров через локальную сеть (Remote Boot Reset). Если стандартное продолжение проце­дуры загрузки не требуется, а дополнительный модуль представляет собой( напри­мер, управляющую программу для какого-либо оборудования, вместо процедуры инициализации в ПЗУ может находиться и основная программа, не возвраща­ющая управление системной последовательности POST.

Процедура инициализации и программная поддержка устройства в ПЗУ должны быть написаны таким образом, чтобы им были безразличны абсолютные адреса,


12.9. Расширения ROM BIOS__________________________________________ 499

по которым они размещаются в пространстве памяти. На картах расширения, как правило, имеются аппаратные средства изменения базового адреса, а иногда и раз­мера ПЗУ (джамперы или программно-управляемые переключатели). Это позво­ляет бесконфликтно разместить модули ПЗУ нескольких установленных карт. По сравнению с традиционным способом использования ПЗУ, когда оно, будучи разрешенным, постоянно присутствует в области памяти, имеется более рацио­нальный способ подключения расширений ROM BIOS, основанный на модели DDIM (Device Driver Initialization Model — модель инициализации драйвера устройств). POST определяет наличие ПЗУ по найденному заголовку и копирует его содержимое (по объявленной длине) в свободное пространство верхней памя­ти (ОЗУ), оставляя разрешенной запись в эту область. Далее в этой копии (в ОЗУ) вызывается процедура инициализации (по адресу 3). Эта процедура, написанная в соответствии с моделью DDIM, должна определить, каким образом ее запусти­ли: традиционным (в ПЗУ) или в соответствии с DDIM (в ОЗУ). Определить это она может просто — попыткой модификации области ее «тела», которая в ПЗУ, естественно, не приведет к изменению содержимого памяти. Обнаружив режим DDIM (память модифицируема), процедура выполняет все необходимые дей­ствия по инициализации. Далее она определяет, какую часть копии (начиная от начала заголовка) требуется оставить в памяти на время загрузки и регулярной работы системы, отсекая не нужное в дальнейшем тело процедуры инициализа­ции. Попутно она может в оставляемом модуле установить какие-либо парамет­ры, требуемые для работы драйвера устройства. Наконец, она модифицирует поле длины в заголовке и контрольную сумму так, чтобы фрагмент модуля оставался корректным, и дальним возвратом отдает управление тесту POST. Теперь POST снова анализирует заголовок (но уже копии в ОЗУ) и запрещает запись в область ОЗУ (страницу с размером, кратным 4 К), которую «попросила» оставить проце­дура инициализации. Далее POST, по возможности, запрещает работу (отобра­жение в область UMA) исходного модуля ПЗУ и продолжает свой путь к вызову процедуры начальной загрузки. Основное преимущество данного метода — возмож­ность более рационального использования памяти в UMA (обычные ПЗУ «висят» в ней в полном объеме, невзирая на реальные потребности). Второе преимущество — возможность сохранения параметров, вычисляемых процедурой инициализации (она может задействовать параметры, полученные в процессе выполнения теста POST), в «замораживаемой» области памяти. Кроме того, как правило, медленные микросхемы ПЗУ на все время исполнения подменяются быстрым системным ОЗУ (не используя впрямую механизма теневой памяти). Процедура инициализа­ции ПЗУ карт ISA с моделью DDIM должна проверять окружение, в котором она работает (см. выше); безусловная работа DDIM гарантируется только для карт PGI.

Для более эффективной работы DDIM желательно использовать не только стан­дартную, но и расширенную память (за пределами первого мегабайта), в то время как POST работает в реальном режиме процессора. Решить эту проблему помога­ет режим «Big Real Mode», который поддерживают все 32-разрядные процессоры (см. п. 12.3.1). Специально для предоставления доступа ко всей памяти процеду­рами инициализации фирмы Phoenics и Intel разработали спецификацию РММ


500 Глава 12. Архитектурные компоненты 'ВМ PC-совместимого компьютера

(POST Memory Manager Specification), версия 1.01 была опубликована в конце 1997 г. Эта спецификация определяет несколько дополнительных сервисов BIOS, позволяющих выделять, находить и освобождать блоки в любой, в том числе и рас­ширенной памяти. Клиенты этого сервиса запрашивают блок памяти требуемого размера, a BIOS возвращает физический 32-разрядный адрес начала выделяемого блока (если она способна его выделить). Клиент помечает свой блок 32-битным индексом (handle), по которому его в дальнейшем можно найти функцией поиска. Анонимный блок (индекс FFFFFFFFh) поиску не поддается. Этими сервисами можно пользоваться только до начала процедуры начальной загрузки (Int 19h), работу с вентилем Gate A20 они берут на себя. Перед начальной загрузкой BIOS освобождает и обнуляет все блоки расширенной памяти, занятые с помощью этих сервисов. Сервисами РММ могут пользоваться процедуры инициализации карт расширения, атаюке процедуры BCV, описанные в заголовке ПЗУ карт PnP (см. ниже). Процедуры, на которые указывает BEV, ими пользоваться не могут, поскольку вызы­ваются после входа Bint 19h. Наличие сервисов РММ определяется по контрольной структуре, начинающейся со строки-сигнатуры $РММ и расположенной на границе параграфа в области EOOOO-FFFFOh. Программный интерфейс можно найти в вы­шеуказанном документе, который доступен на сайте http://www.phoenix.com/techs.

ROM BIOS карт ISA PnP

Для поддержки технологии PnP и расширения возможностей управления началь­ной загрузкой в спецификации PnP BIOS ввели дополнительный указатель на структуру расширенного заголовка (Expansion Header Structure). Расширенный заголовок имеет формат, приведенный в табл. 12.9. В одном ПЗУ может находить­ся несколько расширенных заголовков (это требуется для многофункциональных карт расширения), связанных в цепочку. В каждом расширенном заголовке может указываться смещение следующего заголовка относительно начала стандартного заголовка. Наличие и действительность расширенного заголовка проверяется по его сигнатуре и контрольной сумме. Сумма всех байтов расширенного заголовка, включая байт контрольной суммы, должна быть нулевой.

Таблица 12.9.Расширенный заголовок ROM BIOS карт ISA PnP

 

Смещение Длина Назначение
Oh 4 байта Сигнатура, строка $PnP (символы ASCII)
04h байт Версия структуры (01 h)
05h байт Длина (в параграфах по 16 байт)
06h слово Смещение следующего заголовка (OOOOh, если нет больше)
08h байт Резерв(0)
09h байт Контрольная сумма
OAh двойное слово Идентификатор устройства PnP
OEh слово Указатель на строку идентификатора производителя (0, если нет)
10h слово Указатель на строку названия продукта (0, если нет)
12h Збайт Код типа устройства

12.9. Расширения ROM BIOS__________________________________________ 501

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.