Главная » Ассемблер, Железо » Набор команд Epson

0

Фирма Epson разработала для своих матричных принтеров набор команд ESC/P, фактически ставший впоследствии международным стандартом — фирмы, выпускающие матричные принтеры, в обязательном порядке включают в свои изделия поддержку набора команд ESC/P.

В набор ESC/P входят команды для печати в текстовом режиме и режиме битового образа. В усовершенствованный вариант этого командного языка, получивший название ESC/P2, были включены также команды для печати в растровом режиме. На основе ESC/P2 в свою очередь был разработан набор команд для струйных принтеров «Epson raster», специально ориентированный на использование растрового режима — команды для печати в текстовом режиме и режиме битового образа из него изъяты, зато добавлены новые растровые команды.

Группа команд общего назначения

Существует несколько универсальных команд, входящих во все командные языки и доступных в любых режимах печати. Эти команды стали стандартными, поскольку происходят от самых первых периферийных устройств, предназначенных для вывода текстовой информации, то есть от электрических пишущих машинок (см. табл. 1.1 в главе 1 «Работа с клавиатурой»), В универсальную группу входят следующие команды:

•           перевод строки (CR), код ODh;

•           возврат каретки (LF), код OAh;

•           перевод формата (FF), код OCh.

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

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

По команде «Инициализаця» встроенный микропроцессор принтера переустанавливает все параметры печати в состояние, принятое по умолчанию. Команда инициализации имеет следующий формат:

<Esc>. ‘0’

ПРИМЕЧАНИЕ

Если команда состоит из нескольких байтов, то первым байтом в командной последовательности является символ Escape, которому соответствует шестнадцатеричный код 1Bh, поэтому многобайтные команды в литературе часто именуют Esc-последовательностями.

Команда «Установить абсолютное значения координаты по горизонтали» задает смещение позиции печати по горизонтали от левого края области печати. Команда имеет следующий формат:

<Esc>, ‘$’, nL, nH

Параметр п в данной команде задает (в двоичном коде) абсолютную координату по X в единицах перемещения (nL — младший байт параметра, пН — старший байт).

Команды Epson для печати в режиме битового образа

Режим битового образа считается устаревшим, но до сих пор используется в матричных принтерах и некоторых моделях струйных принтеров Epson. Команды, используемые при печати в режиме битового образа, перечислены в табл. 7.4. Параметры команд, передаваемые в двоичном коде, обозначены в таблице прописными латинскими буквами.

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

Таблица 7.4. Команды Epson для печати в режиме битового образа

Название команды

Евс-последова-

 

тельность

Установить межстрочное расстояние п/72 дюйма

<ESC> ‘А’ п

Установить межстрочное расстояние п/216 дюйма

<ESC> ‘3’ п

Установить межстрочное расстояние п/360 дюйма

<ESC> ‘+’ п

Напечатать графическую строку

<ESC> ‘*’ m nLnH dljdk

Для 9-игольчатых принтеров используется команда «Установить межстрочное расстояние п/72 дюйма» с параметром 8, которая воспроизводится следующей Esc-последователыюстью:

<Esc>. ‘А’, 8

В шестнадцатеричном коде указанная последовательность будет выглядеть следующим образом: lBh, 41h, 08h.

Другая команда, дающая совершенно аналогичный результат — «Установить межстрочное расстояние п/216 дюйма» с параметром 24: <Esc>, ‘З’. 24

В шестнадцатеричном коде эта команда будет выглядеть так: lBh, 33h, 18h.

Для 24-игольчатых и струйных принтеров с той же целью нужно использовать команду «Установить межстрочное расстояние п/360 дюйма» с параметром 48:

<Esc>. ‘+", 48

В шестнадцатеричном коде эта команда имеет следующий вид: lBh, 28h, 30h.

Смещение изображения от левого края поля печати задается командой «Установить абсолютное значения координаты по горизонтали», которую следует подавать перед началом печати каждой строки изображения. Величина единицы перемещения (шаг перемещения) для режима битового образа равна 1 /60 дюйма. Например, чтобы сместить строку на один дюйм от левого края, нужно подать команду: <Esc>. •$’, 60. 0

