Last modified on 16 December 2010, at 19:37

Amstrad/Schneider Printer Support for 7bit Printer Ports

DMP4000 Mechanics.jpg

The CPC computers include a 7 bit Printer Port, which is a partial restriction because most printers use 8 bit protocols. There are several ways to upgrade CPC computers to 8bit Printer Ports, but many of the different upgrade methods aren't compatible with each other. So, 8 bit printer software isn't neccessarily compatible with all 8 bit printer ports. In result, CPCs are more or less stuck with 7 bit protocols, which don't allow to access all printer functions.

Amstrad DMP1

The DMP1 uses a raw 7 bit protocol, so all functions are working with 7 bit printer ports.

Schneider NLQ401

The NLQ401 uses a raw 7 bit protocol so all functions are working with 7 bit ports. Actually the printer does have an 8 bit port, and does use standard Epson codes (which can include 8 bit parameters), but the printer firmware strips the MSB immediately after reading data from the centronics port - so one is stuck with 7 bit codes, even if one owns a computer with 8 bit printer port.

Restrictions on 8-pin graphics and numeric parameters are same as on DMP2000 (see there for details). Restrictions for 9-pin graphics and user defined chars don't apply (since the NLQ401 doesn't support these features).

Amstrad/Schneider DMP2000/DMP2160

Most functions are working with 7 bit ports, but - although it's Amstrad's official CPC printer, some functions are working only with 8 bit ports. Features that won't work perfectly with 7 bit ports:

  • Graphics - The 9-pin graphics command is more or less unusable. The 8-pin graphics command can be used, though with only 7-pins being accessible; the line-feed rate must be set to 7/72 inch accordingly. Using only 7-pins does slightly increase printing duration, and (since more passes are needed) reduces lifetime of the print-head and ink-ribbon.
  • Numeric Parameters - Some printer commands require 8bit or 16bit parameters, in lack of bit7 one cannot specify values like 128..255. In some cases work-arounds are possible (for example, one can send two 64-pixel-wide graphics blocks instead of one 128-pixel-wide block).
  • User Defined Characters - In the prefix byte, the underlength flag is always "on", in the bitmap, the upper pixel is always "off". In result, user defined characters can use only the middle 7-pins.

There may be also restrictions on characters 80h..FFh, but it's rather unclear if the DMP2000/DMP2160 does support that characters at all (on DMP3000 they seem to be used to access the italics-font, which isn't included in DMP2000/DMP2160 ROMs).

Amstrad/Schneider DMP3000/DMP3160/DMP3250di

Same restrictions as for DMP2000/DMP2160. Plus some more problems:

  • The additional "italics" and "IBM" symbols seem to require to use character numbers 80h..FFh. There are control codes to manipulate the MSB, so one should be able to use these characters even with 7 bit ports (in case of 80h..9Fh and FFh one may additionally need to disable control-code mirroring; caution: if this function might also disable the 9Bh-to-1Bh mirroring, so one couldn't send any further ESC codes).


Although FutureOS isn't an Amstrad/Schneider printer (it is not a printer, nor is it made by Amstrad or Schneider), it is mentioned here: Using FutureOS you have support for the more common 8 bit printer port solutions.