Главная » Ассемблер, Железо » Командный язык PCL фирмы Hewlett-Packard

0

Печать в растровом режиме на принтерах Hewlett-Packard может осуществляться при помощи языка PCL [54, 83, 84, 87, 89]. Язык PCL имеет богатый набор команд, однако при растровой печати реально необходимой является лишь небольшая подгруппа из этого набора, приведенная в табл. 7.8. Символ # в командной Esc-последо- вательности означает числовую константу, записанную в коде ASCII.

Таблица 7.8. Основные команды языка PCL, применяемые при растровой печати


Команда

Параметры

Esc-поеледователь-

 

 

команды

ность в ASCII-кодах

 

Сброс принтера

<Esc>E

 

Установить координату

<Esc>*p#X

 

курсора в единицах PCL

 

 

 

по оси X

 

 

 

Установить координату

<Esc>*p#Y

 

курсора в единицах PCL

 

 

 

по оси Y

 

 

 

Включить растровый

75 тчк/дюйм

<Esc>*t75R

 

режим и установить

100 тчк/дюйм

<Esc>*t100R

 

разрешение

150 тчк/дюйм

<Esc>*t150R

 

 

300 тчк/дюйм

<Esc>*t300R

 

-

600 тчк/дюйм

<Esc>*t600R

 

Задать число цветовых плос

Одна плоскость,

<Esc>*r1U

 

костей в строке изображения

черно-белый режим

 

 

Команда

Параметры команды

Esc-последователь- ность в ASCII-кодах

 

Три плоскости, цветной

<Esc>*r3U

 

режим RGB

 

 

Три плоскости, цветной

<Esc>*r-3U

 

режим CMY

 

 

Четыре плоскости,

<Esc>*r-4U

 

цветной режим KCMY

 

Задать ширину

 

<Esc>*r#S

изображения в пикселах

 

 

Начать вывод растрового

С левого края поля

<Esc>*rOA

изображения

печати текущей строки

 

 

С текущей позиции

<Esc>*r1A

 

курсора в текущей строке

 

Установить компрессию

Без компрессии

<Esc>*bOM

растра

Последовательное

<Esc>*b1M

 

кодирование

 

 

TIFF-кодирование

<Esc>*b2M

 

Дельта- кодирование

<Esc>*b3M

Передать строку

<Esc>*b#V [data]

цветовой плоскости

 

 

Передать строку растра

<Esc>*b#W[data]

Выход из режима

<Esc>*rC

растровой печати

 

 

Прежде чем начать работу в растровом режиме, необходимо выполнить сброс принтера, чтобы перевести все его параметры в состояние, принятое по умолчанию: вообще говоря, при запуске программы неизвестно, какие изменения в параметры работы принтера внесли ранее выполнявшиеся программы. Команда инициализации имеет следующий вид: <Esc>, "Е’

После инициализации принтер находится в текстовом режиме, но команда сброса воздействует и на параметры графического режима: по умолчанию задается черно-белый режим печати с разрешением 75 точек/дюйм.

Устанавливаемые по умолчанию границы области печати располагаются в нескольких миллиметрах от края листа бумаги, поэтому после выполнения сброса обычно требуется сместить начальную точку (левый верхний угол) печатаемого изображения на некоторое расстояние от границ рабочей области. Операцию установки

начального положения курсора нужно выполнить до входа в графический режим: команда позиционирования по оси X в графическом режиме игнорируется. Например, чтобы сместить начальное положение курсора относительно левого верхнего угла рабочей области страницы на два дюйма по горизонтали и один дюйм по вертикали, нужно последовательно подать команды позиционирования по X и по Y:

<Esc>, ‘*’, ‘р’, ‘б’, ‘О’, ‘О’, ‘X’ <Esc>, *’, "р", ‘3\ ‘О1, ‘О’, ‘У

В приведенном примере задаются абсолютные координаты (координаты относительно левого верхнего угла области печати). Если перед числом стоит плюс или минус, то задается смещение относительно текущей позиции курсора.

ПРИМЕЧАНИЕ

В командах, предназначенных для работы с графикой, расстояние задается в единицах PCL. Единица PCL (PCL Unit) после выполнения команды инициализации по умолчанию принимает значение, равное 1/300 дюйма. Команда установки разрешения печати на величину единицы PCL не алияет.

Две команды позиционирования язык PCL позволяет объединить в одну следующим образом:

<Esc>, *, У, ‘б1, ‘О1, ‘0’, ‘х1 ‘З’. ‘О1, ‘О’, ‘Y"