В шестнадцатеричном коде эта команда имеет следующий вид: lBh, 24h, 3Ch, OOh.

Печать строки битового образа осуществляется по команде «Печатать графическую строку», которая имеет следующий формат:

<Esc>. ‘*’. m, nL, nH, dl, dk

Команда имеет следующие параметры:

•     m — код режима печати (см. табл. 7.5);

•     nL — младший байт числа колонок в строке;

•     пН — старший байт числа колонок в строке;

•     dl-dk — байты данных строки изображения.

Число передаваемых байтов данных равно количеству колонок в строке изображения, а разрешение, с которым будет отпечатано изображение, определяется значением параметра т. В сводной табл. 7.5 перечислены коды режимов печати битового образа для принтеров EPSON и совместимых с ними (то есть поддерживающих набор команд ESC/P или ESC/P2) принтеров производства других фирм. Некоторые режимы матричных принтеров имеют в документации Epson индивидуальные названия, список которых приведен в табл. 7.6.

Таблица 7.5. Режимы растровой печати Epson-совместимых матричных принтеров

Код

Горизон

Вертикальная плотность

Печать

Точек

Байтов

(т)

тальная

 

 

 

сосед

в ко

в ко

 

плотность

 

 

 

них точек

лонке

лонке

 

 

9 игл

24 иглы

48 игл

 

 

 

0

60

72

60

60

Да

8

1

1

120

72

60

60

Да

8

1

2

120

72

60

60

Нет

8

1

3

240

72

60

60

Нет

8

1

4

80

72

60

60

Да

8

1

5

72

72

Нет

Нет

Да

8

1

6

90

72

60

60

Да

8

1

7

144

72

Нет

Нет

Да

8

1

32

60

Нет

180

180

Да

24

3

33

120

Нет

180

180

Да

24

3

38

90

Нет

180

180

Да

24

3

39

180

Нет

180

180

Да

24

3

40

360

Нет

180

180

Нет

24

3

64

60

Нет

Нет

360

Да

48

6

65

120

Нет

Нет

360

Да

48

6

70

90

Нет

Нет

360

Да

48

6

71

180

Нет

Нет

360

Да

48

6

72

360

Нет

Нет

360

Нет

48

6

73

360

Нет

Нет

360

Да

48

6

Таблица 7.6. Специфические наименования режимов печати Epson, встречающиеся в документации


Код

Режим печати

 

0

Обычный 8-игольчатый

 

1

8-игольчатый с удвоенной плотностью

 

2

8-игольчатый ускоренный с удвоенной плотностью

 

3

8-игольчатый с учетверенной плотностью

 

4

ЭЛТ-1

 

Код

Режим печати

5

Плоттер

6

ЭЛТ-11

7

Плоттер с удвоенной плотностью

32

24-игольчатый обычный ,

33

24-игольчатый с удвоенной плотностью

38

ЭЛТ-Ш

39

24-игольчатый с утроенной плотностью

40

24-игольчатый с шестикратной плотностью

Предельная ширина области печати для принтеров формата А4 равна 8 дюймам, а для принтеров формата A3 — 11 дюймам. Максимально возможное число точек в растровой строке определяется произведением ширины области печати на горизонтальную плотность печати. Например, в режиме 0 на принтере формата А4 предельное число точек в строке равно 480.

ВНИМАНИЕ

В некоторых режимах невозможна печать соседних черных точек, то есть вывод данных осуществляется через одну точку — если две точки изображения идут по горизонтали подряд, друг за другом, то печатается только первая их них. Такие режимы в табл. 7.5 помечены знаком «минус» в колонке «Печать соседних точек».

