Amstrad/Schneider Printer Control Codes

From CPCWiki - THE Amstrad CPC encyclopedia!
Revision as of 18:04, 8 September 2010 by Nocash (Talk | contribs) (NLQ401 Control Codes)

Jump to: navigation, search
DMP4000 Mechanics.jpg


DMP1 Control Codes

Hex Decimal ASCII Type Description
0A 10 LF Misc CR+LF
0D 13 CR Misc CR or CR+LF (selectable via DIP-switch)
0E 14 SO Width Double Width Mode (also restores 1/6" line feed rate; after graphics printing)
0F 15 SI Width Normal Width Mode (also restores 1/6" line feed rate; after graphics printing)
10,hi,lo 16,hi,lo DLE "NN" Misc Print Position in character units (NN = two-digit ASCII, "00..79")
14 20 DC4 Misc CR
1B,10,hi,lo 27,16,hi,lo ESC DLE hi lo Misc Print Position in dot units (hi:lo = 9bit binary, 0..479) (lo=lower 7bit, hi=upper 2bit)
1B,4B,hi,lo,gfx0,gfx1,.. 27,75,hi,lo,gfx0,gfx1,.. ESC "K" ... Graphics Graphics Mode (hi:lo = 9bit count, 0..479) (lo=lower 7bit, hi=upper 2bit) (followed by as many bytes, with bit0=upper pixel .. bit6=lower pixel). This command additionally changes the line feed rate to 1/9 inch; the new rate is kept applied for text and graphics (until canceled by chr 0Eh/0Fh).
1C,num,gfx 28,num,gfx FD,num,gfx Graphics Repetition of one byte of graphic print data (num=1..127 repeat count) (gfx: bit0=upper pixel .. bit6=lower pixel)

NLQ401 Control Codes

The NLQ401 supports a fraction of the Epson control code set, plus some NLQ401-specific, non-Epson codes. The missing Epson codes include both newer codes, as well as older ones (like custom TAB channels, which are supported even by very old Epsons from 1981).

Caution: The NLQ401 firmware strips Bit7 of all incoming characters, so one is restricted to use 7bit codes, even if one does own an 8bit Printer Port. Accordingly, only 7-pin graphics can be used, and some numeric parameters cannot be set to values with bit7=1.

Hex Decimal ASCII Type Description
09 9 HT Tab Horizontal tab
0A 10 LF Feed Line Feed (move to next line)
0B 11 VT Feed NLQ401-specific: acts as mirror of LF (non-Epson code)
0C 12 FF Feed Form Feed (move to next page)
0D 13 CR Misc Carriage Return
0E 14 SO Text Style Select double width for one line (unlike ESC W 0/1 continous)
0F 15 SI Text Style Select condensed mode
12 18 DC2 Text Style Cancel condensed mode
14 20 DC4 Text Style Cancel one line double width mode (unlike ESC W 0/1 continous)
18 24 CAN Misc Cancel text in line (but not control codes)
1B 2D n 27 45 n ESC "-" n Text Style Underlining ON/OFF (00h=off, 01h=on)
1B 30 27 48 ESC "0" Feed Select 9/72 inch aka 1/8 inch line spacing
1B 31 27 49 ESC "1" Feed Select 7/72 inch line spacing
1B 32 27 50 ESC "2" Feed Select 12/72 inch aka 1/6 inch line spacing

NLQ401-specific: Can be DIP-switched to other spacing

1B 33 n 27 51 n ESC "3" n Feed Select n/216 inch line spacing (n=0..255)
NLQ401-restriction: supports only 7bit (n=0..127)
1B 36 27 54 ESC "6" Char Code NLQ401-specific: Use German charset
1B 37 27 55 ESC "7" Char Code NLQ401-specific: Use US-ASCII charset
1B 38 27 56 ESC "8" Misc Disable paper out sensor
1B 39 27 57 ESC "9" Misc Enable paper out sensor
1B 3C 27 60 ESC "<" Misc Select unidirectional mode for one line (Move head home/parking)
1B 3D .. 00 27 61 ... 0 ESC "=" ... 0 Char Code NLQ401-specifc: Print all following chr(01h..7Fh) as chr(81h..FFh) using CPC-style symbol; use chr(00h) to return to normal mode
1B 41 n 27 65 n ESC "A" n Feed Select n/72 inch line spacing (n=0..85)
1B 43 00 n 27 67 0 n ESC "C" NUL n Feed Select page length in inches (n=1..22)
1B 43 n 27 67 n ESC "C" n Feed Select page length in lines (n=1..127)
1B 44 00 27 68 0 ESC "D" NUL ? Unknown: Epson would define horizontal tabs - but might be another NLQ401-specific command
1B 45 27 69 ESC "E" Text Style Select emphasized (bold) mode
1B 46 27 70 ESC "F" Text Style Cancel emphasized (bold) mode
1B 47 27 71 ESC "G" Text Style Select double strike mode (also an bold-alike effect)
1B 48 27 72 ESC "H" Text Style Cancel double strike mode (also an bold-alike effect)
1B 49 n 27 73 n ESC "I" n Text Style NLQ401-specific: Select Draft/NLQ mode (01h=Draft, 03h=NLQ) (for Epson-compatibility, better use the ESC "x" code)
1B 4A n 27 74 n ESC "J" n Feed Perform One-shot n/216 inch line feed (n=0..255)
NLQ401-restriction: supports only 7bit (n=0..127)
1B 4B n1 n2 .. 27 75 n1 n2 .. ESC "K" n1 n2 .. Graphics Single 8pin density graphics (60 dpi) (n2:n1 = num bytes following) (480 dots/line)
NLQ401-restriction: supports only 7bit, ie. only 7-pins, and n1 cannot have bit7=1
1B 4C n1 n2 .. 27 76 n1 n2 .. ESC "L" n1 n2 .. Graphics Double 8pin density graphics (120 dpi) (960 dots/line)
NLQ401-restriction: supports only 7bit, ie. only 7-pins, and n1 cannot have bit7=1
1B 4E n 27 78 n ESC "N" n Feed Select skip over perforation (n=1..127 lines)
1B 4F 27 79 ESC "O" Feed Cancel skip over perforation
1B 53 n 27 83 n ESC "S" n Text Style Select superscript/subscript (00h=Superscript, 01h=Subscript)
1B 54 27 84 ESC "T" Text Style Cancel superscript/subscript
1B 55 n 27 85 n ESC "U" n Misc Unidirectional mode (00h=Off, faster, use bidirectional printing - 01h=On, slower, left-to-right, more accurate on vertical lines)
1B 57 n 27 87 n ESC "W" n Text Style Duble width mode ON/OFF (continous) (unlike DC4: one line) (00h=off, 01h=on)
1B 59 n1 n2 .. 27 89 n1 n2 ESC "Y" n1 n2 Graphics Select 8pin Hi-speed double den graphics (120 dpi)
NLQ401-restriction: supports only 7bit, ie. only 7-pins, and n1 cannot have bit7=1
1B 5A n1 n2 .. 27 90 n1 n2 ESC "Z" n1 n2 Graphics Select 8pin Quad density graphics (240 dpi) (1920 dots/8"line)
NLQ401-restriction: supports only 7bit, ie. only 7-pins, and n1 cannot have bit7=1
1B 78 n 27 120 n ESC "x" n Text Style Select Draft/NLQ mode (00h=Draft, 01h=NLQ)
7F 127 DEL Misc Delete last character from buffer (but not control codes) (works only when buffer isn't yet printer; printing usually starts on terminating lines via CRLF)

Not confirmed if supported by NLQ401

DMP2xxx/3xxx Printer Codes (sorted by number)

Hex Decimal ASCII Type Description
07 7 BEL Misc Beeper (produce beep sound, can be disabled via DIP-switch)
08 8 BS Misc Backspace (move print head left by one character unit, allowing to overwrite characters)
09 9 HT Tab Horizontal tab
0A 10 LF Feed Line Feed (move to next line)
0B 11 VT Tab Vertical Tab
0C 12 FF Feed Form Feed (move to next page)
0D 13 CR Misc Carriage Return
0E 14 SO Text Style Select double width for one line (unlike ESC W 0/1 continous)
0F 15 SI Text Style Select condensed mode
11 17 DC1 Misc Select printer (online?) (FX80: DIP-switch related) (unclear if Amstrad supports or ignores this code)
12 18 DC2 Text Style Cancel condensed mode
13 19 DC3 Misc Deselect printer (offline?) (FX80: DIP-switch related) (unclear if Amstrad supports or ignores this code)
14 20 DC4 Text Style Cancel one line double width mode (unlike ESC W 0/1 continous)
18 24 CAN Misc Cancel text in line (but not control codes)
1B 0E 27 14 ESC SO Text Style Double width for one line (duplicate) (not FX80, better use SO, not ESC SO)
1B 0F 27 15 ESC SI Text Style Select condensed mode (duplicate) (not FX80, better use SI, not ESC SI)
1B 21 n 27 33 n ESC ! n Text Style Master select where n is a combination of:

0 Pica, 1 Elite, 4 Condensed, 8 Emphasized, 16 Double Strike, 32 Double Wide, 64 Italic, 128 Underline. Pica & Elite and Condensed/Emphasized are mutually exclusive.

1B 23 27 35 ESC # Char Code MSB control sequence cancel (=obtain MSB from Centronics Pin 9) (not on LX80)
1B 25 00 00 27 37 0 0 ESC % NUL NUL Charset Select normal character set (ROM) (star lc10 without ending NUL)
1B 25 01 00 27 37 1 0 ESC % SOH NUL Charset Select user defined char set (RAM) (star lc10 without ending NUL)
1B 26 00 .. 27 38 0 .. ESC & NUL .. Charset Define user defined chars (params: first,last char (0..31 each), followed by "attr,d1..d11" per char, attr.bit7=descender flag (0=descend, 1=no descend, usuable only with 8bit printer port), attr.bit6-4=starting pos(0..7, attr.bit3-0=finishing pos i+4..11), d1..d11 are 8-pin columns) (must be enabled via DIP-switch!)
1B 2A 00 n1 n2 .. 27 42 0 n1 n2 .. ESC * NUL n1 n2.. Graphics Select 8pin single density graphics (same as ESC K) (60dpi) (480 pix per 8 inch) (n2:n1 dot columns, each 8pin, bit7=upper pin)
1B 2A 01 n1 n2 .. 27 42 1 n1 n2 .. ESC * SOH n1 n2.. Graphics Select 8pin double density graphics (same as ESC L) (120dpi) (960 pix per 8 inch)
1B 2A 02 n1 n2 .. 27 42 2 n1 n2 .. ESC * STX n1 n2.. Graphics Select 8pin double d.speed graphics (same as ESC Y) (120dpi source data being output at 60dpi) (960 pix per 8 inch)
1B 2A 03 n1 n2 .. 27 42 3 n1 n2 .. ESC * ETX n1 n2.. Graphics Select 8pin quad density graphics (same as ESC Z) (240dpi source data being output at 120dpi) (1920 pix per 8 inch)
1B 2A 04 n1 n2 .. 27 42 4 n1 n2 .. ESC * EOT n1 n2.. Graphics Select 8pin 640-pix CRT graphics (80dpi) (640 pix per 8 inch) (for CPC/EGA/VGA screenshots)
1B 2A 05 n1 n2 .. 27 42 5 n1 n2 .. ESC * ENQ n1 n2.. Graphics Select 8pin 576-pix plotter graphics(72dpi) (576 pix per 8 inch) (for 1:1 pixel aspect ratio)
1B 2A 06 n1 n2 .. 27 42 6 n1 n2 .. ESC * ACK n1 n2.. Graphics Select 8pin 720-pix CRT graphics (90dpi) (720 pix per 8 inch) (for Hercules screenshots)
1B 2D 30 27 45 48 ESC - 0 Text Style Cancel underlining
1B 2D 31 27 45 49 ESC - 1 Text Style Select underlining
1B 2F c 27 47 c ESC / c Tab Select vertical tab channel (c=0..7)
1B 30 27 48 ESC 0 Feed Select 9/72 inch aka 1/8 inch line spacing
1B 31 27 49 ESC 1 Feed Select 7/72 inch line spacing
1B 32 27 50 ESC 2 Feed Select 12/72 inch aka 1/6 inch line spacing
1B 33 n 27 51 n ESC 3 n Feed Select n/216 inch line spacing (n=0..255)
1B 34 27 52 ESC 4 Text Style Select italic mode (italics can be also used by setting bit7 of the character number)
1B 35 27 53 ESC 5 Text Style Cancel italic mode
1B 36 27 54 ESC 6 Char Code Enable printing of characters (128-159,255) (Italics?)
1B 37 27 55 ESC 7 Char Code Cancel [ESC 6] command
1B 38 27 56 ESC 8 Misc Disable paper out sensor
1B 39 27 57 ESC 9 Misc Enable paper out sensor
1B 3A 00 00 00 27 58 0 0 0 ESC : NUL NUL NUL Charset Copy charset ROM into RAM (the three NULs are "for future expansion")
1B 3C 27 60 ESC < Misc Select unidirectional mode for one line (Move head home/parking)
1B 3D 27 61 ESC = Char Code MSB = 0 (not on LX80)
1B 3E 27 62 ESC > Char Code MSB = 1 (not on LX80)
1B 3F s n 27 63 s n ESC ? s n Graphics Reassign graphics mode 's'=(K,L,Y or Z) to mode 'n'=(0..6) (default is ESC K=0, L=1, Y=2, Z=3) (these defaults can be reassinged here, eg. ESC K=6)
1B 40 27 64 ESC @ Misc Initialize printer (Reset)
1B 41 n 27 65 n ESC A n Feed Select n/72 inch line spacing (n=0..85)
1B 42 00 27 66 0 ESC B NUL Tab Clear Vertical tabs
1B 42 tabs 00 27 66 tabs 0 ESC B tabs NUL Tab Select up to 16 vertical tabs where tabs are ascending values from 1..255 ending with NUL
1B 43 00 n 27 67 0 n ESC C NUL n Feed Select page length in inches (n=1..22)
1B 43 n 27 67 n ESC C n Feed Select page length in lines (n=1..127)
1B 44 00 27 68 0 ESC D NUL Tab Clears all horizontal tables
1B 44 tabs 00 27 68 tabs 0 ESC D tabs NUL Tab Sets up to 32 horizontal tabs with ascending values 1-137. NUL or a value less than previous tab ends command.
1B 45 27 69 ESC E Text Style Select emphasized (bold) mode
1B 46 27 70 ESC F Text Style Cancel emphasized (bold) mode
1B 47 27 71 ESC G Text Style Select double strike mode (also an bold-alike effect)
1B 48 27 72 ESC H Text Style Cancel double strike mode (also an bold-alike effect)
1B 49 30 27 73 48 ESC I 0 Char Code Disable Printable codes expansion (0-31,128-159) (not on LX80)
1B 49 31 27 73 49 ESC I 1 Char Code Enable Printable codes expansion (0-31,128-159) (presumably excluding 27?) (not on LX80)
1B 4A n 27 74 n ESC J n Feed Perform One-shot n/216 inch line feed (n=0..255)
1B 4B n1 n2 .. 27 75 n1 n2 .. ESC K n1 n2 .. Graphics Single 8pin density graphics (60 dpi) (n2:n1 = num bytes following) (480 dots/line)
1B 4C n1 n2 .. 27 76 n1 n2 .. ESC L n1 n2 .. Graphics Double 8pin density graphics (120 dpi) (960 dots/line)
1B 4D 27 77 ESC M Text Style Select elite width (12 cpi) (mini font)
1B 4E n 27 78 n ESC N n Feed Select skip over perforation (n=1..127 lines)
1B 4F 27 79 ESC O Feed Cancel skip over perforation
1B 50 27 80 ESC P Text Style Cancel elite / Select pica width (10 cpi)
1B 51 n 27 81 n ESC Q n Misc Set right margin (n=1..255 character columns) (this is WIDTH, counted from left margin)
1B 52 n 27 82 n ESC R n Charset Select International character set where numeric 'n' is:

0 USA (ASCII), 1 France, 2 Germany, 3 UK (Pound symbol), 4 Denmark, 5 Sweden, 6 Italy, 7 Spain, 8 Japan (Yen symbol), 9 Norway, 10 Denmark II, 11 Spain II, 12 Latin America. DMP2000..3160 do support 0..8, ie. up to including Japan. The default setting is DIP-switch selectable .

1B 53 30 27 83 48 ESC S 0 Text Style Select superscript
1B 53 31 27 83 49 ESC S 1 Text Style Select subscript
1B 54 27 84 ESC T Text Style Cancel superscript/subscript
1B 55 30 27 85 48 ESC U 0 Misc Cancel unidirectional mode (faster, use bidirectional printing)
1B 55 31 27 85 49 ESC U 1 Misc Select unidirectional mode (slower, left-to-right, more accurate on vertical lines)
1B 57 30 27 87 48 ESC W 0 Text Style Cancel double width mode (continous) (unlike DC4: one line)
1B 57 31 27 87 49 ESC W 1 Text Style Select double width mode (continous) (unlike SO: one line)
1B 59 n1 n2 .. 27 89 n1 n2 ESC Y n1 n2 Graphics Select 8pin Hi-speed double den graphics (120 dpi)
1B 5A n1 n2 .. 27 90 n1 n2 ESC Z n1 n2 Graphics Select 8pin Quad density graphics (240 dpi) (1920 dots/8"line)
1B 5E d n1 n2.. 27 94 d n1 n2 ESC ^ d n1 n2 Graphics Select 9 pin graphics mode number of columns = n1 + (n2 * 256) (d=density, 0=single, 1=double) (specs doesn't say if 2..6 do work too) (each column is a 2-byte pair: byte1.bit7..bit0=upper..lower, byte2.bit7=lowest, byte2.bit6..bit0=unused)
1B 62 c 00 27 98 c 0 ESC b c NUL Tab Clear vertical tabs in channel (c=0..7)
1B 62 c tabs 00 27 98 c tabs 0 ESC b c tabs NUL Tab Select up to 16 vertical tabs in channels (c=0..7) where tabs are ascending values from 1..255 ending with NUL
1B 69 00 27 105 48 ESC i 0 Misc Cancel instant character printing (default, ie. print on CRLF etc.) (not on LX80)
1B 69 01 27 105 49 ESC i 1 Misc Select instant character printing (printer each char immediately) (also scrolls printed text into view; when buffer empty) (not on LX80)
1B 6A n 27 106 n ESC j n Feed Perform One-shot reverse linefeed (n/216 inch after buffer) (not on LX80)
1B 6C n 27 108 n ESC l n Misc Set left margin (n=0..255 character columns)
1B 6D n 27 109 n ESC m n Charset DMP3000/3160 only: Select charset (0=Epson, 1=IMB#1, 2=IBM#2) (Amstrad specific: not supported by Epson printers nor Epson clones nor DMP2000/2160)
1B 70 30 27 112 48 ESC p 0 Text Style Cancel proportional mode (not on LX80 ?)
1B 70 31 27 112 49 ESC p 1 Text Style Select proportional mode (not on LX80 ?)
1B 73 30 27 115 48 ESC s 0 Misc Turn half speed mode off
1B 73 31 27 115 49 ESC s 1 Misc Turn half speed mode on (purpose: noise-reduced silent printing)
1B 78 30 27 120 48 ESC x 0 Text Style Select draft mode (LX80) (FX86e) (not FX80)
1B 78 31 27 120 49 ESC x 1 Text Style Select NLQ mode (LX80) (FX86e) (not FX80)
7F 127 DEL Misc Delete last character from buffer (but not control codes) (works only when buffer isn't yet printer; printing usually starts on terminating lines via CRLF)
  • Character codes 00h-FFh...
    • Codes 00h..1Fh and 7Fh contain control codes, but at least some of them can be also used as print-able characters; at least when enabled via ESC "I1" (according DMP2000 manual chap6/page7 example: chr(6) is a print-able (user defined) character. others like chr(27) are obviously not printable)
    • Codes 20h..7Eh are ASCII characters (some changed in "international" modes)
    • Codes 80h..9Fh and FFh act as mirror of control codes 00h..1Fh and 7Fh (this mirroring can be disabled via ESC "6")
    • Codes A0h..FEh are italic versions of 20h..7Eh
  • The DMP2000 (and up) supports all Epson FX80 control codes, plus some additional ones:
    • ESC SO and ESC SI (mirrors of SO and SI) (for some reason, these mirrors are often supported by Epson-clones like Star LC10, though they are rarely found in official Epson specs)
    • ESC "x" n (select NLQ/Draft mode) (the original Epson FX80 didn't support NLQ, however, the ESC x command is found in other Epson models like LX80 and FX86e)
    • ESC "m" n (select IBM charset) (this seems the be an Amstrad invention, supported only by DMP3000/3160, not supported by DMP2000/2160, nor by real Epson printers, nor by Epson-clones like Star LC10).
  • Some one-digit parameters (like on/off flags) may be recognized both is binary chr(0xh) as well as ASCII chr(3xh).