Следующая по порядку операция — выбор разрешения для печати изображения. Например, включить режим с разрешением 300 точек/дюйм можно командой:

<Esc>, ‘*, "Г, ‘3’, ‘О1. ‘О1, ‘R’

ПРИМЕЧАНИЕ

В принтерах HP используются квадратные пикселы. Разрешение по осям X и Y одинаковое, поэтому команда установки имеет только один параметр.

Команда установки разрешения печати воздействует не только на текущую, но и на все последующие страницы, вплоть до поступления команды сброса или другой команды установки разрешения. От выбора разрешения сильно зависят качество и скорость печати. При увеличении разрешения качество изображения улучшается, но объем передаваемой информации возрастает в квадрате, а скорость вывода информации уменьшается пропорционально росту ее объема. Даже для бытовых лазерных принтеров, способных выводить на печать по 6-12 страниц в минуту, параллельный порт LPT в стандартном режиме SPP работает слишком медленно и при использовании высокого разрешения может заметно притормаживать процесс печати, поэтому при выводе растровой графики желательно использовать режим ЕСР.

Разрешение 600 точек/дюйм можно задавать для лазерных принтеров и для старших (начиная с 6ХХ) моделей струйных принтеров HP при печати в черно-белом растровом режиме. Младшие модели струйных принтеров (до 5ХХ) могут работать с разрешением не более 300 точек/дюйм.

ПРИМЕЧАНИЕ

Команда установки разрешения автоматически переключает принтер в графический режим. По умолчанию печать графики начинается с текущей строки и левого края страницы, компрессия растра не используется.

Цветные принтеры имеют несколько режимов печати:

•           черно-белый (однокомпонентный) режим;

•       цветной трехкомпонентный режим RGB (красный, зеленый, синий);

•       цветной трехкомпонентный режим CMY (бирюзовый, пурпурный, желтый);

•       цветной четырехкомпонентный режим KCMY (черный, бирюзовый, пурпурный, желтый).

ПРИМЕЧАНИЕ

Четырехкомпонентный режим поддерживается только струйными принтерами, в которые устанааливаются сразу два картриджа (черный и цветной).

После сброса по умолчанию установлен черно-белый режим. Чтобы переключиться в другой режим, используется команда «Задать число цветовых плоскостей». Например, включить цветной режим CMY можно командой:

<Esc>, •*. V. •-. ‘З’. ‘U’

Поскольку каждый передаваемый байт содержит 8 точек изображения, при разделении строки растра на байты последний байт используется не полностью, если длина строки не кратна 8. Если программист сам формирует изображение, то неиспользуемые младшие разряды просто заполняются нулями, но при печати готового изображения из файла лучше задать ширину изображения в явном виде, чтобы не обрабатывать неполные байты. Например, чтобы установить ширину строки изображения 213 точек, нужно подать команду: <Esc>. *. V. ‘2’, ‘Г, ‘З1. "S1

Чтобы использовать отступ от левого края страницы, который был задан командой позиционирования курсора по горизонтали, следует подать команду, устанавливающую режим печати графического изображения с текущей позиции курсора: <Esc>, ‘*’, ‘г’, "Г, ‘А’

ПРИМЕЧАНИЕ

Перед началом вывода изображения обязательно должна быть подана по крайней мере одна из команд: «Установить разрешение» или «Начать печать графики». Рекомендуется, однако, подавать команду «Начать печать графики» независимо от того, была ли подана команда «Установить разрешение».

Обычно при печати используется принятый по умолчанию режим передачи данных без компрессии (режим 0), однако режим компрессии можно изменить перед началом вывода изображения и даже в процессе вывода (перед началом передачи очередной строки). Например, чтобы включить режим последовательного кодирования, нужно подать команду:

<Esc>, ‘*’, ‘b\ "Г, ‘М1

После того, как нужный режим печати установлен, можно приступать к построчному выводу изображения. Для печати в монохромном режиме используется команда «Передать строку растра». В результате выполнения этой команды будет загружена одна строка растра, после чего курсор перемещается в начало следующей строки. Печать изображения на лазерном принтере будет отложена до полного завершения формирования образа страницы, а на струйном — до заполнения такого количества строк, которое соответствует количеству используемых в данном режиме сопел печатающей головки.

Команда «Передать строку растра» содержит размер строки в байтах и соответствующее количество байтов данных. К сожалению, размер указывается в кодировке ASCII, что может потребовать введения в программу дополнительных операций для преобразования двоичного числа в ASCII-код, если размер строки является переменной, а не константой. Например, чтобы распечатать с экрана черно-белое изображение шириной 640 пикселов по горизонтали, нужно задавать размер строки 80 байт (640/8):

