А. Девятов

Программирование 9-игольчатых матричных Принтеров семейства Epson

Данная статья предназначается в первую очередь пользователям ПК "Корвет", однако будет полезна всем, имеющим дело с Epson-совместимыми и близкими к ним принтерами. Полное описание системы команд принтера Epson довольно велико, поэтому в журнальном варианте оставлены лишь наиболее употребимые команды.

Матричные принтеры являются неотъемлемой частью любого аппаратно-программного комплекса на базе персонального компьютера. Наиболее доступны и поэтому распространены принтеры, головка которых содержит 9 иголок.

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

Несмотря на внешнюю простоту, принтер является весьма сложным устройством. По сути это специализированная микро-ЭВМ с собственным микропроцессором, ПЗУ и ОЗУ, каналом ввода данных и управления, внешними исполнительными устройствами в виде двух шаговых двигателей и печатающей головки.

Признанным лидером в сфере разработки и производства матричных принтеров является фирма Seiko Epson (Япония). Именно ей удалось в свое время разработать удачный набор команд для программирования режимов таких принтеров и продать большое количество своих принтеров на рынке компьютерной техники.

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

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

Характеристики принтеров семейства Epson

Матричные принтеры характеризуются следующими основными техническими параметрами: скоростью печати, размером основного буфера печати, наличием или отсутствием режима печати, близкого по качеству к шрифту портативной пишущей машинки, наличием или отсутствием "зашитого" в ПЗУ принтера знакогенератора русского алфавита (кириллицы).

В таблице 1 приведены основные технические характеристики распространенных в нашей стране 9-игольчатых матричных Ерson-совместимых принтеров.

Таблица 1. Технические характеристики принтеров
Тип принтера Скорость
печати,
зн/с*
Знакогенератор
кириллицы
Режим
печати
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.

Таблица 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-последовательности
Последовательность Ее действие
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.

Таблица 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

При выборе качественного шрифта печать каждой строки происходит за два прохода печатающей головки с передвижением бумаги на 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

В режиме качественной печати можно выбрать один из двух вариантов начертания символов с указанными выше названиями. Знаки шрифта "роман" более высокие и округленные, похожи на шрифт портативной пишущей машинки. Шрифт "сансериф" более строг, прямоуголен.

В принтерах RAVI-8010M и Compute Mate-160 эта команда не действует, так как у них есть только один качественный шрифт. Управление расстоянием между строк.

Минимальное расстояние, на которое можно продвинуть бумагу, равно 1/216 дюйма, т. е. около 0,118 мм. Соответствие между общепринятым в машинописи понятием интервала и дюймовым стандартом следующее:

Существуют пять команд для установки величины интервала между строками; они приведены в таблице 2.

Таблица 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 не должна превышать половины указанных значений.

Установка величины правого поля ESC Q
Формат:  
символьный: ESC   Q n
десятичный: 27 81   n
шестнадцатеричный:  1B 51 n

Аналогична установке левого поля. Разрешенные диапазоны для переменной n для принтера с шириной валика 8 дюймов:

Минимальный интервал 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:

При включении питания выбирается режим, соответствующий 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

Переключение между знакогенератором, постоянно хранящимся в ПЗУ, и тем, который записан в данный момент в ОЗУ.

Команда обычно выполняется вслед за командой копирования знакогенератора 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...

Перепрограммирует символы в знакогенераторе, находящемся в ОЗУ принтера.

Основные сведения о программировании собственного набора знаков приведены в статье А. Дмитриева в "ИНФО" № 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.

Таблица 3
Номер иглы Код Положение в головке
1 128 Самая верхняя игла
2 64
3 32
4 16
5 8
6 4
7 2
8 1 Вторая снизу игла

При необходимости ударить той или иной иглой в данной вертикальной колонке нужно просуммировать соответствующие этим иглам коды; результат суммирования даст величину d.

Числа n1 и n2 указывают общее число вертикальных колонок в графическом образе. Они вычисляются по следующему правилу: n2 есть результат целочисленного деления числа данных на 256. a n1 - остаток от такого деления:

Например, если число колонок равно 400, то n2=1, n1=144.

При передаче графической команды могут быть допущены следующие ошибки:

