Меню сайта

Урок 143. Адаптер параллельного принтера

Чтобы подключить печатающее устройствофирмы IBM или любое другое,
— — — которое подключается через параллельныйинтерфейса, вам нужен
— — — адаптер параллельного печатающегоустройства (принтера). Этот
— — — адаптер встроен в адаптер монохромногодисплея и принтера. Если вы
— — — используете адаптер цветного графическогомонитора, то нужен
— — — отдельный адаптер принтера. С точки зренияинтерфейса с печатающим
— — — устройством, эти два адаптера идентичны,за исключением адресов
— — — ввода-вывода. Порты принтера намонохромной плате имеют адреса от
— — — 3BCH до 3BEH, а отдельная плата принтераимеет адреса от 378H до
— — — 37AH.

— — — — — Адаптер принтера имеет два выводных портаи один порт ввода.
— — — Этот адаптер очень похож на микросхему8255, используемую для
— — — интерфейса клавиатуры. Фактически, сначалав конструкции платы
— — — печатающего устройства использоваласьмикросхема 8255. Но фирма IBM
— — — решила лучше делать адаптеры с раздельнымикомпонентами.
— — — — — Выводной 8-битовый порт данных по адресу3BCH или 378H передает
— — — данные принтеру. Адаптер посылаетсимвольный код ASCII, помещаемый
— — — в — этот порт, прямо в принтер. Второй портвывода, расположенный
— — — по адресам 3BEH или 37AH, имеет 5 выводныхбит. В нем содержатся
— — — управляющие сигналы для принтера- этилинии управляют его работой и
— — — инициализацией. В частности, бит 0инициирует передачу данных в
— — — принтер. Простая запись данных в портвывода данных не означает
— — — пересылку символа на принтер. Для того,чтобы в него поступил
— — — символ, нужно установить бит строба (бит 0порта 3BEH или 37AH)
— — — равным 1, а затем снова сбросить на 0. НаФиг. 8.15 показана
— — — короткая программа, передающая печатающемуустройству строку
— — — символов. Подпрограмма с именем PRINTобеспечивает сам процесс
— — — передачи данных в принтер.
— — — — — Обратите внимание, что процедура PRINTчитает код из вводного
— — — порта (3BCH или 379H). Этот портвозвращает информацию состояния
— — — печатающего устройства программе. В данномпримере программа
— — — проверяет состояние, чтобы выводитьследующий символ именно тогда,
— — — когда принтер готов его принять. Бит 7состояния порта ввода
— — — показывает занятость принтера. Если этотбит содержит 1, печатающее
— — — устройство готово принимать следующийсимвол для печати. В
— — — противном случае программа должнаподождать. Остальные 4 вводных
— — — бита этого порта отражают возможные ошибкина печатающем
— — — устройстве, например, отсутствие бумаги.Наш пример не контролирует
— — — эти ситуации. Техническое описаниесодержит структуры вводных и
— — — выводных портов платы адаптера печатающегоустройства.
— — — — — — — — — — -Microsoft (R) Macro Assembler Version 5.00 — — — — — — — — — — — — — — 1/1/8004:05:39
— — — — — — — — — — — -Фиг. 8.15 Вывод на принтер — — — — — — — — — — — — — — — — — — — — — — — — Page — — — -1-1

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -PAGE ,132
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -TITLE — — — — — Фиг. 8.15 Вывод на принтер

— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — — — — — — STACK — — — — — SEGMENT STACK
— — — — — — — — — — — -0000 — — — — — 0040[ — — — — — — — — — — — — — — — — — — DW — — 64 DUP (?)
— — — — — — — — — — — — — — — — — — — — ????
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ]
— — — — — — — — — — — -0080 — — — — — — — — — — — — — — — — — — — — — — — STACK — — — — — ENDS

— — — — — — — — — — — -= 0378 — — — — — — — — — — — — — — — BASE EQU — 378H

— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — — — — — — CODE SEGMENT
— — — — — — — — — — — — — — — — — — — — — — — — — — — —
— — — — — — — — — — — — — -ASSUME -CS:CODE

— — — — — — — — — — — -0000 — — — — — 94 A8 A3 2E 20 38 2E — — — MSG — DB — — ‘Фиг. 8.15’, 13, 10, ‘$’
— — — — — — — — — — — — — — — — — 31 35 0D 0A 24
— — — — — — — — — — — -000C — — — — — — — — — — — — — — — — — — — — — — — MAIN PROC FAR
— — — — — — — — — — — -000C — — — — — 1E — — — — — — — — — — — — — — — — — — — — PUSH DS — — — — — — — — — Адрес возврата
— — — — — — — — — — — -000D — — — — — 2B C0 — — — — — — — — — — — — — — — — — — SUB — AX, AX
— — — — — — — — — — — -000F — — — — — 50 — — — — — — — — — — — — — — — — — — — — — PUSH AX

