Программирование 9-игольчатых матричных Принтеров семейства Epson
Данная статья предназначается в первую очередь пользователям ПК "Корвет", однако будет полезна всем, имеющим дело с Epson-совместимыми и близкими к ним принтерами. Полное описание системы команд принтера Epson довольно велико, поэтому в журнальном варианте оставлены лишь наиболее употребимые команды.
Матричные принтеры являются неотъемлемой частью любого аппаратно-программного комплекса на базе персонального компьютера. Наиболее доступны и поэтому распространены принтеры, головка которых содержит 9 иголок.
Текст или графическое изображение, формируемые матричным принтером, состоят из горизонтальных строк, набранных из близко расположенных вертикальных колонок, состоящих в свою очередь из отдельных точек.
Несмотря на внешнюю простоту, принтер является весьма сложным устройством. По сути это специализированная микро-ЭВМ с собственным микропроцессором, ПЗУ и ОЗУ, каналом ввода данных и управления, внешними исполнительными устройствами в виде двух шаговых двигателей и печатающей головки.
Признанным лидером в сфере разработки и производства матричных принтеров является фирма Seiko Epson (Япония). Именно ей удалось в свое время разработать удачный набор команд для программирования режимов таких принтеров и продать большое количество своих принтеров на рынке компьютерной техники.
В результате соблюдение протокола команд фирмы Epson стало почти обязательным для всех производителей принтеров, претендующих на сбыт своей продукции на рынке.
Ниже описаны набор команд принтеров семейства Epson, способы задания режимов печати из программ пользователя, написанных для ПК "Корвет".
Характеристики принтеров семейства Epson
Матричные принтеры характеризуются следующими основными техническими параметрами: скоростью печати, размером основного буфера печати, наличием или отсутствием режима печати, близкого по качеству к шрифту портативной пишущей машинки, наличием или отсутствием "зашитого" в ПЗУ принтера знакогенератора русского алфавита (кириллицы).
В таблице 1 приведены основные технические характеристики распространенных в нашей стране 9-игольчатых матричных Ерson-совместимых принтеров.
Тип принтера | Скорость печати, зн/с* |
Знакогенератор кириллицы |
Режим печати NLQ |
Размер буфера печати, Кбайт |
---|---|---|---|---|
FX-850/1050 | 264 | Нет | Есть | 8 |
FX-800/1000 | 200 | Есть | Есть | 8 |
LX-800 | 180 | Нет | Есть | 3 |
FX-80 | 160 | Нет | Нет | 2 |
RAVI-8010M | 180 | Есть | Есть | 4 |
Compute Mate-160 | 160 | Есть | Есть | 8 |
* - Скорость печати указана для черновикового режима при плотности 10 зн/дюйм.
Многие принтеры могут печатать как в черновиковом режиме (draft), так и в режиме качественной печати (Near Letter Quality, или сокращенно NLQ). Во втором случае шрифт напоминает шрифт портативной пишущей машинки.
Аппаратно русифицированные принтеры с записанным в ПЗУ знакогенератором кириллицы обеспечивают печаль смешанных текстов с английским и русским алфавитами. Отдельные модели могут различаться типом кодировки кириллицы, что обычно приводит к полному несоответствию распечатки и исходного текста при использовании стандартных способов печати из операционной системы (например, с помощью программы PIP или переключения в режим дублирования выдачи с помощью команд CTRL+Р). Обойти это препятствие позволяют прикладные программы печати, осуществляющие перекодировку текста перед выдачей его на принтер.
Ниже будут приведены стандартные таблицы кодировок символов, а также способ управления процессом перекодировки при печати, которую можно реализовать непосредственно в операционной системе.
Встроенный тест и печать в шестнадцатеричном формате. Все типы принтеров имеют встроенную самопроверку и возможность печати в шестнадцатеричном формате.
Самопроверка инициируется, если при включении питания была нажата клавиша FORM FEED (или LINE FEED) на верхней панели управления принтера. Она выводит на печать все символы, определенные во внутреннем знакогенераторе, и позволяет проверить правильность функционирования принтера, не прибегая к помощи компьютера.
Некоторые принтеры (FX-800, FX-850 и др.) в режиме самопроверки перед распечаткой алфавита выводят полезную информацию о текущей установке DIP-переключателей (DIP - аббревиатура от Dual Inline Package), расположенных на основной плате внутри принтера и отвечающих за инициализацию тех или иных режимов печати при включении питания.
Печать в шестнадцатеричном формате инициируется, если при включении питания были нажаты клавиши FORM FEED и LINE FEED, после чего принтер принимает передаваемые ему коды и печатает как сами эти коды, так и соответствующие им символы. Соответствие устанавливается на основе кодировки знакогенератора, записанного в ПЗУ принтера. Режим полезен при отладке собственных прикладных программ, написанных для обслуживания принтера.
Управление принтером из программ пользователя на "Корвете"
Из программ пользователя на печать выдаются обычно либо массивы данных, либо текстовая информация, либо графическая копия экрана.
Есть два способа обращения к принтеру: стандартный, через базовую систему ввода-вывода (BIOS); обращение непосредственно по физическому адресу адаптера принтера, минуя BIOS. Применение стандартного способа для распечатки русского текста на принтерах со знакогенератором кириллицы в ПЗУ дает нужный результат только в том случае, если оказываются согласованы три фактора: тип кодировки кириллицы в данной версии BIOS ОС компьютера; наличие или отсутствие в BIOS перекодировочной таблицы для выдачи данных на печать, а также ее содержание; тип кодировки кириллицы в принтере. Поэтому при написании универсальных программ, рассчитанных на работу с принтером произвольного типе, надежнее использовать второй способ - написание собственного драйвера принтера с обращением по физическому адресу устройства.
Однако в этом случае есть опасность потери работоспособности программы при ее переносе в другую версию ОС СР/М, поскольку физические адреса устройств не являются стандартизованных, параметром и могут меняться от версии к версии.
Стандартные способы работы с принтером. На нижнем уровне ОС, где осуществляется непосредственная связь между программной и аппаратной частями компьютера, в стандартной версии ОС СР/М есть две функции для общения с принтером: одна - для выдачи символа на печать, другая - для проверки готовности принтера.
Функция № 5 BIOS: LIST
Входные параметры: регистр С процессора должен содержать код символа, выводимого на принтер.
Выходные параметры: нет.
Действие: символ из регистра С выводится на параллельный интерфейс принтера в соответствии с протоколом. Если принтер не готов, то функция находится в состоянии ожидания готовности.
Функция № 15 BIOS: LISTST
Входные параметры: нет.
Выходные параметры: регистр А (аккумулятор процессора) содержит 255, если принтер готов к приему данных, и 0, если не готов.
Действие: чтение состояния линии данных BUSY параллельного интерфейса.
Функция № 15 является "подмножеством" функции № 5, т. е. вызывается последней в процессе выполнения. Способы доступа к этим функциям (как и к описанным далее) определены в конкретных языках программирования.
Драйвер принтера в ОС СР/М-80 на ПК "Корвет" использует эти функции BIOS; протокол обмена соответствует протоколу интерфейса Centronix в его наиболее простой версии. Опознавание готовности внешнего устройства к приему данных осуществляется с помощью функции LISTST, отсутствие сигнала BUSY является признаком готовности принтера.
При вызове функции LIST сначала проверяется готовность принтера к приему данных. В случае его занятости функция ожидает готовности; при ее наступлении код передаваемого символа записывается в порт параллельного интерфейса, а затем программно формируется строб записи данных с отрицательной логический полярностью и длительностью около 20 мкс.
С помощью этого драйвера передаются любые коды от 0 до 255. Символы с кодами от 0 до 127, представляющие нижнюю часть таблицы символов и совпадающие с нижней половиной стандарта ASCII, передаются без изменений; верхняя половина таблицы, т. е. символы с кодами от 128 до 255, передается после перекодировки в соответствии со специальной перекодировочной таблицей (она будет описана ниже).
Базовая дисковая операционная система (BDOS), состоящая из процедур обмена с дисками и другими логическими устройствами, в отличие от BIOS представляет собой аппаратно независимую часть операционной системы СР/М-80. Для работы с внешним печатающим устройством BDOS имеет функцию № 5 LIST, выполняющую вывод символа на логическое устройство LST:.
Функция № 5 BDOS: LIST
Входные параметры: регистр С содержит 05H, регистр Е - код выводимого символа.
Выходные параметры: нет.
Действие: вывод не LST: символа, код которого задан в регистре E.
Бейсик, Паскаль и Си имеют стандартные программные средства для вывода информации на печать с помощью описанных выше функций BDOS и BIOS.
В интерпретаторе Бейсик ПК "Корвет" есть две команды выдачи на печать: LPRINT - выдача на принтер произвольных выражений, LLIST - печать текста программы. Любой режим работы принтера может быть запрограммирован с помощью команды LPRINT. В выводимом примере принтер инициализируется, включается режим "элита", ширина левого поля устанавливается равной 12 символам, после чего печатается сообщение.
10 LPRINT CHR$(27);"@";:REM Инициализация
20 LPRINT CHR$(27);"М";:REM Установка "элиты"
30 LPRINT CHR;(27);"l";CHR$(12):REM левое поле=12 зн.
40 LPRINT "Elite-sized characters"
Оператор LPRINT следит за выдачей кода CR (возврат каретки). Если после последнего CR будут выданы 70 символов, LPRINT самостоятельно выдаст дополнительные коды CR (0DH) и LF (ОАН, перевод строки). Поэтому использование LPRINT для работы в графических режимах весьма неудобно. В некоторых версиях Бейсика есть оператор WIDTH, позволяющий изменять длину строки при выдаче информации на внешнее устройство (консоль или принтер). Увеличение длины до 255 символов в некоторых случаях облегчает печать графики. К сожалению, в Бейсик-Корвет 1.0 длину строки можно менять лишь в пределах от 15 до 64 символов.
На языке компилятора Паскаль/МТ+ в разделе описания переменных объявляется переменная-файл (например, printer) типа TEXT. С помощью операторов ASSIGN (printer, 'LST:') и RESET(printer) (или REWRITE (printer), что в данном случае эквивалентно) вывод в нее направляется на логическое устройство LST:, связанное через BIOS с адаптером принтера. Вывод реализуется с помощью операторов WRITE(переменная-файл, выражение) и WRITELN (переменная-файл, выражение). В приводимом примере включается режим печати сжатых подчеркнутых символов и выводится сообщение "Hello!".
Program TestPrinter;
var
printer : text;
begin
assign(printer, 'LST:');
reset(printer);
write(printer, chr(15)); { condensed }
write(printer, chr(27), '-', chr(1)); {underlined}
writeln(printer, 'Hello !');
close(printer);
end.
В языке Express Pascal есть логические устройства LST:, LPT: и PRN:, которые связаны с драйвером параллельного порта принтера. Для вывода информации на принтер можно использовать любое из них.
В разделе описания переменных объявляется переменная-файл (например, printer) типа TEXT. С помощью операторов ASSIGN (printer, (имя логического устройства)) и REWRITE (printer) вывод в нее направляется на указанное логическое устройство, связанное через BIOS с адаптером принтера. Вывод реализуется с помощью операторов WRITE (переменная-файл, ...) и WRITELN (переменная-файл, ...). Пример аналогичен предыдущему.
Program TestPrinter;
var
printer : text;
begin
assign(printer, 'LST:');
rewrite(printer);
write(chr(15)); { condensed }
write(chr(27), '-', chr(1)); {underlined}
writeln(printer, 'Hello !');
close(printer);
end.
Работа с принтером в среде языка компилятора Aztec Си похожа на работу с дисковым файлом.
Одним из возможных способов является применение функций буферированного ввода-вывода. В этом случае пользователь должен объявить указатель на макроопределение FILE (например, FlLE*printer), затем присвоить этому указателю значение, полученное в результате открывания файла с именем LST: на запись (printer==fopen('LST:','w')). Имя LST: является зарезервированной синтаксической конструкцией, присвоенной логическому устройству вывода на принтер, поэтому оно распознается компилятором среди других имен файлов.
После открывания такого файла можно применять любые функции буферированного ввода-вывода, используемые обычно для записи в поток, связанный с дисковым файлом: fprintf (printer, format, arg1, ...), fputs (printer), fwrite (buffer, size, count, printer), aputc (printer). Пример аналогичен предыдущему.
#include "libc.h"
#define CR 13
#define ESC 27
main() {
FILE *printer;
printer=fopen("LST:", "w");
fprintf(printer, "%c%c%c%c\n", 15, ESC, '-', 1);
fputs("Hello !", printer);
aputc(CR, printer);
fclose(printer);
}
Для 8-разрядных машин с операционной системой СР/М-80 существуют и другие компиляторы Си. Приведенный пример подходит для компиляторов, в которых определено логическое устройство LST:, и компьютеров, содержащих в BIOS подпрограммы работы с принтером.
Управление принтером на физическом уровне. Если применение стандартного драйвера принтера становится неудобным, пользователь может написать свой собственный драйвер, адресуясь непосредственно по физическим адресам аппаратного адаптера принтера.
Адреса регистров адаптера принтера ПК "Корвет" в ОС СР/М v. 2.2, BIOS v. 2.0 приведены в таблице 2.
Регистр | Адрес | Назначение |
---|---|---|
Регистр данных | FB30H | Передача данных |
Регистр состояния | FB38H | Проверка готовности |
Регистр управления | FB33H | Формирование строба |
Готовность принтера к приему данных проверяется чтением из регистра состояния и проверки бита 2: если он равен 1, принтер готов к приему данных. В этом случае передаваемый байт данных в инвертированном виде записывается в регистр данных, после чего программно формируется управляющий строб (последовательной записью в регистр управления чисел 0ВН и 0АН).
В соответствии с техническими описаниями Epson-совместимых принтеров управляющий строб должен иметь длительность не менее 0,5 мкс, задержку относительно момента выставления данных на шину - не менее 0,5 мкс. Нетрудно видеть, что для 8-разрядных компьютеров эти условия выполняются автоматически при применении любых языков программирования, в том числе и ассемблера.
Некоторые принтеры, не принадлежащие к семейству Epson, требуют прямого (а не инвертированного) представления байта данных. Это относится, например, к термопечатающим устройствам отечественного производства семейства "Электроника".
Для адекватной печати русского текста на русифицированных принтерах в случае несовпадения кодировок кириллицы в компьютере и принтере пользователю следует создать и разместить в своей программе собственную перекодировочную таблицу, через которую необходимо пропускать передаваемый текст.
Подпрограмму передачи символа или массива символов непосредственно через параллельный порт лучше писать на ассемблере - это позволит достичь максимальной скорости передачи. Выигрыш в скорости особенно наглядно проявляется при выдаче больших массивов данных (до 2 Кбайт) при печати графических изображений в режиме учетверенной плотности.
Ниже приведен пример простой реализации драйвера печати на Бейсике (собственно драйвер записан в строках 200- 250). Его алгоритм легко переписать на Паскале или Си.
10 S$="My own printer driver"
20 FOR I=1 TO LEN(S$)
30 D=ASC(MID$(S$,I,1)): GOSUB 200
40 NEXT I
50 D=13: GOSUB 200
60 END
70 REM Подпрограмма выдачи символа с кодом D на принтер
200 S=PEEK(&HFB38) :REM Чтение регистра состояния
210 IF (S AND 4) <> 4 THEN 200 :REM Проверка готовности принтера
220 POKE &HFB30, 255-D :REM Запись инвертированного Байта в регистр данных
230 POKE &HFB33, &НВ :REM Формирование строба
240 POKE &HFB33, &НА :REM Формирование строба
250 RETURN
Приведем список команд Epson-совместимых принтеров и подробные описания некоторых из них.
Код команды | Ее действие |
---|---|
BEL | Выдача звукового сигнала |
BS | Возврат каретки на 1 символ назад |
НТ | Горизонтальная табуляция |
LF | Перевод строки |
VT | Вертикальная табуляция |
FF | Перемещение бумаги на начало следующей страницы |
CR | Печать буфера строки, возврат каретки |
SO | Включение двойной ширины символов для одной строки |
SI | Включение уплотненного режима печати |
DC1 | Селектирование принтера |
DC2 | Отмена уплотненного режима печати |
DC3 | Деселектирование принтера |
DC4 | Отмена двойной ширины символов |
CAN | Очистка буфера печати (1 строка) от данных |
ESC | Контрольный код, с которого начинаются управляющие последовательности кодов |
DEL | Удаление из буфера печати последнего символа |
Последовательность | Ее действие |
---|---|
ESC SO | Включение двойной ширины символов для одной строки |
ESC SI | Включение уплотненного режима печати |
ESC EM | Подключение устройства для подачи листовой бумаги |
ESC SP | Выбор межзнакового промежутка |
ESC ! | Выбор определенной комбинации шрифтов |
ESC # | Отмена управления старшим битом данных |
ESC $ | Установка абсолютной позиции печати |
ESC % | Переключение между знакогенератором ПЗУ принтера и знакогенератором пользователя |
ESC & | Загрузка (определение) знакогенератора пользователя |
ESC * | Выбор одного из графических режимов |
ESC - | Установка отмена режима подчеркивания |
ESC / | Выбор канала вертикальной табуляции |
ESC 0 | Установка межстрочного интервала 1/8 дюйма |
ESC 1 | Установка межстрочного интервала 7/72 дюйма |
ESC 2 | Установка межстрочного интервала 1/6 дюйма |
ESC 3 | Установка межстрочного интервала n/216 дюйма |
ESC 4 | Выбор режима курсива (шрифт "italica") |
ESC 5 | Отмена режима курсива |
ESC 6 | Расширение области печатаемого кода (разрешение печати символов с номерами 128-159 и 255) |
ESC 7 | Отмена режима ESC 6 |
ESC 8 | Отключение датчика конца бумаги |
ESC 9 | Включение датчика конца бумаги |
ESC : | Копирование знакогенератора ПЗУ в ОЗУ принтера |
ESC < | Выбор однонаправленной печати для одной строки |
ESC = | Установка старшего бита (MSB) в 0 |
ESC > | Установка старшего бита (MSB) в 1 |
ESC ? | Присвоение одному из 8 графических режимов своего символьного кода |
ESC ® | Инициализация (сброс принтера) ESC |
ESC А | Установка межстрочного интервала n/72 дюйма |
ESC В | Установка позиций для вертикальной табуляции |
ESC С | Установка длины страницы в строках |
ESC СО | Установка длины страницы в дюймах |
ESC D | Установка позиций для горизонтальной табуляции |
ESC Е | Выбор режима выделенного шрифта |
ESC F | Отмена режима выделенного шрифта |
ESC G | Установка режима печати "двойной удар" |
ESC Н | Отмена режима печати "двойной удар" |
ESC I | Установка режима обработки символов с кодами 0-31 и 128-159 (либо контрольный код, либо печатаемый символ) |
ESC J | Печать буфера и перемещение бумаги на n/216 дюйма |
ESC К | Включение графического режима с нормальной плотностью (480 точек на строку) |
ESC L | Включение графического режима с двойной плотностью (960 точек на строку) |
ESC М | Выбор плотности печати "элита" (12 знаков на дюйм) |
ESC N | Установка количества строк для пропуска поперечной перфорации |
ESC О | Отмена режима пропуска перфорации |
ESC Р | Выбор шага "цицеро" (отмена режима ESC М) |
ESC Q | Установка величины правого поля |
ESC R | Выбор набора международных символов |
ESC S | Включение режима печати надстрочных/подстрочных символов |
ESC Т | Отмена режима печати надстрочных, подстрочных символов |
ESC U | Включение/отмена печати в одном направлении |
ESC W | Включение/отмена режима двойной ширины (печать расширенных символов) |
ESC Y | Установка графического режима с двойной плотностью и двойной скоростью печати |
ESC Z | Установка графического режима с учетверенной плотностью печати (1920 точек на строку) |
ESC | Установка относительного положения |
ESC * | Установка графического режима печати с использованием всех 9 иголок |
ESC а | Установка режима выравнивания текста (по левому, правому краю или центровка) |
ESC Ь | Установка до 16 позиций вертикальной табуляции для одного из каналов |
ESC е | Установка инкрементов для горизонтальной и вертикальной табуляций (Compute Ма-te-16O) |
ESC f | Печать пробелов или перемещение на отроку без возврата каретки (Compute Mate-160) |
ESC i | Печать по одному символу (FX-80) |
ESC j | Перемещение бумаги в обратном направлении (FX-80) |
ESC k | Выбор качественного шрифта |
ESC l | Установка величины левого поля |
ESC m | Включение/отмена печати символов псевдографики, имеющих коды 128-159 (Compute Mate-160) |
ESC р | Установка/отмена режима пропорциональной печати |
ESC s | Установка, отмена печати с уменьшенной в 2 раза скоростью |
ESC t | Выбор таблицы знаков |
ESC w | Установка/отмена режима двойной высоты |
ESC х | Установка/отмена режима печати NLQ |
Возврат каретки на один символ BS
Формат: | ||
символьный: | BS | |
десятичный: | 8 | |
шестнадцатеричный: | 8 | |
клавиатурный: | CTRL+Н |
Печатается буфер строки, после чего печатающая головка возвращается назад на один символ. Из первой позиции строки возврата каретки не происходит. Код BS игнорируется в режиме выравнивания текста ("ESC а <2>" или "ESC а <3>"). Если код получен сразу после печати графического образа, то новые данные будут напечатаны на позиции начала печати графического образа.
Возврат каретки CR
Формат: | ||
символьный: | CR | |
десятичный: | 13 | |
шестнадцатеричный: | 0D | |
клавиатурный: | CTRL+M |
Печать буфера строки и возврат печатающей головки в первую позицию строки. Перевод строки происходит только в случае установки в соответствующее положение DIP-переключателя или установки линии управления AUTO FEED XT параллельного интерфейса в состояние "НИЗКИЙ УРОВЕНЬ".
Перевод строки LF
Формат: | ||
символьный: | LF | |
десятичный: | 10 | |
шестнадцатеричный: | 0A | |
клавиатурный: | CTRL+J |
Печать буфера строки и перемещение бумаги на одну строку вверх с учетом текущего значения межстрочного интервала.
Переход к началу следующей страницы FF
Формат: | ||
символьный: | FF | |
десятичный: | 12 | |
шестнадцатеричный: | 0C | |
клавиатурный: | CTRL+L |
Печать буфера данных и перемещение бумаги на позицию начала следующей страницы с учетом текущего значения длины страницы.
Перевод строки на n/216 дюйма ESC J
Формат: | ||||
символьный: | ESC | J | n | |
десятичный: | 27 | 74 | n | |
шестнадцатеричный: | 1B | 4A | n |
Печать буфера и перевод бумаги на n/216 дюйма. Величина лежит в диапазоне 0-255. Код не влияет на текущую величину межстрочного интервала и не приводит к возврату каретки.
Очистка буфера печати строки CAN
Формат: | ||
символьный: | CAN | |
десятичный: | 24 | |
шестнадцатеричный: | 18 | |
клавиатурный: | CTRL+x |
Полная очистка буфера печати строки.
Выбор режима печати верхнего/нижнего индекса ESC S
Формат: | ||||
символьный: | ESC | S | n | |
десятичный: | 27 | 83 | n | |
шестнадцатеричный: | 1B | 53 | n |
В этом режиме все символы имеют высоту, равную 2/3 нормальной, и печатаются под обрез с верхним (n=0 или n=48) или нижним (n=1 или n=49) краем строки. В связи с малыми размерами символов печать происходит в режиме "двойного удара".
Отмена режима индекса ESC Т
Формат: | |||
символьный: | ESC | T | |
десятичный: | 27 | 84 | |
шестнадцатеричный: | 1B | 54 |
Отменяется режим печати индексов, установленный командами ESC S 0/1.
Выбор комбинации шрифтов ESC !
Формат: | ||||
символьный: | ESC | ! | n | |
десятичный: | 27 | 33 | n | |
шестнадцатеричный: | 1B | 21 | n |
Выбирается комбинация режимов печати, определяемая величиной n (для FX-80 n=0-63, для более поздних модификаций - n=0-255), имеющей побитовую кодировку (каждый бит отвечает за определенный режим печати). Установка бита в 1/0 определяет включение/выключение режима. Значение n определяется суммированием всех требуемых значений в соответствии с таблицей. 1.
Режим | Номер бита | Значение |
---|---|---|
Цицеро/элита | 0 | 0/1 |
Пропорциональный | 1 | 2 |
Уплотненный | 2 | 4 |
Выделенный | 3 | 8 |
"Двойной удар" | 4 | 16 |
С двойной шириной | 5 | 32 |
Курсив | 6 | 64 |
Подчеркивание | 7 | 128 |
В принтерах FX-80, LX-800/1000, Compute Mate-160 и др. бит 1 не задействован (в принтере FX-80, кроме того, не задействованы биты 6 и 7), следовательно, не включаются и соответствующие режимы. Эти биты при программировании указанных моделей принтеров должны быть установлены в ноль.
Правила совместимости режимов следующие:
- в пропорциональном режиме всегда включается выделенный режим;
- при выборе шага печати "элита" команды на включение режимов выделенной и уплотненной печати будут проигнорированы;
- пропорциональный режим имеет более высокий приоритет, чем уплотненный. При их одновременном выборе команда на включение уплотненной печати не будет выполнена.
В режиме пропорциональной печати каждый знак имеет свою ширину (в отличие от обычной печати, где все знаки имеют постоянную ширину независимо от начертания). Узкий знак при печати занимает меньше места, чем широкий. Таблица ширин знаков в разных принтерах может различаться.
В режиме "двойной удар" каждая строка печатается за два прохода, между которыми бумага продвигается на 1/216 дюйма. Этим достигается "жирное" начертание символов и выделение их на фоне остального текста.
В режиме выделенной печати каждая точка печатается дважды со смещением по горизонтали на 1/120 дюйма.
В режиме подчеркивания все символы, включая пробелы, подчеркиваются.
При плотности печати "цицеро" печатается 10 знаков на дюйм, "элита" - 12 знаков на дюйм, при уплотненной печати - 137 знаков в строке длиной 8 дюймов. Во всех трех случаях печать может осуществляться также с удвоенной шириной символов.
Выбор черновиковой/качественной печати ESC х
Формат: | ||||
символьный: | ESC | x | n | |
десятичный: | 27 | 120 | n | |
шестнадцатеричный: | 1B | 7B | n |
- n=0 или n=48 - включение черновикового шрифта;
- n=1 или n=49 - включение качественного шрифта (NLQ).
При выборе качественного шрифта печать каждой строки происходит за два прохода печатающей головки с передвижением бумаги на 1/216 дюйма между проходами. Благодаря этому достигается качество печати, близкое к машинописному (Near Letter Qality, сокращенно - NLQ); платой является значительное уменьшение скорости печати. На принтерах FX-800/1000 и LX-800 скорость печати в режиме NLQ составляет 40 и 25 знаков в секунду соответственно.
На принтерах LX-800/1000 и RAVI-8010M режим качественной печати NLQ возможен только для плотности печати "цицеро".
Выбор шрифта для качественной печати ESC k
Формат: | ||||
символьный: | ESC | k | n | |
десятичный: | 27 | 107 | n | |
шестнадцатеричный: | 1B | 6B | n |
- n=0 - выбор шрифта "роман";
- n=1 - выбор шрифта "сансериф".
В режиме качественной печати можно выбрать один из двух вариантов начертания символов с указанными выше названиями. Знаки шрифта "роман" более высокие и округленные, похожи на шрифт портативной пишущей машинки. Шрифт "сансериф" более строг, прямоуголен.
В принтерах RAVI-8010M и Compute Mate-160 эта команда не действует, так как у них есть только один качественный шрифт. Управление расстоянием между строк.
Минимальное расстояние, на которое можно продвинуть бумагу, равно 1/216 дюйма, т. е. около 0,118 мм. Соответствие между общепринятым в машинописи понятием интервала и дюймовым стандартом следующее:
- 1 интервал = 1/6 дюйма (36/216 дюйма);
- 1,5интервала = 1/4 дюйма (54/216 дюйма);
- 2 интервала = 1/3 дюйма (72/216 дюйма).
Существуют пять команд для установки величины интервала между строками; они приведены в таблице 2.
Код | Величина межстрочного интервала |
||
---|---|---|---|
Символьный | Десятичный | Шестнадцатеричный | |
ESC 0 | 27 48 | 1B 30 | 1/8 дюйма |
ESC 1 | 27 49 | 1B 31 | 7/72 дюйма |
ESC 2 | 27 50 | 1B 32 | 1/6 дюйма |
ESC 3 | 27 51 n | 1B 33 n | n/216 дюйма (n от 0 до 255) |
ESC A | 27 65 n | 1B 41 n | n/72 дюйма (n от 0 до 85) |
Для команды ESC 3 n при n=1 или n=2 фирма-производитель не гарантирует точность выполнения перевода строки. (Хотя автору по опыту работы известно о практически стопроцентной надежности выполнения перевода строки на 1/216 дюйма.)
Установка величины левого поля ESC l
Формат: | ||||
символьный: | ESC | l | n | |
десятичный: | 27 | 108 | n | |
шестнадцатеричный: | 1B | 6C | n |
Величина левого поля устанавливается равной n ширин символов, используемых в данный момент, и не изменяется при изменении плотности печати. Установка в пропорциональном режиме осуществляется, как в режиме "цицеро".
Максимальная величина левого поля (в знаках) определяется текущей плотностью печати:
- режим "цицеро" n < 79;
- режим "элита" n < 94;
- уплотненный режим n < 135 (для принтера с шириной валика 8 дюймов).
В режиме печати расширенных символов переменная n не должна превышать половины указанных значений.
Установка величины правого поля ESC Q
Формат: | ||||
символьный: | ESC | Q | n | |
десятичный: | 27 | 81 | n | |
шестнадцатеричный: | 1B | 51 | n |
Аналогична установке левого поля. Разрешенные диапазоны для переменной n для принтера с шириной валика 8 дюймов:
- режим "цицеро" n = 2 - 80;
- режим "элита" n = 3 - 96;
- уплотненный режим n = 4 - 137.
Минимальный интервал n между величинами правого и левого полей соответствует двум знакам шрифта "цицеро".
Установка длины страницы в строках ESC С
Формат: | ||||
символьный: | ESC | C | n | |
десятичный: | 27 | 67 | n | |
шестнадцатеричный: | 1B | 43 | n |
Установка длины страницы, равной n строк, n=1-127. Эта величина при последующих изменениях межстрочного интервала не изменяется.
Команды FF (переход к новой странице) и ESC N (пропуск поперечной перфорации) выполняются в соответствии с текущим значением длины страницы.
Установка длины страницы в дюймах ESC С 0
Формат: | |||||
символьный: | ESC | C | NUL | n | |
десятичный: | 27 | 67 | 0 | n | |
шестнадцатеричный: | 1B | 43 | 0 | n |
Установка длины страницы в дюймах, n=1-22. Команды перехода к новой странице и пропуска поперечной перфорации выполняются в соответствии с текущим значением длины страницы.
Установка абсолютной позиции печати ESC $
Формат: | |||||
символьный: | ESC | $ | n1 | n2 | |
десятичный: | 27 | 36 | n1 | n2 | |
шестнадцатеричный: | 1B | 24 | n1 | n2 |
Задание позиции для последующей печати. Позиция определяется, как расстояние в (n1+(n2*256))/60 дюймов от текущей позиции левого поля. При выходе за правое поле команда не выполняется.
У FX-80 и Compute Mate-160 эта команда отсутствует.
Выравнивание текста в процессе печати ESC а
Формат: | ||||
символьный: | ESC | a | n | |
десятичный: | 27 | 97 | n | |
шестнадцатеричный: | 1B | 61 | n |
Работает только в режиме качественной печати NLQ. Возможны следующие значения n:
- 0 - выравнивание текста по левому полю;
- 1 - центрирование текста;
- 2 - выравнивание текста по правому полю;
- 3 - полное выравнивание текста.
При включении питания выбирается режим, соответствующий n=0. Полное выравнивание (n=3) выполняется при заполнении буфера печати или при получении кодов CR, VT, LF, FF. При n=3 в пределах параграфа не должен передаваться код возврата каретки. Команды горизонтальной табуляции НТ и возврата каретки на один символ BS работают только в режиме n=0.
У FX-80 и RAVI-8010M эта команда отсутствует.
Установка режима курсива ESC 4
Выбирается таблица символов со шрифтом "курсив". На аппаратно русифицированных принтерах (т. е. со знакогенератором кириллицы, "зашитым" в ПЗУ) курсивом печатаются только знаки английского алфавита.
Печать курсивом производится на уменьшенной в два раза скорости.
Выбор таблицы символов ESC t
Формат: | ||||
символьный: | ESC | t | n | |
десятичный: | 27 | 116 | n | |
шестнадцатеричный: | 1B | 74 | n |
Выбор таблицы символов для знаков с кодами 128-255. При n=0 выбирается таблица курсива, при n=1 - таблица с графическими символами (сами графические символы в ней имеют коды с номерами 176-223).
У FX-80 и Compute Mate-160 эта команда отсутствует.
Расширение области печатаемых символов ESC I
Формат: | ||||
символьный: | ESC | I | n | |
десятичный: | 27 | 73 | n | |
шестнадцатеричный: | 1B | 49 | n |
При включении принтера или после его инициализации символы с десятичными кодами 0-31, 128-159 рассматриваются им как управляющие. Они становятся печатаемыми при n=1 и контрольными при n=0.
Команда ESC I 1 позволяет использовать указанные коды при программировании пользователем собственного знакогенератора.
Копирование таблицы символов из ПЗУ в ОЗУ ESC :
Формат: | ||||||
символьный: | ESC | : | NUL | NUL | NUL | |
десятичный: | 27 | 58 | 0 | 0 | 0 | |
шестнадцатеричный: | 1B | 3A | 0 | 0 | 0 |
Копирует всю таблицу символов (коды 0-255) из постоянной в оперативную память принтера. Это необходимо в тех случаях, когда пользователь собирается дополнить существующую таблицу ASCII-символов собственными символами.
Первая команда трехступенчатого процесса определения пользователем собственного набора символов.
Выбор набора символов ПЗУ/ОЗУ ESC %
Формат: | ||||
символьный: | ESC | % | n | |
десятичный: | 27 | 37 | n | |
шестнадцатеричный: | 1B | 25 | n |
- n=0 - таблица символов ПЗУ;
- n=1 - таблица символов ОЗУ.
Переключение между знакогенератором, постоянно хранящимся в ПЗУ, и тем, который записан в данный момент в ОЗУ.
Команда обычно выполняется вслед за командой копирования знакогенератора ESC: 0 0 0 в процессе определения пользователем собственных знаков.
Загрузка внешнего знакогенератора ESC &
Формат: | ||||||||||
символьный: | ESC | & | NUL | n | m | a | d1...d11 | e1...e11 | f1... | |
десятичный: | 27 | 37 | 0 | n | m | a | d1...d11 | e1...e11 | f1... | |
шестнадцатеричный: | 1B | 25 | 0 | n | m | a | d1...d11 | e1...e11 | f1... |
- n - код начального символа для программирования;
- m - код конечного символа для программирования;
- а - управляющая константа;
- d1...d11 - описание матрицы первого перепрограммируемого знака;
- e1...e11 - описание матрицы второго перепрограммируемого знака и т. д.
Перепрограммирует символы в знакогенераторе, находящемся в ОЗУ принтера.
Основные сведения о программировании собственного набора знаков приведены в статье А. Дмитриева в "ИНФО" № 2 и в данной публикации опущены.
Выбор графического режима с одинарной плотностью ESC К
Формат: | ||||||
символьный: | ESC | K | n1 | n2 | d1...dk | |
десятичный: | 27 | 75 | n1 | n2 | d1...dk | |
шестнадцатеричный: | 1B | 4B | n1 | n2 | d1...dk |
Выбирается режим графической печати с одинарной плотностью, равной 60 точкам на дюйм (максимальное число точек на строке принтера с шириной зоны печати 8 дюймов равно 480). С такой плотностью печатаются символы шрифтов "цицеро" и "элита".
В графических режимах пользователь сам управляет каждой из 8 игл печатающей головки. (Работа со всеми 9 иглами возможна с помощью команды ESC^.) Числа d1...dk несут в себе информацию о графическом образе, состоящем из k вертикальных колонок. Каждое число d в последовательности d1...dk содержит информацию о том, ударять или нет той или иной иглой в данной вертикальной колонке Число d имеет побитную кодировку, и его значение вычисляется исходя из таблице 3.
Номер иглы | Код | Положение в головке |
---|---|---|
1 | 128 | Самая верхняя игла |
2 | 64 | |
3 | 32 | |
4 | 16 | |
5 | 8 | |
6 | 4 | |
7 | 2 | |
8 | 1 | Вторая снизу игла |
При необходимости ударить той или иной иглой в данной вертикальной колонке нужно просуммировать соответствующие этим иглам коды; результат суммирования даст величину d.
Числа n1 и n2 указывают общее число вертикальных колонок в графическом образе. Они вычисляются по следующему правилу: n2 есть результат целочисленного деления числа данных на 256. a n1 - остаток от такого деления:
- n1 = <число колонок данных> MOD 256,
- n2 = <число колонок данных> DIV 256.
Например, если число колонок равно 400, то n2=1, n1=144.
При передаче графической команды могут быть допущены следующие ошибки:
- данных не хватает, т. е. число элементов в последовательности d1...dk меньше, чем n2*256+n1. В этом случае принтер остановится и будет ждать дополнительных данных;
- переданы избыточные данные, т. е. число элементов в последовательности d1...dk больше, чем n2*256+n1. В этом случае принтер сначала напечатает графический образ, затем вернется в текстовый режим и напечатает избыточную часть данных в виде текста, интерпретируя данные d как коды печатаемых символов.
Если число n2*256+n1 превышает предельно допустимое число колонок для данного графического режима, т. е. образ выходит за правый край поля печати, то лишние данные просто не будут напечатаны.
При печати на одной строке текста и графических образов надо учитывать ширину печатаемых символов. В таблице 4 приводятся данные о ширине (в точках одинарной плотности, равных 1/60 дюйма) одного символа в различных режимах печати.
Режим печати | Число точек |
---|---|
"Цицеро", "выделенный" | 6 |
"Элита" | 5 |
"Уплотненный" | 3,5 |
Выбор графически о режима с двойной плотностью ESC L
Формат: | ||||||
символьный: | ESC | L | n1 | n2 | d1...dk | |
десятичный: | 27 | 76 | n1 | n2 | d1...dk | |
шестнадцатеричный: | 1B | 4C | n1 | n2 | d1...dk |
Выбирается режим графической печати с двойной плотностью, равной 120 точкам на дюйм. Правила формирования n1, n2 и последовательности d1...dk аналогичны используемым в команде ESC К.
Печать производится с уменьшенной вдвое по сравнению с режимом "ESC К" скоростью.
Выбор графического режима с учетверенной плотностью ESC Z
Формат: | ||||||
символьный: | ESC | Z | n1 | n2 | d1...dk | |
десятичный: | 27 | 90 | n1 | n2 | d1...dk | |
шестнадцатеричный: | 1B | 5A | n1 | n2 | d1...dk |
Выбирается режим графической печати с учетверенной плотностью, равной 240 точкам на дюйм. Запрещается печать соседних по горизонтали точек. Правила формирования nl, п2 и последовательности dl...dk аналогичны используемым в команде ESC К.
Печать производится с уменьшенной вдвое по сравнению с режимом "ESC К" скоростью.
Сброс принтера ESC @
Формат: | |||
символьный: | ESC | @ | |
десятичный: | 27 | 64 | |
шестнадцатеричный: | 1B | 40 |
Сброс состояния принтера и очистка буфера строки. Принтер приходит в состояние, аналогичное состоянию после включения питания.
Звуковой сигнал BEL
Формат: | ||
символьный: | BEL | |
десятичный: | 7 | |
шестнадцатеричный: | 7 | |
клавиатурный: | CTRL+C |
Принтер выдает звуковой сигнал, тип и громкость которого зависят от типа принтера.
Отключение датчика конца бумаги ESC 8
Формат: | |||
символьный: | ESC | 8 | |
десятичный: | 27 | 56 | |
шестнадцатеричный: | 1B | 38 |
Отключается датчик конца бумаги. Команда не оказывает влияния на функционирование сигнального светодиода PAPER OUT на верхней панели управления принтера.
Используется для печати до конца листовой бумаги.
Включение датчика конца бумаги ESC 9
Формат: | |||
символьный: | ESC | 9 | |
десятичный: | 27 | 57 | |
шестнадцатеричный: | 1B | 39 |
Включается датчик конца бумаги.
При достижении позиции печати, отстоящей примерно на 3/4 дюйма от нижнего края листа бумаги, принтер переходит в автономный режим, что сопровождается погасанием индикатора ON LINE, зажиганием красного индикатора PAPER OUT на панели управления принтера и выдачей звукового сигнала.
Печать одной строки в одном направлении ESC <
Формат: | |||
символьный: | ESC | < | |
десятичный: | 27 | 60 | |
шестнадцатеричный: | 1B | 3C |
Печатающая головка возвращается в крайнюю левую позицию, после чего текущая строка из буфера печатается слева направо.
Режим используется для уменьшения горизонтальных искажений, всегда существующих из-за не идеальности печатающего механизма.
Печать в одном направлении ESC U
Формат: | |||
символьный: | ESC | < | |
десятичный: | 27 | 85 | |
шестнадцатеричный: | 1B | 55 |
- n=0 или n=48 - выбор двунаправленной печати;
- n=1 или n=49 - выбор однонаправленной печати.
Однонаправленный режим позволяет достичь более точного позиционирования печатающей головки относительно бумаги.
Таблицы символов
Все кодировки символов, принятые в нашей стране, имеют общую часть с кодами 0-127. Эта часть полностью заимствована из стандарта ASCII (American Standard Code for Information Interchange).
Различия существуют в стандартизации кириллицы и псевдографических символов, используемых для построения табличных рамок (коды 128-255).
В таблицах 1-6 приводятся стандарт ASCII (коды 0-127), а также наиболее распространенные стандарты кодировки кириллицы и символов псевдографики (коды 128-255).
Код | 00 | 10 | 20 | 30 | 40 | 50 | 60 | 70 |
---|---|---|---|---|---|---|---|---|
0 | NULL | SP | 0 | @ | P | ` | p | |
1 | DC1 | ! | 1 | A | Q | a | q | |
2 | DC2 | " | 2 | B | R | b | r | |
3 | DC3 | # | 3 | C | S | c | s | |
4 | DC4 | $ | 4 | D | T | d | t | |
5 | % | 5 | E | U | e | U | ||
6 | & | 6 | F | V | f | v | ||
7 | BEL | ' | 7 | G | W | g | w | |
8 | BS | CAN | ( | 8 | H | X | h | x |
9 | HT | EM | ) | 9 | I | Y | i | y |
A | LF | * | : | J | Z | j | z | |
B | VT | ESC | + | ; | K | [ | k | { |
C | FF | , | < | L | \ | l | | | |
D | CR | - | = | M | ] | m | } | |
E | SO | . | > | N | ^ | n | ~ | |
F | SI | / | ? | O | _ | o |
Код | 80 | 90 | A0 | B0 | C0 | D0 | E0 | F0 |
---|---|---|---|---|---|---|---|---|
0 | ю | п | Ю | П | ||||
1 | а | я | А | Я | ||||
2 | б | р | Б | Р | ||||
3 | ц | с | Ц | С | ||||
4 | д | т | Д | Т | ||||
5 | е | у | Е | У | ||||
6 | ф | ж | Ф | Ж | ||||
7 | г | в | Г | В | ||||
8 | х | ь | Х | Ь | ||||
9 | и | ы | И | Ы | ||||
A | й | з | Й | З | ||||
B | к | ш | К | Ш | ||||
C | л | э | Л | Э | ||||
D | м | щ | М | Щ | ||||
E | н | ч | Н | Ч | ||||
F | о | ъ | О | Ъ |
Код | 80 | 90 | A0 | B0 | C0 | D0 | E0 | F0 |
---|---|---|---|---|---|---|---|---|
0 | А | Р | а | р | Ё | |||
1 | Б | С | б | с | ё | |||
2 | В | Т | в | т | ||||
3 | Г | У | г | у | ||||
4 | Д | Ф | д | ф | ||||
5 | Е | Х | е | х | ||||
6 | Ж | Ц | ж | ц | ||||
7 | 3 | Ч | з | ч | ||||
8 | И | Ш | и | ш | ||||
9 | Й | Щ | й | щ | ||||
А | К | Ъ | к | ъ | ||||
В | Л | Ы | л | ы | ||||
С | М | Ь | м | ь | ||||
D | Н | Э | н | э | ||||
Е | О | Ю | о | ю | ||||
F | П | Я | п | я |
Код | 80 | 90 | A0 | B0 | C0 | D0 | E0 | F0 |
---|---|---|---|---|---|---|---|---|
0 | А | Р | а | р | Ё | |||
1 | Б | С | б | с | ё | |||
2 | В | Т | в | т | ||||
3 | Г | У | г | у | ||||
4 | Д | Ф | д | ф | ||||
5 | Е | X | е | х | ||||
6 | Ж | Ц | ж | ц | ||||
7 | 3 | Ч | 3 | ч | ||||
8 | И | Ш | и | ш | ||||
9 | Й | Щ | й | щ | ||||
А | К | Ъ | к | ъ | ||||
В | Л | Ы | л | ы | ||||
С | М | Ь | м | ь | ||||
D | Н | Э | н | э | ||||
Е | О | Ю | о | ю | ||||
F | П | Я | п | я |
Код | 80 | 90 | A0 | B0 | C0 | D0 | E0 | F0 |
---|---|---|---|---|---|---|---|---|
0 | О | Ю | о | ю | ||||
1 | А | П | Я | а | п | я | ||
2 | Б | Р | б | р | ||||
3 | В | С | в | с | ||||
4 | Г | Т | г | т | ||||
5 | Д | У | д | У | ||||
6 | Е | Ф | е | ф | ||||
7 | Ё | X | ё | х | ||||
8 | Ж | Ц | ж | ц | ||||
9 | 3 | Ч | з | ч | ||||
А | И | Ш | и | щ | ||||
В | Й | Щ | й | щ | ||||
С | К | Ъ | к | ъ | ||||
D | Л | Ы | л | ы | ||||
Е | М | Ь | м | ь | ||||
F | Н | Э | н | э |
1 | 2 | 3 | 1 | 2 | 3 | ||
---|---|---|---|---|---|---|---|
А | 128 | 176 | 225 | а | 160 | 208 | 193 |
Б | 129 | 177 | 226 | б | 161 | 209 | 194 |
В | 130 | 178 | 247 | в | 162 | 210 | 215 |
Г | 131 | 179 | 231 | г | 163 | 211 | 199 |
Д | 132 | 190 | 228 | д | 164 | 212 | 196 |
Е | 133 | 181 | 229 | е | 165 | 213 | 197 |
Ё | 240 | 240 | нет | ё | 241 | 241 | нет |
Ж | 134 | 182 | 246 | ж | 166 | 214 | 214 |
3 | 135 | 183 | 250 | з | 167 | 215 | 218 |
И | 136 | 184 | 233 | и | 168 | 216 | 201 |
Й | 137 | 185 | 234 | й | 169 | 217 | 202 |
К | 138 | 186 | 235 | к | 170 | 218 | 203 |
Л | 139 | 187 | 236 | л | 171 | 219 | 204 |
М | 140 | 188 | 237 | м | 172 | 220 | 205 |
Н | 141 | 189 | 238 | н | 173 | 221 | 206 |
О | 142 | 190 | 239 | о | 174 | 222 | 207 |
П | 143 | 191 | 240 | п | 175 | 223 | 208 |
Р | 144 | 192 | 242 | р | 224 | 224 | 210 |
С | 145 | 193 | 243 | с | 225 | 225 | 211 |
Т | 146 | 194 | 244 | т | 226 | 226 | 212 |
У | 147 | 195 | 245 | у | 227 | 227 | 213 |
Ф | 148 | 196 | 230 | ф | 228 | 228 | 198 |
X | 149 | 197 | 232 | х | 229 | 229 | 200 |
Ц | 150 | 198 | 227 | ц | 230 | 230 | 195 |
Ч | 151 | 199 | 254 | ч | 231 | 231 | 222 |
Ш | 152 | 200 | 251 | ш | 232 | 232 | 219 |
Щ | 153 | 201 | 253 | щ | 233 | 233 | 221 |
Ъ | 154 | 202 | 255 | ъ | 234 | 234 | 223 |
Ы | 155 | 203 | 249 | ы | 235 | 235 | 217 |
Ь | 156 | 204 | 248 | ь | 236 | 236 | 216 |
Э | 157 | 205 | 252 | э | 237 | 237 | 220 |
Ю | 158 | 206 | 224 | ю | 238 | 238 | 192 |
Я | 159 | 207 | 241 | я | 239 | 239 | 209 |
- альтернативная кодировка ГОСТ;
- основная кодировка ГОСТ;
- кодировка КОИ-8.