Функции BIOS для LPT-порта
1.3.4. Функции BIOS для LPT-порта
BIOS обеспечивает поддержку LPT-порта, необходимую для организации вывода по интерфейсу Centronics.
В процессе начального тестирования POST BIOS проверяет наличие параллельных портов по адресам 3BCh, 378h и 278h и помещает базовые адреса обнаруженных портов в ячейки BIOS Data Area 0:0408h, 040Ah, 040Ch, 040Eh. Эти ячейки хранят адреса портов LPT1-LPT4, нулевое значение адреса является признаком отсутствия порта с данным номером. В ячейки 0:0478, 0479, 047А, 047В заносятся константы, зада- ющие тайм-аут для этих портов.
Поиск портов обычно ведется достаточно примитивно - по базовому адресу (в регистр данных предполагаемого порта) выводится тестовый байт (ААЬ или 55h), затем производит- ся ввод по тому же адресу. Если считанный байт совпал с записанным, предполагается, что найден LPT-порт; его ад- рес помещается в ячейку BIOS Data Area. Базовые адреса пор- тов могут быть впоследствии изменены программно. Адрес порта LPT4 BIOS самостоятельно установить не может, по- скольку в списке стандартных адресов поиска имеются толь- / ко три указанных.
Обнаруженные порты инициализируются - записью в ре- гистр управления формируется и снимается сигнал lnit#, после чего записывается значение OCh, соответствующее ис- ходному состоянию сигналов интерфейса. В некоторых слу- чаях сигнал lnit# активен с момента аппаратного сброса до инициализации порта во время загрузки ОС. Это можно за-
метить по поведению включенного принтера во время пере- загрузки компьютера - у принтера надолго гаснет индика- тор On-Line. Следствие этого явления - невозможность рас- печатки экранов (например, параметров BIOS Setup) no клавише Print Screen до загрузки ОС.
Программное прерывание BIOS INT 17h обеспечивает следу- ющие функции поддержки LPT-порта:
is OOh - вывод символа из регистра AL по протоколу Centronics (без аппаратных прерываний). Данные поме- щаются в выходной регистр, и, дождавшись готовности принтера (снятия сигнала Busy), формируется строб.
sa Olh - инициализация интерфейса и принтера (установка исходных уровней управляющих сигналов, формирова- ние импульса lnit#, запрет аппаратных прерываний и пе- реключение на вывод двунаправленного интерфейса).
02h - опрос состояния принтера (чтение регистра состо- яния порта).
При вызове INT 17h номер функции задается в регистре АН, номер порта - в регистре DX(Q - LPT1, 1 - LPT2...). При воз- врате регистр АН содержит код состояния - биты регистра состояния SR[7:3] (биты 6 и 3 инвертированы) и флаг тайм- аута в бите 0. Флаг тайм-аута устанавливается при неудач- ной попытке вывода символа, если сигнал Busy не снимает- ся в течение времени, определенного для данного порта в ячейках тайм-аута. В этом случае, согласно протоколу Centronics, строб данных не вырабатывается.
Перехват прерывания INT 17h является удобным способом внедрения собственных драйверов принтера. Потребность в них может возникать при подключении к порту принтера с интерфейсов ИРПР или необходимости перекодировки сим- волов.