<Esc>, ‘*’, "b’. ‘8’, ‘О’, ‘W, <80 байт данных>

Если при формировании изображения появляются чистые (белые) строки растра, для ускорения передачи желательно их пропустить.

Использовать для этой цели команду позиционирования курсора (по оси Y) на струйных принтерах не рекомендуется: вместо ускорения может получиться существенное замедление печати.

Вместо команды позиционирования курсора для пропуска пустой строки можно использовать команду «Передать строку растра» с нулевым количеством передаваемых байтов данных:

<Esc>. •*. ‘b1, ‘О’. ‘W

Для цветной печати, кроме команды «Передать строку растра», используется также аналогичная ей по формату команда «Передать строку цветовой плоскости», которая после передачи данных выполняет переключение на следующую цветовую плоскость, а не на следующую строку растра.

Порядок передачи цветовых компонентов соответствует мнемоническому обозначению режима:

•       в режиме RGB первой передается строка красной цветовой плоскости, затем — зеленой, затем — синей;

•       в режиме CMY первой передается строка бирюзовой плоскости, затем — пурпурной, затем — желтой;

•       в режиме КСМ Y первой передается строка черной плоскости, затем — бирюзовой, затем — пурпурной, затем — желтой.

Для передачи всех цветовых компонентов растровой строки, кроме последнего, используются следующие друг за другом команды «Передать строку цветовой плоскости»; последний компонент передается по команде «Передать строку растра».

ПРИМЕЧАНИЕ

Поступление команды «Передать строку растра» переводит курсор на следующую строку растра, а все оставшиеся незаполненными цветовые компоненты текущей строки обнуляются.

Например, для передачи одной цветной строки шириной 640 пикселов в формате CMY нужно последовательно подать три команды:

<Esc>, ‘*’. ‘b’, ‘8’, ‘О’. ‘V’, <80 байт данных> <Esc>. ‘*’, ‘b’. ‘в’. ‘0’. ‘V’, <80 байт данных> <Esc>, "*’, ‘b’. ‘8’. ‘0’. ‘W. <80 байт данных>

Пустые строки цветовых плоскостей можно пропускать, подавая команду передачи строки плоскости с нулевым значением количества байтов данных:

<Esc>, *. ‘b’. ‘О1. ‘V

Для пропуска пустых (белых) строк можно, как и в черно-белом режиме, использовать команду: <Е$с>, ‘*’. ‘Ь’, ‘О1, ‘W’

После завершения вывода изображения нужно подать команду выхода из режима растровой печати: <Esc>, ‘*’. ‘г’, ‘С’

Чтобы извлечь из принтера отпечатанную страницу, нужно послать команду перевода формата:

<FF>

В листинге 7.9 приведена программа Test_HP_On_LPTl, предназначенная для проверки совместимости струйных и лазерных принтеров с набором команд PCL Hewlett-Packard. Программа осуществляет печать графического изображения набора символов шрифта 8×16 в растровом режиме, используя для этого универсальные процедуры ввода-вывода из главы 1 «Работа с клавиатурой», а также процедуры из листингов 7.1 и 7.4.

Листинг 7.9. Тест для лазерных и струйных принтеров

на совместимость с растровым режимом печати HP

IDEAL

Р386

LOCALS

MODEL MEDIUM

; Подключить файл инеионических обозначений : кодов управляющих клавиш и цветовых кодов

Include "listl_03.inc" : Подключить файл накросов

Include "listl_04.inc"

SEGMENT sseg para stack ‘STACK1

DB 400h DUP(?)

ENDS

DATASEG

: Номер печатаемой строки изображения PrintingString DW ? : Номер печатаемого байта PrintingByte DW ? : Текстовые сообщения Txtl

DB LIGHTCYAN,0.19

DB "ПЕЧАТЬ КОДОВОЙ ТАБЛИЦЫ РУССКОГО ШРИФТА DOS",О

DB LIGHTCYAN,2.22

DB "НА ЛАЗЕРНОМ HP-СОВМЕСТИМОМ ПРИНТЕРЕ",0

DB LIGHTGREEN,12,11

DB "Включите принтер, вставьте "

DB "бумагу, установите режим ON-LINE",О

DB LIGHTGREEN,14,17

DB "(будет произведен переход в графический режим)",О

DB YELLOW,24,14,"Нажмите любую клавишу и "

DB "ждите завершения печати",О Txt2

