Amstrad/Schneider Printer Control Codes
- Amstrad/Schneider Printer Models
- Amstrad/Schneider Printer Technical Specifications
- Amstrad/Schneider Printer Control Codes
- Amstrad/Schneider Printer Support for 7bit Printer Ports
- Amstrad/Schneider Printer Character Sets
- Amstrad/Schneider Printer Buttons and DIP Switches
- Amstrad/Schneider Printer Resources (User and Service Manuals, Datasheets, ROM-images)
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 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 | 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) |
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) 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 (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:
Pica & Elite and Condensed/Emphasized are mutually exclusive. DMP2000..3160 support only bit0-5 (not italic/underline). | |||||
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 normal 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:
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 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); 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 (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 n1 n2 .. | 27 75 n1 n2 .. | ESC "K" n1 n2 .. | Graphics | Print 8-pin 60-dpi graphics (same as ESC "*" 0, see there) (density of ESC "K" can be redefined via ESC "?") | |||||
1B 4C n1 n2 .. | 27 76 n1 n2 .. | ESC "L" n1 n2 .. | 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:
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 n1 n2 .. | 27 89 n1 n2 | ESC "Y" n1 n2 | 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 n1 n2 .. | 27 90 n1 n2 | ESC "Z" n1 n2 | 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 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 don'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 | 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 | Cancel 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 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 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).