Last modified on 22 June 2022, at 04:31

Amstrad/Schneider Printer Control Codes

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 vertical TABs, 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 and Epson MX80: Can be DIP-switched or ESC-"A"-commanded to other spacing (on a DMP2000 or Epson FX80, it's fixed, always 1/6 inch)

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 CPC-style chr(81h..FFh) symbols; use chr(00h) to return to normal mode
1B 41 n 27 65 n ESC "A" n Feed NLQ401/MX80: Redefine ESC "2" to n/72 inch line spacing (applied by subsequent ESC "2" commands).

On a DMP2000 or FX80 it would directly select n/72 inch line spacing (n=0..85) (without needing to execute subsequent ESC "2")

1B 43 (00) n 27 67 (0) n ESC "C" (NUL) n Feed Select Page length in lines or inches (n=1..127 lines, or 00h,1..22 inch)
1B 44 .. 00 27 68 .. 0 ESC "D" .. NUL Tab Define horizontal TAB positions
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 Double 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)

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 (see ESC "D")
0A 10 LF Feed Line Feed (move to next line)
0B 11 VT Tab Vertical Tab (see ESC "B", ESC "b" and ESC "/")
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:
  • Bit0 - Elite/mini (same as ESC "M" / ESC "P")
  • Bit1 - Ignored or Proportional (same as ESC "p")
  • Bit2 - Condensed (same as SI / DC2)
  • Bit3 - Emphasized/bold (same as ESC "E" / ESC "F")
  • Bit4 - Double Strike (same as ESC "G" / ESC "H")
  • Bit5 - Double Width (same as ESC "W")
  • Bit6 - Ignored or Italic (same as ESC "4" / ESC "5")
  • Bit7 - Ignored or Underline (same as ESC "-")