Плотность печати по вертикали для 9-игольчатых матричных принтеров составляет 72 точки на дюйм, а для 24-игольчатых и струйных — 60, 180 или 360 точек на дюйм. Следовательно, в режимах с одинаковыми кодовыми номерами коэффициенты деформации изображения струйных принтеров отличаются от коэффициентов 9-игольчатых. Например, для 9-игольчатых пропорциональная печать 1:1 возможна в режиме 5, а для струйных — в режимах 0,39,73. Поскольку плотность печати 9-игольчатых принтеров не совпадает с плотностью 24-игольчатых и струйных, при использовании старого программного обеспечения для печати на новых принтерах наблюдается искажение масштабов изображения.

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

lBh, 2Ah, OOh. 12h. OOh. lOh, IFh. 21h. 2Dh. 4Dh. Clh. 4Fh. 2Fh. 21h. lFh, lOh. OOh. OOh. 38h, 44h, 47h. 44h. 38h

Здесь передается 18 байт данных, а следовательно nL = 12h, nH = 0.

В конце каждой графической строки должны передаваться команды «возврат каретки» и «перевод строки» (ODh, OAh). Пйсле завершения печати изображения нужно подать команду «перевод формата» (OCh), чтобы извлечь из принтера отпечатанную страницу.

ПРИМЕЧАНИЕ

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

Листинг 7.4 содержит две вспомогательные процедуры, которые мы будем использовать в приводимых ниже тестовых примерах для различных способов печати: процедуру захвата русского шрифта Grab- RusFont и процедуру рисования графического изображения шрифта в режиме VGA 320×200 ShowRusFont.

Листинг 7.4. Процедуры для захвата русского шрифта и отображения его в режиме 320×200

DATASEG

; Буфер для сохранения шрифта (16×256 байт) Font8xl6

DB 4096 DUP(?)

; Позиция отображаемого символа FontString DW ? ;номер строки шрифта FontColumn DW ? ;номер колонки шрифта ENDS

C0DESEG

;* СЧИТЫВАНИЕ "РУССКОГО" ШРИФТА ИЗ ВИДЕОКОНТРОЛЛЕРА *

PROC GrabRusFont near pushad

; Перепрограммировать синхронизатор cli

mov DX.3C4h

: Установить последовательную адресацию

; ячеек видеопамяти

mov AX.0704h

out DX.AX

sti

: Перепрограммировать графический контроллер

mov DX.3CEh

; Выбрать для считывания плоскость 2

mov АХ,0204h

out DX.AX

; Запретить четную-нечетную адресацию

mov AX,0005h out DX.AX

; Установить окно доступа по адресу AOOOOh

mov AX,0006h out DX.AX

; Скопировать шрифт в буфер Font8xl6

mov AX.OAOOOh

mov ES.AX

mov SI .0

mov BX.offset FontBxl6

mov DX,256 №H0:

mov CX.16 Ш:

mov AL.[ES:SI]

mov [BX].AL

inc BX

inc SI loop 00M1

add SI.16 dec DX jnz Ш0 popad ret

ENDP GrabRusFont

;* ОТОБРАЗИТЬ ШРИФТ НА ЭКРАНЕ В РЕЖИМЕ 320X200 *

PROC ShowRusFont near pusha

push ES

mov AX.OAOOOh

mov ES.AX

mov SI,offset Font8xl6 xor DI.DI

mov [FontString].0 РвпО:

mov [FontColumn],0

push DI

@@ml:

; Отобразить очередной символ

mov АН,16 ;число строк в маске символа @вл2:

; Отобразить строку изображения символа

lodsbзагрузить очередной байт маски

mov СХ,8

@0т3:

; вывести на экран очередную точку изображения rol AL.1 jne @ftn4

mov [byte ptr ES:DI],15 Рйп4:

inc DI

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

loop @0m3

add DI.320-8 dec AH jnz

@@m2 sub DI,320*16-8-2

inc [FontColunin] cmp [FontColunin]. 32 jb

@@ml pop DI

add DI,320*(16+4)

inc [FontString]

cmp [FontString],8

jb @M)

pop ES

popa

ret

ENDP ShowRusFont ENDS

