Параллельные порты используются в первую очередь для подключения принтеров, хотя встречаются и другие устройства, например переносные жесткие диски, которые могут подключаться к этим портам. Базовые средства DOS и BIOS для работы с параллельными портами аналогичны соответствующим средствам для работы с последовательными портами: DOS инициализирует стандартное устройство PRN, соответствующее первому порту LPT1, которое может быть переопределено командой MODE, и предоставляет прерывание для вывода в это устройство.
Функция DOS 05h — Вывод символа в стандартное устройство PRN
Ввод: | АН = 05h DL = символ |
Кроме того, можно пользоваться функцией записи в файл или устройство, поместив в ВХ число 4, соответствующее устройству PRN. BIOS, в свою очередь, предоставляет базовый набор из трех функций для работы с принтером.
INT 17h, АН = 00 — Вывести символ в принтер
Ввод: | АН = 00h AL = символ DX = номер параллельного порта (00 — LPT1, 01 — LPT2, 02 — LPT3) |
Вывод: | АН = состояние принтера: бит 7: принтер не занят бит 6: подтверждение бит 5: нет бумаги бит 4: принтер в состоянии on-line бит 3: ошибка ввода-вывода бит 0: тайм-аут |
INT 17h, АН = 01 — Выполнить аппаратный сброс принтера
Ввод: | АН = 01h DX = номер порта (00h — 02h) |
Вывод: | АН = состояние принтера |
INT 17h, AH = 02 — Получить состояние принтера
Ввод: | АН = 02h DX = номер порта (00h – 02h) |
Вывод: | АН = состояние принтера |
Например, чтобы распечатать содержимое экрана на принтере, можно написать такую программу:
; prtscr.asm ; распечатать содержимое экрана на принтере ; .model tiny .code .186 ; для команды push 0B800h org 100h ; начало СОМ-файла start: mov ah,1 mov dx,0 ; порт LPT1 int 17h ; инициализировать принтер, cmp ah,90h ; если принтер не готов, jne printer_error ; выдать сообщение об ошибке, push 0B800h ; иначе: pop ds ; DS = сегмент видеопамяти в текстовом режиме xor si,si ; SI = 0 mov cx,80*40 ; CX = число символов на экране cld ; строковые операции вперед main_loop: lodsw ; AL - символ, АН - атрибут, SI = SI + 2 mov ah,0 ; АН - номер функции int 17h ; вывод символа из AL на принтер loop main_loop ret ; закончить программу
printer_error: mov dx,offset msg ; адрес сообщения об ошибке в DS:DX mov ah,9 int 21h ; вывод строки на экран ret
msg db "Принтер на LPT1 находится в состоянии offline или занят$" end start
Чтобы распечатать экран в текстовом режиме на LPT1, достаточно всего лишь одной команды INT 05h, что в точности эквивалентно нажатию клавиши PrtScr.