Epson FX-80 and Amstrad DMP2000..3160 support only bit0,2-5 (Amstrad DMPs do support proportional/italics/underline, but they can be changed only via ESC "p/4/5/-", not via ESC "!"). Epson LQ-500 and Star-LC10 do use/support master style bits0-7. 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 n 00 27 37 n 0 ESC "%" n NUL Charset Select character set (00h=Normal/ROM, 01h=User-Defined/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 d lo hi .. 27 42 d lo hi .. ESC "*" d lo hi.. Graphics Print 8pin Graphics (hi:lo number of dot columns (number of data bytes), each data byte defines 8-pins (bit7=upper pin), Density (d) can be:
  • 00h = 60 dpi, 480 pix per 8 inch, single density graphics (same as ESC K)
  • 01h = 120 dpi, 960 pix per 8 inch, double density graphics (same as ESC L)
  • 02h = 120 / 2 dpi, double speed double density (same as ESC Y)
  • 03h = 240 / 2 dpi, double speed quad density (same as ESC Z)
  • 04h = 80 dpi, 640 pix per 8 inch (for CPC/EGA/VGA screenshots)
  • 05h = 72 dpi, 576 pix per 8 inch (for 1:1 pixel aspect ratio)
  • 06h = 90 dpi, 720 pix per 8 inch (for Hercules screenshots)

In the two "double speed" modes, dots can be positioned at fine resolution, but the next dot (in the same row) must be white

1B 2D n 27 45 n ESC "-" n Text Style Underlining on/off (00h=Off, 01h=On)
1B 2F c 27 47 c ESC "/" c Tab Select vertical tab channel (c=0..7); channels can be defined via ESC "b"
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 (unclear if 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 d 27 63 s d ESC "?" s d Graphics Reassign density of ESC "K/L/Y/Z" codes. 's'=code name (K,L,Y or Z), 'd'=density (0..6, same as for ESC "*", see there) (defaults are ESC "K"=0, "L"=1, "Y"=2, "Z"=3)
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 Define up to 16 vertical tabs with ascending values from 1..255; specifying an empty list (ESC "B" NUL) clears vertical tabs; used with VT aka chr(0Bh); one can also define multiple vertical tab channels (see ESC "b" and ESC "/")
1B 43 (00) n 27 67 (0) n ESC "C" (NUL) n Feed Select Page length in lines or inches (n=1..127 lines, or 00h,1..22 inch)
1B 44 .. 00 27 68 .. 0 ESC "D" .. NUL Tab Define up to 32 horizontal tabs with ascending values from 1..137; specifying an empty list (ESC "D" NUL) clears all horizontal tabs; used with HT aka chr(09h)
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 Char Code Printable chr(0-31,128-159) (00h=Control Codes, 01h=Printable Characters) (not on LX80) ;makes some of these characters printable (unknown which ones) whilst others (like 1Bh) are always treated as control codes
1B 4A n 27 74 n ESC "J" n Feed Perform One-shot n/216 inch line feed (n=0..255)
1B 4B lo hi .. 27 75 lo hi .. ESC "K" lo hi .. Graphics Print 8-pin 60-dpi graphics (same as ESC "*" 0, see there) (density of ESC "K" can be redefined via ESC "?")
1B 4C lo hi .. 27 76 lo hi .. ESC "L" lo hi .. Graphics Print 8-pin 120-dpi graphics (same as ESC "*" 1, see there) (density of ESC "L" can be redefined via ESC "?")
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:
  • 00h USA (ASCII)
  • 01h France
  • 02h Germany
  • 03h UK (Pound symbol)
  • 04h Denmark
  • 05h Sweden
  • 06h Italy
  • 07h Spain
  • 08h Japan (Yen symbol)

DMP2000..3160 do support 0..8, ie. up to including Japan. The default setting is DIP-switch selectable.

1B 53 n 27 83 n ESC "S" n Text Style Select superscript/subscript (00h=super, 01h=sub)
1B 54 27 84 ESC "T" Text Style Cancel superscript/subscript
1B 55 n 27 85 n ESC "U" n Misc Unidirectional mode On/Off (00h=Off=faster, bidirectional printing, 01h=On=slower, left-to-right, more accurate on vertical lines)
1B 57 n 27 87 n ESC "W" n Text Style Double width mode (continous) (00h=Off, 01h=On) (unlike DC4 and SO: one line)
1B 59 lo hi .. 27 89 lo hi .. ESC "Y" lo hi .. Graphics Print 8-pin 120/2-dpi graphics (same as ESC "*" 2, see there) (density of ESC "Y" can be redefined via ESC "?")
1B 5A lo hi .. 27 90 lo hi .. ESC "Z" lo hi .. Graphics Print 8-pin 240/2-dpi graphics (same as ESC "*" 3, see there) (density of ESC "Z" can be redefined via ESC "?")
1B 5E d lo hi .. 27 94 d lo hi .. ESC "^" d lo hi .. Graphics Print 9-pin graphics at selected density (similar to ESC "*" d, see there for details). Allowed density for ESC "^" is officially only d=00h..01h (unknown if 02h..06h do work, too). hi:lo specifies the number of dot columns (the number of 2-byte pairs) (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 Define up to 16 vertical tabs per channel (c=0..7) with ascending values from 1..255; specifying an empty list (ESC "b" c NUL) clears that vertical tab channel; channels are selected via ESC "/" and can be then used with chr(09h); there is also a similar command without channel-numbers (ESC "B")
1B 69 n 27 105 n ESC "i" n Misc Instant character printing (00h=Off=default, ie. print only on LF, 01h=On=print 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 n/216 inch reverse linefeed (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 n 27 112 n ESC "p" n Text Style Proportional mode (00h=Off, 01h=On) (not on LX80?)
1B 73 n 27 115 n ESC "s" n Misc Half speed mode (00h=Off=Normal, 01h=On=Slow; purpose: noise-reduced silent printing)
1B 78 n 27 120 n ESC "x" n Text Style Select Draft/NLQ mode (00h=Draft, 01h=NLQ) (LX80) (FX86e) (not FX80)
7F 127 DEL Misc Delete last character from buffer (but not control codes) (works only when buffer isn't yet printed; printing usually starts on terminating lines via LF)
  • 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).