В листинге 7.5 приведен тест на совместимость принтера с набором команд Epson ESC/P2. Программа Test Matn x_0n_LPTl осуществляет печать графического изображения набора символов шрифта 8×16 в режиме битового образа. Программа использует универсальные процедуры ввода-вывода из главы 1 «Работа с клавиатурой», процедуры захвата шрифта и рисования его изображения в режиме VGA 320×200 из листинга 7.4, а также процедуры вывода команд и данных на принтер из листинга 7.1.

Листинг 7.5. Тест для матричных и струйных принтеров на совместимость с режимом печати битового образа EPSON

IDEAL

Р386

LOCALS

MODEL MEDIUM

; Подключить файл мнемонических обозначений

; кодов управляющих клавиш и цветовых кодов

Include "listl_03.inc"

; Подключить файл макросов

Include "listi._04.inc"

DATASEG

; Номер печатаемой строки изображения PrintingString DW ?

; Номер печатаемого байта PrintingByte DW ?

; Текстовые сообщения

Txtl

DB LIGHTCYAN.0.19

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

DB LIGHTCYAN.2.20

DB "НА МАТРИЧНОМ EPSON-СОВМЕСТИМОМ ПРИНТЕРЕ",0

DB LIGHTGREEN,12,И

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

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

DB LIGHTGREEN.14,17

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

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

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

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

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

; КОМАНДЫ ДЛЯ ПРИНТЕРА

; Установить межстрочное расстояние 8 точек SetLineSpacing

DB 3, lBh.’A".8 : Вывести 320 точек по горизонтали (256+64) SendBitlmageData

DB 5. lBh,’*’.1,64.1 ENDS

SEGMENT sseg para stack ‘STACK’

DB 400h DUP(?)

ENDS CODESEG

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

PROC TestMatri x On LPTl

mov AX,DGROUP

mov DS.AX

mov [CS:Mai nDataSeg],AX : Считать шрифт из видеопаияти

cal1 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 : Отобразить шрифт

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

cal1 ShowRusFont : Установить межстрочное расстояние 8 точек

mov SI,offset SetLineSpacing cal1 OutCommandToLPTl : Настроить пару регистров ES:SI на видеопамять

mov АХ,OAOOOh

mov ES,AX

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

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

mov [PrintingString],0

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

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

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

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

; восемь точек.*

@@Р0:

; Запомнить начало очередной строки в видеопамяти

push SI

; Включить графический режим печати push SI

mov SI.offset SendBitlmageOata cal1 OutCommandToLPTl pop SI

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

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

mov CX.8 ;счетчик точек в байте хог AL.AL ;обнулить байт

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

je

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

@@РЗ:

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

add SI.320 1oop

@@Р2

: Вывести байт на принтер call OutCharToLPTl : Перейти к следующему байту pop SI

inc SI

inc [PrintingByte] cmp [PrintingByte].320 jl @PP1 : Перейти на следующую строку

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

: каретки и перевода строки

mov AL,ODh ;возврат каретки

call OutCharToLPTl

mov AL.OAh ;перевод строки

call OutCharToLPTl

; Вычислить начало следующей группы из

; восьми строк в видеопамяти

pop SI

add SI,320*8

; Увеличить счетчик отпечатанных строк

inc [PrintingString] cmp [PrintingString],160/8 jl @<aP0

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

mov AL.OCh ;перевод формата call OutCharToLPTl

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

mov ах,3 int 10h

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

call SetCursorPosition

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

@@End:

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

mov ax,3 int lOh : Выход в DOS *

mov AH,4Ch int 21h ENDP Test_Matrix_On_LPTl ENDS

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

Include "1istl02.inc" ‘

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

; команды на принтер

Include "list7_01.inc" :

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

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

Include "list7_04.inc"

END

ПРИМЕЧАНИЕ

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

СОВЕТ

Прежде чем запустить тест на принтере с автоматической подачей бумаги, извлеките бумагу из лотка и оставьте в нем только один лист (если принтер не поддерживает набор команд EPSON, то он воспримет передаваемую информацию как бессмысленный набор ASCII-символов и попытается их распечатать в текстовом режиме, что может привести к бесполезному расходованию бумаги).

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

По теме:

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