Amstrad/Schneider Printer Control Codes
From CPCWiki - THE Amstrad CPC encyclopedia!
- 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 (switch-selectable) |
0E | 14 | xxx | Width | Double Width Mode (also restores 1/6" line feed rate; after graphics printing) |
0F | 15 | xxx | Width | Normal Width Mode (also restores 1/6" line feed rate; after graphics printing) |
10,xx,xx | 16,xx,xx | xxx "NN" | Misc | Print Position in character units (NN = two-digit ASCII, "00..79") |
14 | 20 | xxx | Misc | CR |
1B,10,hi,lo | 27,16,xx,xx | ESC xxx xx xx | 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 graphocs (until canceled by chr 0Eh/0Fh). |
1C,num,gfx | 28,num,gfx | xxx,num,gfx | Graphics | Repetition of one byte of graphic print data (num=1..127 repeat count) (gfx: bit0=upper pixel .. bit6=lower pixel) |
- Character Mode: 6 lines/inch
- Graphics Mode: 9 lines/inch (each "line" containing 7 pixels vertically) - after Graphics printing: required to issue chr(0Eh) or chr(0Fh) to return to 6 lines/inch mode
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).