BIOS автоматически обнаруживает только три параллельных порта — с адресами 0378h – 037Ah (LPT1 или LPT2), 0278h – 027Ah (LPT2 или LPT3) и 03BCh – 03BDh (LPT1, если есть) — и записывает номера их базовых портов ввода-вывода в область данных BIOS по адресам 0040h:0008h, 0040h:000Ah, 0040h:000Ch соответственно. Если в системе установлен дополнительный параллельный порт, придется дополнительно записывать его базовый номер в 0040h:000Eh, чтобы BIOS воспринимала его как LPT4. Рассмотрим назначение портов ввода-вывода, управляющих параллельными портами на примере 0278h – 027Ah.
0278h для записи — порт данных. Чтение и запись в этот порт приводят к приему или посылке байта в принтер или другое присоединенное устройство.
0279h для чтения — порт состояния
бит 7: принтер занят, находится в off line или произошла ошибка
бит 6: нет подтверждения (1 — принтер не готов к приему следующего байта)
бит 5: нет бумаги
бит 4: принтер в режиме on line
бит 3: нет ошибок
бит 2: IRQ не произошло
биты 1 – 0: 0
027Ah для чтения и записи — порт управления
бит 5: включить двунаправленный обмен данными (этот режим не поддерживается BIOS)
бит 4: включить генерацию аппаратного прерывания (по сигналу подтверждения)
бит 3: установить принтер в on line
бит 2: 0 в этом бите инициализирует принтер
бит 1: режим посылки символа LF (0Ah) после каждого CR (0Dh)
бит 0: линия STROBE
Чтобы послать байт в принтер, программа должна убедиться, что линия BUSY (бит 7 порта состояния) равна нулю, а линия АСК (бит 6 порта состояния) — единице. Затем надо послать символ на линии DATA (порт данных), не ранее чем через 0,5 мкс установить линию STROBE (бит 0 порта управления) в 0, а затем, не менее чем через 0,5 мкс, — в 1. В отличие от последовательных портов параллельные хорошо поддерживаются BIOS и DOS, так что программирование их на уровне портов ввода-вывода может потребоваться только при написании драйвера для какого-нибудь необычного устройства, подключаемого к параллельному порту, или, например, при написании драйвера принтера для новой операционной системы.