Интерфейсы ПК

       

Функции 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 является удобным способом внедрения собственных драйверов принтера. Потребность в них может возникать при подключении к порту принтера с интерфейсов ИРПР или необходимости перекодировки сим- волов.



Содержание раздела