— — — — — — — — — — — -0010 — — — — — 8D 1E 0000 R — — — — — — — — — — — — — — — — — LEA — BX, MSG
— — — — — — — — — — — -0014 — — — — — — — — — — — — — — — — — — — — — — — PRINT_LOOP:
— — — — — — — — — — — -0014 — — — — — 2E: 8A 07 — — — — — — — — — — — — — — MOV — AL, CS:[BX] — — — — — — Выборсимвола из строки для вывода
— — — — — — — — — — — -0017 — — — — — 3C 24 — — — — — — — — — — — — — — — — — — CMP — AL, ‘$’ — — — — — — — — — Конецстроки?
— — — — — — — — — — — -0019 — — — — — 74 06 — — — — — — — — — — — — — — — — — — JE — — MAIN_RETURN
— — — — — — — — — — — -001B — — — — — E8 0022 R — — — — — — — — — — — — — — CALL PRINT — — — — — — — — — — — — Печатьсимвола
— — — — — — — — — — — -001E — — — — — 43 — — — — — — — — — — — — — — — — — — — — — INC — BX
— — — — — — — — — — — -001F — — — — — EB F3 — — — — — — — — — — — — — — — — — — JMP — PRINT_LOOP — Переход кследующему символу
— — — — — — — — — — — -0021 — — — — — — — — — — — — — — — — — — — — — — — MAIN_RETURN:
— — — — — — — — — — — -0021 — — — — — CB — — — — — — — — — — — — — — — — — — — — — RET
— — — — — — — — — — — -0022 — — — — — — — — — — — — — — — — — — — — — — — MAIN ENDP

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ——- -Эта подпрограмма печатает символ в регистр AL

— — — — — — — — — — — -0022 — — — — — — — — — — — — — — — — — — — — — — — PRINT — — — — — PROC NEAR
— — — — — — — — — — — -0022 — — — — — BA 0378 — — — — — — — — — — — — — — — -MOV — DX, BASE — — — Порт вывода данных на принтер
— — — — — — — — — — — -0025 — — — — — EE — — — — — — — — — — — — — — — — — — — — — OUT — DX,AL — — — — Занесение символа в порт вывода на принтер
— — — — — — — — — — — -0026 — — — — — 42 — — — — — — — — — — — — — — — — — — — — — INC — DX — — — — — — — — — Адрес порта состояния принтера
— — — — — — — — — — — -0027 — — — — — — — — — — — — — — — — — — — — — — — WAIT_BUSY:
— — — — — — — — — — — -0027 — — — — — EC — — — — — — — — — — — — — — — — — — — — — IN — — AL,DX — — — — Опрос состояния принтера
— — — — — — — — — — — -0028 — — — — — A8 80 — — — — — — — — — — — — — — — — — — TEST AL, 80H — — — — Проверка разрядазанятости принтера
— — — — — — — — — — — -002A — — — — — 74 FB — — — — — — — — — — — — — — — — — JZ — — WAIT_BUSY — — Цикл до освобождения принтера
— — — — — — — — — — — -002C — — — — — 42 — — — — — — — — — — — — — — — — — — — — — INC — DX
— — — — — — — — — — — -002D — — — — — B0 0D — — — — — — — — — — — — — — — — — — MOV — AL, 0DH — — — — Установкаразряда готовности данных
— — — — — — — — — — — -002F — — — — — EE — — — — — — — — — — — — — — — — — — — — — OUT — DX,AL
— — — — — -&nbs
p- — — — — -0030 — — — — — B0 0C — — — — — — — — — — — — — — — — — — MOV — AL, 0CH — — — — Сброс разрядаготовности данных
— — — — — — — — — — — -0032 — — — — — EE — — — — — — — — — — — — — — — — — — — — — OUT — DX,AL
— — — — — — — — — — — -0033 — — — — — C3 — — — — — — — — — — — — — — — — — — — — — RET
— — — — — — — — — — — -0034 — — — — — — — — — — — — — — — — — — — — — — — PRINT — — — — — ENDP
— — — — — — — — — — — -0034 — — — — — — — — — — — — — — — — — — — — — — — CODE ENDS
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -END — MAIN

— — — — — — — — — — — — — — — — — Фиг. 8.15 Вывод на принтер
— — — — — Один из управляющих битов порта 3BEH (или37AH) управляет
— — — линией прерывания от печатающегоустройства. Для того, чтобы
— — — печатающее устройство могло посылать свойсигнал прерывания в
— — — контроллер 8259, этот бит нужно установитьравным 1. Однако адаптер
— — — печатающего устройства выдает неверныйсигнал прерывания, т.е.
— — — выбранный для этой цели сигнал не вызываетправильного прерывания.
— — — Поэтому не стоит и пытаться писатьпрограмму, которая бы
— — — использовала возможности прерывания отадаптера печатающего
— — — устройства (если вы не захотите физическиизменить плату
— — — печатающего устройства). Далее мы приведемпример, который обходит
— — — эту проблему с помощью системного таймера.

Категория: Программирование на Ассемблере | Дата: 07.03.13

Меню раздела
Блок