Last modified on 16 December 2010, at 19:35

Amstrad/Schneider Printer Character Sets

DMP4000 Mechanics.jpg


Character Set ROMs

Here are some Draft and NLQ charsets extracted from the EPROMs. In case of the DMP2000/DMP3000, additional Draft characters are probably contained in the CPUs on-chip ROM. The red arrow indicates underlengths (where the 8bit data is shifted down to the lower 8-pins). The blue line indicates the pre-defined width for use in proportional mode.

NLQ401 fonts

  • Draft font: 232 characters at EPROM offset 16A6h..209Dh; ASCII characters and CPC symbols
  • NLQ font: 103 characters, at EPROM offset 209Eh..3FFFh (pass1+pass2); ASCII characters

Encoding: 11 bytes per Draft character (same as Epson chars, but without prefix byte), 39 bytes per NLQ pass (in super-high horizontal resolution; about 3-4 times better than the later DMP2000..3000 models). In lack of prefix flags, underlengths are defined by software (at ROM address 090Eh..091Ch).
Mechanical Restrictions: After drawing a draft pixel, the next ONE pixel (in the same row) must be white. After a NLQ pixel, the next THREE must be white.
Firmware Restrictions: Looking at the firmware disassembly, chr(7Fh..80h) (slashed zero and french "c") seem to be non-printable. chr(81h..FFh) are printable via ESC "=" code.

DMP2000/2160 fonts

  • Draft font: probably somewhere in uPD7811 ROM (not dumped)
  • NLQ font: 128 characters, at EPROM offset 3400h..39FFh (pass1) and 3A00h..3FFFh (pass2); ASCII characters

Encoding: 12 bytes per char (one prefix, plus eleven 8bit columns; the prefix contains underlength flag, and proportional char width info; same format as with ESC "&" command), 2-pass NLQ characters are defined identically as two draft characters (the prefix byte is having the same value in both definitions)
Mechanical Restrictions: After drawing a draft pixel, the next ONE pixel (in the same row) must be white. There is no such restriction for NLQ pixels (because they are defined in a lousy resolution).

DMP3000/DMP3160 fonts

Character set memory map:

00C0 Draft chr(00h..7Fh), ASCII & International (normal)
06C0 Draft chr(00h..7Fh), ASCII & International (italics)
0CC0 Draft chr(100h..140h), 65 special symbols (undocumented)
5000 Draft chr(100h..14Bh), 76 special "IBM" symbols
5390 Draft chr(14Ch..16Ch), 33 alternate variants of ASCII & International symbols
5600 Draft-pass-2 lower half of IBM draft symbols
5C00 NLQ-pass-1 chr(00h..7Fh), ASCII & International (normal)
6200 NLQ-pass-1 chr(00h..7Fh), ASCII & International (italics)
6800 NLQ-pass-1 chr(100h..140h), 76 special "IBM" symbols
6C00 NLQ-pass-2 chr(00h..7Fh), ASCII & International (normal)
7200 NLQ-pass-2 chr(00h..7Fh), ASCII & International (italics)
7800 NLQ-pass-2 chr(100h..14Bh), 76 special "IBM" symbols
7C00 NLQ-pass-3+4 lower half of IBM NLQ symbols (same data used for both passes)
2E38 Table for translating IBM chr(80h..FFh) to internal chr(100h..14Bh/00h..1Fh)

Notes:The draft symbols in first 4K of DMP3000 aren't yet dumped (though they are likely to be same as in DMP3160). In the DMP3160 BIOS Dump, the NLQ "á" is damaged; NLQ-pass-2 chr(13Fh), address 7AF8h is 00h (it's intact, 2Ah, in DMP3000 BIOS Dump).
Encoding/Mechanics: Same as DMP2000/2160, see there. A special case are the IBM symbols which are defined as two characters each (one holding the upper half, one the lower half, which is required for block graphic and border symbols) (accordingly it takes 4 passes for IBM-NLQ symbols, and 2 passes for IBM-Draft symbols).

International Characters

23h 24h 40h 5Bh 5Ch 5Dh 5Eh 60h 7Bh 7Ch 7Dh 7Eh
0 - USA # $ @ [ \ ] ^ ` { | } ~
1 - France # $ à ° ç § ^ ` é ù è ¨
2 - Germany # $ § Ä Ö Ü ^ ` ä ö ü ß
3 - UK £ $ @ [ \ ] ^ ` { | } ~
4 - Denmark # $ @ Æ Ø Å ^ ` æ ø å ~
5 - Sweden # ¤ É Ä Ö Å Ü é ä ö å ü
6 - Italy # $ @ ° \ é ^ ù / ` à ò è ì
7 - Spain Pt $ @ ¡ Ñ ¿ ^ ` ¨ ñ } ~
8 - Japan # $ @ [ ¥ ] ^ ` { | } ~

Italian chr(60h) is "`" (DMP1), or "ù" (DMP2xxx/3xxx). Japan (Yen symbol) is software selectable on DMP2xxx/3xxx only. All other chars are same for all DMP versions.

IBM Character Set (DMP3000/3160)

IBM Characters (DMP3000/DMP3160 in "IBM" Mode only)
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
00h crd crd crd crd
10h §
... chr(20h..7Eh) = Standard ASCII characters
80h Ç ü é â ä à å ç ê ë è ï î ì Ä Å
90h É æ Æ ô ö ò û ù ÿ Ö Ü ¢ £ ¥ Pt ƒ
A0h á í ó ú ñ Ñ ª º ¿ xx ¬ ½ ¼ ¡ «   »
B0h Blk Blk Blk lin lin lin lin lin lin lin lin lin lin lin lin lin
C0h lin lin lin lin lin lin lin lin lin lin lin lin lin lin lin lin
D0h lin lin lin lin lin lin lin lin lin lin lin Blk Blk Blk Blk Blk
E0h alp ß xx xx xx xx µ xx xx xx xx xx xx xx xx xx
F0h xx ± >= <= xx xx ÷ xx ° xx xx sqr ^n ²
  • The DMP3000..3250 has two selectable "IBM Character Sets". Set 1 omits chr(03h..06h, 15h, 80h..9Fh), Set 2 includes them (though one needs an 8bit Printer Port to use chr 80h..9Fh).
  • The IBM characters are same as the default MS DOS character set (ie. same as built-in in CGA/EGA/VGA BIOSes). However, the DMP doesn't implement all IBM characters: chr(00h..02h, 07h..14h, 16h..1Fh) are missing. Moreover, the "border/line" symbols in chr(B3h..DAh) should usually consists of single- and double-width lines, but the DMP draws all of them as single-width lines.