DB LIGHTGREEN,12,28,"Печать шрифта завершена",О

DB YELLOW,24,29,"Нажмите любую клавишу",О

: КОМАНДЫ ДЛЯ ПРИНТЕРА : Инициализировать принтер PrinterReset

DB 2, lBh.’E’

; Установка разрешения 300 точек на дюйм SetPrintDensity

DB 7, lBh,"*t300R" : Задать длину строки 40 байт (320/8) SetPLineLength

DB 6, lBh."*b40W"

; Завершение работы в растровом режиме ExitRasterMode

DB 4, lBh,"*rC" ENDS

CODESEG

;* Основной модуль программы *

PROC Test_HP_On_LPTl

mov AX.DGROUP

mov DS.AX

mov [CS:MainDataSeg].AX

; Считать шрифт из видеопамяти

call GrabRusFont : Установить текстовый режим и очистить экран

mov АХ.З int 10h

; Скрыть курсор – убрать за нижнюю границу экрана

mov [ScreenStri ng],25

mov [ScreenColumn],0 call SetCursorPosition

; Вывести текстовые сообщения на экран MShowColorText 5,Txtl call GetChar

; Установить видеорежим VGA 320×200, 256 цветов

mov AX,13h int lOh

; Отобразить шрифт

call ShowRusFont : Инициализировать принтер

mov SI,offset PrinterReset cal1 OutCommandToLPTl : Установка разрешения 300 точек на дюйм

Листинг 7.9(продолжение)

mov SI,offset SetPrintDensity call OutCommandToLPTl

; Настроить пару регистров ES:SI на видеопамять

mov AX,OAOOOh

mov ES,AX

xor SI,SI :обнулить SI

; Сбросить счетчик строк

mov [PrintingString],0

; ОСНОВНОЙ ЦИКЛ (ПО ПЕЧАТАЕМЫМ СТРОКАМ)

; Печать осуществляется в инверсной форме (светлые точки

; экрана при печати отображаются черными и наоборот).

; Вывод изображения на принтер выполняется по строкам

; растра, слева направо, сверху вниз. №Р0:

; Задать длину строки 40 байт (320/В) push SI

mov SI.offset SetPLineLength call OutCommandToLPTl pop SI

; Сбросить счетчик байтов

mov [PrintingByte],0 : Цикл по печатаемым байтам

@@Р1:

mov СХ.В ;счетчик точек в байте

xor AL.AL -.обнулить байт

; Цикл по печатаеиым точкам

@@Р2: shl AL.1 ;сдвинуть разряды влево cmp [byte ptr ES.SI],0 ;цвет точки?

je

@@РЗ пропустить черную точку or AL.1 :"поставить" точку

@@РЗ:

; Перейти на следующую точку

inc SI loop

@@Р2

; Вывести байт на принтер call OutCharToLPTl

; Перейти к следующему байту

inc [PrintingByte] cmp [PrintingByte],40 jl (Wl

; Перейти на следующую строку экранного изображения

inc [PrintingString] cmp [PrintingString],160 jl №P0

; Завершение работы в растровом режиме

mov SI.offset ExitRasterMode call OutCommandToLPTl

; Послать на принтер код завершения страницы

mov AL.OCh

call OutCharToLPTl

; Переустановить текстовый режим

mov ах.З int 10h

; Скрыть курсор – убрать за нижнюю границу экрана

call SetCursorPosition

; Вывести сообщение о завершении записи шрифта MShowColorString Txtl MShowColorText 2,Txt2 call GetChar

@@End:

; Переустановить текстовый режим

mov ax,3 int lOh

; Выход в DOS

mov AH,4Ch int 21h ENDP Test_HP_On_LPTl ENDS

: Подключить процедуры вывода данных на экран

Include "listl_02.inc"

: Подключить процедуры вывода символа и посылки : команды на принтер

Include "list7_01.inc"

; Подключить процедуры для захвата русского шрифта и

; отображения его в режиме 320×200

Include "list7_04.inc"

END

ПРИМЕЧАНИЕ

Для запуска теста пригоден любой АТ-совместимый компьютер, оснащенный струйным или лазерным принтером, подключенным к порту LPT1.

СОВЕТ

Прежде чем запустить тест, извлеките пачку листов из лотка подачи бумаги и оставьте в нем только один лист, а лучше вообще переключите принтер на ручную подачу.

Источник: Кулаков В. К90 Программирование на аппаратном уровне: специальный справочник (+дискета). 2-е издание. — СПб.: Питер, 2003. — 847 е.: ил.

По теме:

  • Комментарии