Функции BIOS для LPT-порта

в начало

BIOS обеспечивает поддержку LPT-порта, необходимую для организации вывода по интерфейсу Centronics.

В процессе начального тестирования POST BIOS проверяет наличие параллельных портов по адресам ЗВСh, 378h и 278h и помещает базовые адреса обнаруженных портов в ячейки BIOS DATA AREA 0:0408h, 040Ah, 040Сh, 040eh. Эти ячейки хранят адреса портов с логическими именами LPT1-LPT4, нулевое значение адреса является признаком отсутствия порта с данным номером. В ячейки 0:0478, 0479, 047А, 047В заносятся константы, задающие выдержку тайм-аута для этих портов.

Поиск портов обычно ведется достаточно примитивно – по базовому адресу (в порт данных предполагаемого порта) выводится тестовый байт (ААh или 55h), затем производится ввод по тому же адресу. Если считанный байт совпал с записанным, считается, что найден LPT-порт, и его адрес помещают в ячейку BIOS DATA AREA. Базовые адреса портов могут быть впоследствии изменены программно. Адрес порта LPT4 BIOS самостоятельно установить не может, поскольку в списке стандартных адресов поиска имеются только три вышеуказанных.

Обнаруженные порты инициализируются – записью в регистр управления формируется и снимается сигнал Init#, после чего записывается значение ОСh, соответствующее исходному состоянию сигналов интерфейса. В некоторых случаях сигнал Init# активен с момента аппаратного сброса до инициализации порта во время загрузки ОС. Это можно заметить по поведению включенного принтера во время перезагрузки компьютера по включении или нажатии кнопки REET – у принтера надолго гаснет индикатор ON-Line. Следствие этого явления – невозможность распечатки экранов (например, параметров BIOS Setup) по клавише Print Screen до загрузки ОС.

Программное прерывание BIOS INT 17h обеспечивает следующие функции поддержки LPT-порта:

- 00h – вывод символа из регистра АL по протоколу Centronics (без аппаратных прерываний). Данные помещаются в выходной регистр, и, дождав­шись готовности принтера (снятия сигнала BUSY), формируется строб;

- 01h – инициализация интерфейса и принтера (установка исходных уровней управляющих сигналов, формирование импульса Init#, запрет аппаратных прерываний и переключение на вывод двунаправленного интерфейса);

- 02h – опрос состояния принтера (чтение регистра состояния порта).

При вызове INT 17h номер функции задается в регистре АН, номер порта – в регистре DX (0 – LPT1, 1 – LPT2,..). При возврате после любой функции регистр АН содержит кой состояния – биты регистра состояния SR[7:3] (биты 6 и 3 инвертированы) и флаг тайм-аута в бите 0. Флаг тайм-аута устанавливается при неудачной попытке вывода символа, если сигнал BUSY не снимается в тече­ние времени, определяемого для данного порта содержимым ячеек 0:0478, 0479, 047А, 047В BIOS DATA AREA. В этом случае, согласно протоколу Centronics, строб данных не вырабатывается.