|
Инициализация
После включения
питания или нажатия кнопки Reset у компьютера на адресной шине системной платы
аппаратно устанавливается адрес точки входа в программу BIOS, которая в момент
старта находится в самых старших ячейках адресуемой памяти. Например, в процессорах
8086/8088 по возникновении сигнала RESET прекращаются все текущие процедуры,
а по окончании действия этого сигнала управление передается инструкции по адресу
0FFFF0h, в процессорах 386 — по адресу OFFFFFFOh и т. д.
Следует заметить,
что первоначальный адрес загрузки искусственно формируется чипсетом системной
платы, который принудительно устанавливает все адресные линии, кроме первых
четырех, в единичное состояние. После передачи управления BIOS точка входа становится
доступной по стандартному адресу 0FFFF0h, где ею может воспользоваться любая
программа.
Раскроем смысл
вышесказанного - разработчики IBM PC совместимых компьютеров всегда вынуждены
оглядываться на самый первый персональный компьютер IBM PC. В нем стандартное
место BIOS, как и у всех остальных потомков, находится в области по адресам
от 0F0000h до 0FFFFFh. Соответственно, приходится вынужденно создавать условия,
чтобы образ BIOS отображался в двух местах — в стандартном для IBM PC и в конце
возможной физической памяти. (В ряде BIOS имеется возможность указать, что он
находится под границей 16 Мбайт, что приводит к невозможности использования
более 16 Мбайт ОЗУ.)
Сама точка
входа представляет собой занимающую пять ячеек памяти (один байт — команда и
4 байта — адрес) команду дальнего безусловного перехода (JMP-адрес) на подпрограмму
начального запуска компьютера.
Кроме стандартной
точки старта системы, в BIOS определено еще несколько ячеек памяти, в которых
всегда записывается вполне определенная информация. Из них наиболее
важные ячейки находятся в самом начале и конце BIOS — признаки корректных данных
в ПЗУ. В начале идут два байта с содержимым 55AAh, а в конце — число 0, которое
должно получиться, если сложить значения всех байтов в ПЗУ (по модулю 256).
Точно такими же признаками должны обладать и другие ПЗУ, которые могут быть
установлены на платах расширения, например, видеоадаптера и сетевой платы.
Примечание
В персональных
компьютерах с процессорами х86 принято, что данные из памяти читаются словами
длиною два байта, причем первый байт — это младшая часть 16-разрядного слова,
а второй байт — его старшая часть. То есть ячейки чередуются как 2, 1, 4, 3
и т. д. При этом следует помнить, что программисты стараются выравнивать данные
и код по четным адресам, по границе 16-байтных параграфов и 64-килобайтных сегментов,
что позволяет ускорить работу программ. Конечно, всегда можно прочитать или
записать одиночный байт или бит, но этот режим не является оптимальным для процессора,
памяти и чипсета. Заметим, что другие процессоры не придерживаются такого способа
адресации.
Например,
после начала работы программ BIOS проверяется наличие ПЗУ видеоадаптера (установлен
ли видеоадаптер), и, если оно есть, управление передается программе, записанной
в нем. После инициализации видеоподсистемы управление вновь возвращается программам
BIOS. При наличии ПЗУ на сетевой плате дисковой станции после отработки всех
стартовых программ управление передается программе, записанной в этом ПЗУ. Причем
присутствие ПЗУ и возможность передачи управления проверяются по первым двум
байтам и нулевой контрольной сумме.
Примечание
Стандартная
статическая память CMOS имеет 64 регистра, к которым обращаются по адресам ввода/вывода
от 0 до 3Fh. При выключении питания ячейки
памяти питаются от батареи напряжением 3 В, которая установлена на системной
плате. В CMOS хранится конфигурация компьютера и текущее системное время.
Так как микросхемы
постоянной памяти, которые предназначены для хранения кода BIOS, отличаются
неторопливостью, то для увеличения быстродействия компьютера пользователь может
разрешить использование теневой памяти (Shadow RAM) — при этом код BIOS переписывается
в ОЗУ, и все последующие обращения к микросхеме BIOS перенаправляются к соответствующей
области ОЗУ (для программ адреса ячеек памяти в BIOS остаются неизменными, но
сам код перемещается за пределы 1 Мбайт).
Фиксированные ячейки BIOS
|
|
|
|
|
|
|
|
|
|
|
|
|
55h, признак
ПЗУ AAh, признак ПЗУ
|
|
|
|
|
команда перехода
на POST по сбросу — FAR JMP
|
|
|
|
|
Дата выпуска
BIOS, например "08/01/95"
|
|
|
|
|
Тип компьютера
(OFFh — для оригинального PC, 0FEh - XT, 0FCh - AT)
|
|
|
|
|
Дополнение до
0 контрольной суммы BIOS
|
|
|
|
|
|
|
|
|