IBM PC выполняет процедуру самопроверки после каждого сброса системы, включая момент, когда появляется питание. Такая проверка преследует две цели: она выполняет быструю проверку основных элементов системы и инициализирует основные аппаратные компоненты.
Способ запуска процедуры POST также объясняет, почему фирма IBM расположила ПЗУ в верхних адресах памяти. Именно здесь микропроцессор начинает выполнение программы после сброса. Системное ПЗУ, содержащее программу инициализации машины, должно иметь некоторую информацию по адресу 0FFFFH:0000H. Так что есть смысл помещать все ПЗУ в конце памяти. Также, есть смысл поместить ОЗУ в нижних адресах, оставив в нем векторы прерываний. Возможность модификации кодов в этих векторах в большой степени увеличивает универсальность программы BIOS.
Вообще процедура POST состоит из неинтересных кодов. Многие последовательности команд не имеют никакого смысла. Если вы посмотрите на начальную последовательность команд, то увидите, что они не делают ничего - если с микропроцессором ничего не случилось. Если вас не интересует написание диагностических программ нет смысла изучать технику процедуры POST. Отметим некоторые действия процедуры POST, чтобы показать область проверки ошибок. Процедура POST проверяет все ПЗУ системной платы, считая контрольную сумму. Этот тест складывает все байты модулей ПЗУ. При сложении перенос из 8-битового результата игнорируется. Если окончательный результат нулевой, ПЗУ прошло проверку. Конечно, перед тем, как запустить ПЗУ в серию, фирма IBM обеспечила, чтобы сумма каждого ПЗУ была равна нулю. Если ПЗУ плохое, этот тест находит ошибку.
Процедура POST также проверяет всю оперативную память в системе. Переключатели не системной плате сообщают процедуре POST, сколько у системы есть памяти в наличии. Каждый бит памяти проверяется, может ли он быть установлен в единицу и сброшен в нуль. По окончании теста процедура POST записывает нули по всем адресам памяти. Это означает, что если вы написали программу, которая будет работать сразу же после процедуры POST, содержимое всей памяти окажется нулевым. Но надеяться, что некоторая другая программа инициализирует поля данных вашей программы - плохой стиль программирования. чтобы быть в этом уверенным, лучше делать это самому.
Последнее, что можно сказать про процедуру POST - то, что она
Аппаратные прерывания---------------------------------------------------------
Номер
прерывания Использование в ROM BIOS
---------------------------------------------------------
2 02H Ошибка четности в памяти
5 05H Печать экрана
8 08H Текущее время
9 09H Клавиатура
14 OEH Дискета
Драйверы BIOS
---------------------------------------------------------
Номер
прерывания Использование в ROM BIOS
---------------------------------------------------------
16 10H Видео
17 11H Проверка оборудования
18 12H Размер памяти
19 13H Дискета
20 14H Асинхронные
21 15H Кассета стриммера
22 16H Клавиатура
23 17H Принтер
24 18H Точка входа Бэйсика для кассеты
25 19H Точка входа в процедуру первичной
загрузки
26 1AH Текущее время
---------------------------------------------------------
Процедуры управляемые пользователем
---------------------------------------------------------
Номер
прерывания Использование в ROM BIOS
---------------------------------------------------------
27 1BH Прерывание клавиатуры
28 1CH Квантование времени
Блоки параметров BIOS
---------------------------------------------------------
Номер
прерывания Использование в ROM BIOS
---------------------------------------------------------
29 1DH Параметры видеомонитора
30 1EH Параметры дисковода
31 1FH Графические символы видеомонитора
---------------------------------------------------------
Фиг. 9.1 Векторы прерываний, используемые ROM BIOS инициализирует векторы прерываний для BIOS. Программы получают доступ к BIOS с помощью векторов прерывания. Сами по себе эти подпрограммы находятся в модуле ПЗУ, в том же, что и процедура POST. Перед тем, как процедура POST передаст управление операционной системе, она делает так, чтобы каждая входная точка BIOS была записана в соответствующий вектор прерывания. BIOS использует векторы прерываний для прерываний от 2 до 01FH. Техническое описание содержит листинг векторов прерывания, в котором показаны номера прерываний и первоначальное содержимое векторов. На Фиг.9.1 изображена часть этой таблицы, которая будет использоваться в описании BIOS.