Deja Vu
#08
31 мая 1999 |
|
Тема - Принтер и ZX-Spectrum (система команд принтеров семейства Epson).
AY-Track: "Blue moon" in small remix :) __________________________________________ (C) Seiko EPSON corp. (C) ZK System/Excess team __________________________________________ Принтер и ZX-Spectrum Одними из более распространенных уст- ройств для получения твердой копии доку- ментов являются принтеры. Их существует великое множество, однако стандартом явля- ется система команд принтеров семейства Epson (tm). Обычно принтер подключается к компьюте- ру через разъем паралельного интерфейса (LPT). ┌───────┬───────┬───────┬─┬────────────────────────────────────┐ │ Штырь │Возвращ│Сигнал │Н│ Пояснения │ │сигнала│ штырь │ │ │ │ ├───────┼───────┼───────┼─┼────────────────────────────────────┤ │ 1 │ 19 │/STROBE│O│Сигнал СТРОБ означает чтение данных.│ │ │ │ │ │Ширина сигнала не должна быть более │ │ │ │ │ │0.5 мкс на принимающем терминале. │ ├───────┼───────┼───────┼─┼────────────────────────────────────┤ │ 2 │ 20 │ DATA0 │O│ Данные сигналы представляют парал- │ │ 3 │ 21 │ DATA1 │O│лельные биты с 0 по 7 соответственно│ │ 4 │ 22 │ DATA2 │O│Высокий уровень соответствует лог.1,│ │ 5 │ 23 │ DATA3 │O│а низкий - лог.0 │ │ 6 │ 24 │ DATA4 │O│ │ │ 7 │ 25 │ DATA5 │O│ │ │ 8 │ 26 │ DATA6 │O│ │ │ 9 │ 27 │ DATA7 │O│ │ ├───────┼───────┼───────┼─┼────────────────────────────────────┤ │ 10 │ 28 │/ACKNLG│I│ Сигнал длит. 12 мкс. Низкий уровень│ │ │ │ │ │означает, что данные приняты и прин-│ │ │ │ │ │тер готов к приему дальнейшей инфор-│ │ │ │ │ │мации. │ ├───────┼───────┼───────┼─┼────────────────────────────────────┤ │ 11 │ 29 │ BUSY │I│ Высокий сигнал означает, что прин- │ │ │ │ │ │тер не может принять данные. Сигнал │ │ │ │ │ │является высоким │ │ │ │ │ │ в следующих случаях : │ │ │ │ │ │1) Во время приема данных. │ │ │ │ │ │2) Во время печати. │ │ │ │ │ │3) При ошибке. │ ├───────┼───────┼───────┼─┼────────────────────────────────────┤ │ 12 │ 30 │ PE │I│ Высокий уровень сигнала означает, │ │ │ │ │ │что в принтере кончилась бумага. │ ├───────┼───────┼───────┼─┼────────────────────────────────────┤ │ 13 │ ----- │ ------│-│ Находится под напряжением +5 V, │ │ │ │ │ │ Сопротивлением 3.3 кОм. │ ├───────┼───────┼───────┼─┼────────────────────────────────────┤ │ 14 │ ----- │ /AUTO │O│ При низком уровне сигнала бумага │ │ │ │FEED XT│ │автоматически переводится на одну │ │ │ │ │ │строку после печати. │ ├───────┼───────┼───────┼─┼────────────────────────────────────┤ │ 15 │ ----- │ NC │-│ Не используется. │ ├───────┼───────┼───────┼─┼────────────────────────────────────┤ │ 16 │ ----- │ 0 V │-│ Логическое заземление. │ ├───────┼───────┼───────┼─┼────────────────────────────────────┤ │ 17 │ ----- │CHASSIS│-│ Заземление на шасси принтера, │ │ │ │ GND │ │изолировано от логического. │ ├───────┼───────┼───────┼─┼────────────────────────────────────┤ │ 18 │ ----- │ NC │-│ Не используется. │ ├───────┼───────┼───────┼─┼────────────────────────────────────┤ │ 19-30 │ ----- │ GND │-│ Спаренный возвращающий сигнал │ │ │ │ │ │заземления. │ ├───────┼───────┼───────┼─┼────────────────────────────────────┤ │ 31 │ ----- │ /INIT │O│ Когда уровень сигнала становится │ │ │ │ │ │низким, контроллер принтера сбрасы- │ │ │ │ │ │вается в состояние загрузки,и буфер │ │ │ │ │ │печати очищается. Нормальный уровень│ │ │ │ │ │сигнала - высокий; ширина сигнала │ │ │ │ │ │должна быть более 50 мкс. на прини- │ │ │ │ │ │мающем терминале. │ ├───────┼───────┼───────┼─┼────────────────────────────────────┤ │ 32 │ ----- │/ERROR │I│ Уровень становится низким когда: │ │ │ │ │ │1) В принтере кончается бумага. │ │ │ │ │ │2) Принтер отключен от линии. │ │ │ │ │ │3) При ошибке. │ ├───────┼───────┼───────┼─┼────────────────────────────────────┤ │ 33 │ ----- │ GND │-│ Такой же как и 19-30 │ ├───────┼───────┼───────┼─┼────────────────────────────────────┤ │ 34 │ ----- │ NC │-│ Не используется. │ ├───────┼───────┼───────┼─┼────────────────────────────────────┤ │ 35 │ ----- │ ------│-│ Находится под напряжением +5 V, │ │ │ │ │ │cопротивлением 3.3 кОм. │ ├───────┼───────┼───────┼─┼────────────────────────────────────┤ │ 36 │ ----- │/SEL IN│O│ Код DC1/DC3 действителен, когда │ │ │ │ │ │этот сигнал "высокий" по уровню. │ └───────┴───────┴───────┴─┴────────────────────────────────────┘ В Speccy интерфейс LPT имеет несколько упрощенную схему. Для обмена используется восемь линий данных (D0-D7), линия сигнала стробирования данных (Strobe), линия опро- са занятости принтера (Busy) и, конечно, нулевого провода (GND), иногда, что не совсем обязательно, линия /ERROR. Speccy Printer 8 D0...D7 ============/========== D0...D7 /STROBE ----------------------- /STROBE /ERROR ----------------------- /ERROR BUSY ----------------------- BUSY GND ----------------------- GND Принтер представляет из себя компьютер со своим ОЗУ, ПЗУ и процессором, который управляет обменом информации, ее обработ- кой, перемещением печатающей головки, вер- тикальным движением листа и, конечно, пе- чатающими иголками. В ОЗУ принтера отведен небольшой буфер, в который вводятся извне данные, которые необходимо напечатать. Загрузка данных в принтер производится следующим образом: На линию данных LPT порта выводится требуемый байт, после чего нужно проверить состояние линии BUSY, если она активна, то это значит, что буфер принтера перепол- нен или произошла ошибка. Если BUSY не ак- тивна, то принтер готов к приему очередно- го байта данных. А так, как байт уже сфор- мирован, то остается его подтвердить стро- бирующим импульсом на линии /STROBE. Для интерфейса ZX-Lprint III драйвер будет иметь следующий вид: org #5b00 nop jr detect jr init jr output detect ld b,0 ;программа проверки ;наличия принтера и dlp in a,(#7b) ;его готовности ;к работе and #80 ret z djnz dlp ret ;если при выходе А=0, ;то принтер готов init nop ;обычно здесь ничего nop ;не пишут output push af ;программа вывода ;байта в принтер out (#fb),a ;выставляем байт на ;линию данных LPT busy call #1f54 ;опрос клавиши BREAK. ;Это нужно, чтобы jr nc,error ;избежать зависания ;при ошибке. in a,(#7b) ;проверяем линию BUSY rlca jr c,busy ;если занято, то ждем, ;пока не освободится pop af out (#fb),a ;Сброс Strobe out (#7b),a ;Активизация Strobe out (#fb),a ;Сброс Strobe and a ;нормальный выход ;из программы ret error pop af ;выход с устновленным ;CF флагом scf ;если ошибка. ret Некоторые принтеры очень чувствительны к длительности сигнала Strobe. Например, для моего Epson(tm) LX-800(tm ) сигнал Strobe срабатывает по переднему или задне- му фронту сигнала, и для нормальной работы сигнал Strobe должен формироваться следую- щим образом: ... out (#fb),a out (#7b),a ... При этом, первый введенный байт после включения принтера будет проигнорирован! Во избежание утраты логической цепочки необходимо первым послать какую-нибудь безвредную однобайтную команду, например, BEL (#07) - звуковой сигнал. При написании драйвера для ZX-Lprint III необходимо помнить, что команда in a, (#fb) подключает ПЗУ ZX-Lprint III, а in a,(#7b) - отключает. Далее привожу описание команд Epson(tm) совместимых принтеров. На некоторых прин- терах могут не работать команды установки кодировок и работа с NLQ шрифтами. Команда ESC означает, что команда ESC n будет иметь вид #1B,n. 1. Работа принтера. ASCII HEX Oписание ─────────────────────────────────────────────────────────────── ESC @ 40 Инициализация принтера DC1 11 Выбрать принтер DC2 13 Отменить выбор принтера ESC s 1/0 73 Вклвыкл половинной скорости ESC < 3C Выбор однонаправленной печати (для 1ой строки) ESC U 1/0 55 Вклвыкл однонаправленной печати ESC 8 38 Отключить определение отсутствия бумаги ESC 9 39 Включить определение отсутсвия бумаги ESC EM n 19 Контроль загрузкивыгрузки бумаги n="0": Выключен "1": Выбрать приемник 1 "2": Выбрать приемник 2 "4": Включен "R": Выгрузить лист ESC = 3D Установить MSB в 0 ESC > 3E Установить MSB в 1 ESC # 23 Выключить MSB контроль BEL 07 Звонок 2. Управление данными. ASCII HEX Oписание ─────────────────────────────────────────────────────────────── CR 0D Возврат каретки CAN 18 Отменить строку DEL 7F Удалить символ 3. Вертикальное движение. ASCII HEX Oписание ─────────────────────────────────────────────────────────────── FF 0C Прогон листа ESC C n 43 Установка длины страницы в строках n=1-127 ESC C 0 n 43 Установка длины страницы в дюймах n=1-22 ESC N n 4E Установка пропуска перфорации n=1-127 ESC O 4F Отмена пропуска перфорации LF 0A Перевод строки ESC 0 3 Межстрочный интервал 1/8 дюйма ESC 1 31 Межстрочный интервал 7/72 дюйма ESC 2 32 Межстрочный интервал 1/6 дюйма ESC 3 n 33 Межстрочный интервал n/216 дюйма n=0-255 ESC A n 41 Межстрочный интервал n/72 дюйма n=0-85 ESC J n 4A Перевод строки на n/216 дюйма n=0-255 VT 0B Вертикальная табуляция ESC B nn 42 Установка вертикальной табуляции. До 16-и точек табуляции (1-255) в возрастающем порядке; последний параметр должен быть 0. ESC B 0 очищает все табуляции. ESC b nn 62 Установка вертикальной табуляции в каналах. ESC b c n1 n2 ... n16 0. c=0-7 ESC / c 2F Выбор канала для вертикальной табуляции с=0-7. 4. Горизонтальное движение. ASCII HEX Oписание ─────────────────────────────────────────────────────────────── ESC 1 n 6C Установка левого поля n=количество колонок ESC Q n 51 Установка правого поля n=количество колонок BS 08 Забой символа ESC $ n1 n2 24 Установка абсолютной горизонтальной позиции n=(n1+n2*256)/60 дюймов. n: Положение печати на расстоянии n/60 дюймов от левого поля. ESC / n1 n2 5C Установка относительной горизонтальной позиции n=(n1+n2*256)/120 дюймов n: Перевод положения печати на n/120 дюймов. Если перевод осуществляется влево, вычтите это число из 65536. HT 09 Горизонтальная табуляция. ESC D nn 44 Установка горизонтальной табуляции до 32 точек (1-255) в возрастающем порядке. 5. Стили печати. ASCII HEX Oписание ─────────────────────────────────────────────────────────────── ESC x n 78 Выбор NLQ или Draft n=0: Draft 1: NLQ ESC k n 6B Выбор шрифта высококачественной печати n=0: Roman 1: Sans Serif ESC ! n 21 Выбор набора символов n= бит 0: 10 знд/12 знд 1: пропорциональный 2: уплотненный 3: выделенный 4: двойной удар 5: двойная ширина 6: курсив 7: подчеркивание 6. Шаг и размер знака. ASCII HEX Oписание ─────────────────────────────────────────────────────────────── ESC P 50 Выбор режима 10 знд ESC M 4D Выбор режима 12 знд ESC p 1/0 70 Bклвыкл пропорционального режима SI 0F Включение плотной печати ESC SI 0F Выключение плотной печати DC2 12 Отмена уплотненного режима SO 0E Включение режима двойной ширины (на одной строке) ESC SO 0E Включение режима двойной ширины (на одной строке) DC4 14 Выключение режима двойной ширины (на одной строке) ESC W 1/0 57 Вклвыкл режим двойной ширины ESC w 1/0 77 Вклвыкл режим двойной ширины 7. Расширение возможностей печати. ASCII HEX Oписание ─────────────────────────────────────────────────────────────── ESC E 45 Вкл. режима выделенной печати ESC F 46 Выкл. режима выделенной печати ESC G 47 Вкл. режима печати за два прохода ESC H 48 Выкл. режима печати за два прохода ESC S0 53 Вкл. печати верхними индексами ESC S1 53 Вкл. печати нижними индексами ESC T 54 Выкл. печати индексами ESC 4 34 Вкл. курсива ESC 5 35 Выкл. курсива ESC - 1/0 2D Вклвыкл режим подчеркивания ESC a n 61 Выравнивания шрифта n=0:Влево 1:В центр 2:Вправо 3:На формат ESC SP n 20 Установка расстояния между символами n=1/120 дюймов пробелов (1-127) справа от каждого символа 8. Таблицы символов ASCII HEX Oписание ─────────────────────────────────────────────────────────────── ESC t n 74 Выбор таблицы символов Выбор таблицы n, назначенной командой ESC (t n=0,1,48, или 49 ESC R n 52 Выбор международного набора символов n= 0:США 7:Испания 1 1:Франция 8:Япония 2:Германия 9:Норвегия 3:Англия 10:Дания 2 4:Дания 1 11:Испания 2 5:Швеция 12:Латинская Америка 6:Италия ESC 6 36 Расширение области печати кодов, позволяет печатать коды 128-159 как символы ESC 7 37 Выкл. ESC 6 ESC (t nn 28 74 Выбор таблицы символов ESC (t 3 d1 d2 d3 Назначает таблицу знаков с d2 d3 таблицей, установленной ESC t в соответствии с d1 d1=0: Назначить таблицей выбранной ESC t 0 d1=1: Назначить таблицей выбранной ESC t 1 d2 d3 Таблицы символов 0 0 Курсив 1 0 PC 437 (США, стандарт Европа) 14 0 PC 866 (Русская) 15 0 PC 869 (Греческая) 32 0 Болгария 9. Определяемые пользователем знаки. ASCII HEX Oписание ─────────────────────────────────────────────────────────────── ESC & nn 26 Определить пользовательские символы ESC & 0 n1 n2 a1 data n1= ASCII код первого символа n2= ASCII код последнего символа a1= Байт атрибутов, указывающий ширину и используеиые иголки data: данные символа ESC : 0 n 0 3A Скопировать символы в RAM из ROM n=0: Roman n=1: Sans Serif ESC % n 25 Выбор набора символов n=0: Нормальный набор 1: Пользовательский набор ESC I n 49 Расширение области печатыемых кодов Десятичные коды от 0 до 31 и от 128 до 159 n=0: Непечатыемые коды 1: Печатаемые коды для пользовательских символов 10. Графика. ASCII HEX Oписание ─────────────────────────────────────────────────────────────── ESC K n1 n2 4B Вкл. режима нормальной плотности ESC K n1 n2 data n=n1+n2*256 ESC L n1 n2 4C Вкл. режима двойной плотности ESC L n1 n2 data ESC Y n1 n2 59 Вкл. режима двойной плотности, высокой скорости ESC Y n1 n2 data ESC Z n1 n2 5A Вкл. режима учетверенной плотности ESC Y n1 n2 data ESC * mn 2A Выбор графического режима ESC * m n1 n2 data ┌────────────────────────────────┬───────┬───┬─────┐ │ Графический режим │ Код │ m │ DPI │ │ │ │ │ │ │ Нормальная плотность │ ESC K │ 0 │ 60 │ │ Двойная плотность │ ESC L │ 1 │ 120 │ │ Высокоскор. двойная плотность* │ ESC Y │ 2 │ 120 │ │ Учетверенная плотность* │ ESC Z │ 3 │ 240 │ │ CRT 1 │ нет │ 4 │ 80 │ │ Графопостроитель (1:1) │ нет │ 5 │ 72 │ │ CRT 2 │ нет │ 6 │ 90 │ │ Графопостроитель (1:2) │ нет │ 7 │ 144 │ └────────────────────────────────┴───────┴───┴─────┘ * Смежные точки не могут быть отпечатаны. ASCII HEX Oписание ─────────────────────────────────────────────────────────────── ESC ? s m 3F Переназначить графический режим ESC ? s m s=K,L,Y, или Z m=0-7 m: графический режим для изменения m=ESC * m ESC ^ 5E Выбор режима графики с девятью иголками ESC ^ m n1 n2 data m=0: Нормальная плотность 1: Двойная плотность n=n1+n2*256 data = (n*2) ─────────────────────────────────────────────────────────────── Следует отметить, что введенные в буфер принтера данные будут активизированы только после того, как будет послана ко- манда возврата каретки CR (#0D). Это нужно для команд управления данными буфера прин- тера CAN (#18) и DEL (#7F).
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября