5.10.3. Параллельный порт

BIOS автоматически обнаруживает только три параллельных порта - с адреса­ми 0378h - 037Ah (LPT1 или LPT2), 0278h - 027Ah (LPT2 или LPT3) и ОЗВСЪ -03BFh (LPT1, если есть) - и записывает номера их базовых портов ввода-вывода в область данных BIOS по адресам 0040h:0008h, 0040h:OOOAh, 0040h:000Ch соот­ветственно. Если в системе установлен еще один параллельный порт, придется до­полнительно записывать его базовый номер в 0040h:OOOEh, чтобы BIOS восприни­мала его как LPT4. Рассмотрим назначение портов ввода-вывода, управляющих параллельными портами на примере 0278h -

для записи - порт данных. Чтение и запись в этот порт приводят к приему или отправке байта в принтер или другое присоединенное устройство. 0279h для чтения - порт состояния

бит 7: принтер занят, находится в offline или произошла ошибка

бит б: нет подтверждения (1 - принтер не готов к приему следующего байта)

бит 5: нет бумаги

бит 4: принтер в режиме online

бит З: нет ошибок

бит 2: IRQ не произошло

биты 1-0: О

для чтения и записи - порт управления

бит 5: включить двунаправленный обмен данными (этот режим не поддержи­вается BIOS)

бит 4: включить генерацию аппаратного прерывания (по сигналу подтверждения)

бит З: установить принтер в online

бит 2: 0 в этом бите инициализирует принтер

бит 1: режим посылки символа LF (OAh) после каждого CR (ODh)

бит 0: линия STROBE

Чтобы послать байт в принтер, программа должна убедиться, что линия BUSY

(бит 7 порта состояния) равна нулю, а линия ACK (бит б порта состояния) - еди­нице. Затем надо послать символ на линии DATA (порт данных), не ранее чем через 0,5 мкс установить линию STROBE (бит 0 порта управления) в 0, а затем, не менее чем через 0,5 мкс, - в 1. В отличие от последовательных портов, парал­лельные хорошо поддерживаются BIOS и DOS, так что программирование их на уровне портов ввода-вывода может потребоваться только при написании драйве­ра для какого-нибудь необычного устройства, подключаемого к параллельному порту, или, например, при написании драйвера принтера для новой операцион­ной системы.