Если число n2*256+n1 превышает предельно допустимое число колонок для данного графического режима, т. е. образ выходит за правый край поля печати, то лишние данные просто не будут напечатаны.

При печати на одной строке текста и графических образов надо учитывать ширину печатаемых символов. В таблице 4 приводятся данные о ширине (в точках одинарной плотности, равных 1/60 дюйма) одного символа в различных режимах печати.

Таблица 4
Режим печати Число точек
"Цицеро", "выделенный" 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

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

Таблицы символов

Все кодировки символов, принятые в нашей стране, имеют общую часть с кодами 0-127. Эта часть полностью заимствована из стандарта ASCII (American Standard Code for Information Interchange).

Различия существуют в стандартизации кириллицы и псевдографических символов, используемых для построения табличных рамок (коды 128-255).

В таблицах 1-6 приводятся стандарт ASCII (коды 0-127), а также наиболее распространенные стандарты кодировки кириллицы и символов псевдографики (коды 128-255).

Таблица 1. Стандарт ASCII (общая часть всех кодировок)
Код0010203040506070
0NULLSP0@P`p
1DC1!1AQaq
2DC2"2BRbr
3DC3#3CScs
4DC4$4DTdt
5%5EUeU
6&6FVfv
7BEL'7GWgw
8BSCAN(8HXhx
9HTEM)9IYiy
ALF*:JZjz
BVTESC+;K[k{
CFF,<L\l|
DCR-=M]m}
ESO.>N^n~
FSI/?O_o
Таблица 2. Код кириллицы КОИ-8
Код8090A0B0C0D0E0F0
0юпЮП
1аяАЯ
2брБР
3цсЦС
4дтДТ
5еуЕУ
6фжФЖ
7гвГВ
8хьХЬ
9иыИЫ
AйзЙЗ
BкшКШ
CлэЛЭ
DмщМЩ
EнчНЧ
FоъОЪ
Таблица 3. Основная кодировка ГОСТ кириллицы
Код8090A0B0C0D0E0F0
0АРарЁ
1БСбсё
2ВТвт
3ГУгу
4ДФдф
5ЕХех
6ЖЦжц
73Чзч
8ИШиш
9ЙЩйщ
АКЪкъ
ВЛЫлы
СМЬмь
DНЭнэ
ЕОЮою
FПЯпя
Таблица 4. Альтернативная кодировка ГОСТ кириллицы
Код8090A0B0C0D0E0F0
0АРа рЁ
1БСб сё
2ВТв т
3ГУг у
4ДФд ф
5ЕXе х
6ЖЦж ц
73Ч3 ч
8ИШи ш
9ЙЩй щ
АКЪк ъ
ВЛЫл ы
СМЬм ь
DНЭн э
ЕОЮо ю
FПЯп я
Таблица 5.Кодировка кириллицы в принтере "Ravi-8010M"
Код8090A0B0C0D0E0F0
0 ОЮ ою
1 АПЯапя
2 БР бр
3 ВС вс
4 ГТ гт
5 ДУ дУ
6 ЕФ еф
7 ЁX ёх
8 ЖЦ жц
9 3Ч зч
А ИШ ищ
В ЙЩ йщ
С КЪ къ
D ЛЫ лы
Е МЬ мь
F НЭ нэ
Таблица 6. Объединенная таблица кодировок кириллицы
123123
А128176225а160208193
Б129177226б161209194
В130178247в162210215
Г131179231г163211199
Д132190228д164212196
Е133181229е165213197
Ё240240нетё241241нет
Ж134182246ж166214214
3135183250з167215218
И136184233и168216201
Й137185234й169217202
К138186235к170218203
Л139187236л171219204
М140188237м172220205
Н141189238н173221206
О142190239о174222207
П143191240п175223208
Р144192242р224224210
С145193243с225225211
Т146194244т226226212
У147195245у227227213
Ф148196230ф228228198
X149197232х229229200
Ц150198227ц230230195
Ч151199254ч231231222
Ш152200251ш232232219
Щ153201253щ233233221
Ъ154202255ъ234234223
Ы155203249ы235235217
Ь156204248ь236236216
Э157205252э237237220
Ю158206224ю238238192
Я159207241я239239209
  1. альтернативная кодировка ГОСТ;
  2. основная кодировка ГОСТ;
  3. кодировка КОИ-8.