A> CPS8256 (Centronics Parallel and RS232C Serial Interface)
Description, Context and History

Officially marketed by Amstrad plc in 1985 concurrently with the launch of the Amstrad PCW 8256 and PCW 8512 models, the CPS8256 interface stands as the most critical official peripheral for communication expansion on this platform. The baseline design of the PCW range deliberately lacked general-purpose communication ports, relying exclusively on proprietary connection links routed solely to its bundled monitor unit and dedicated matrix printer. The CPS8256 was conceived to address this isolation, enabling for the first time the direct hookup of telephone modems, serial mice, plotters, and data streams to third-party dot-matrix, daisy-wheel, or early laser printers.

Regarding historical preservation documentation, a persistent misconception circulated in 1980s computer magazines claiming that the parallel port implementation violated the Centronics standard because it processed pure 8-bit word lengths instead of 7-bit channels. Low-level hardware analysis has proven this to be an outright myth: the physical port complies 100% with the standard electrical line signals and communications protocol. The real conflict stemmed from Locomotive Software's bundled word processor, LocoScript. It utilized an internal character map and proprietary formatting control characters, resulting in unreadable gibberish outputs unless text documents were explicitly exported or converted into a plain vanilla ASCII standard format before being printed via the parallel interface.

This extension drastically broke the isolated ecosystem of the PCW, allowing asynchronous connections with mainframes or IBM-compatible PCs using transfer suites like LocoLink or terminal protocols like Kermit, thus cementing the computer as an open business workstation rather than a dead-end typing machine.

Hardware Architecture and Silicon Components

From an electronic engineering perspective, the CPS8256 houses a set of Zilog logic family integrated circuits (or licensed clones) internally, perfectly coordinated to manage asynchronous I/O operations without causing overhead to the main Z80 CPU of the computer:

  • Z80 DART (Dual Asynchronous Receiver/Transmitter) / Z80 SIO: This is the communication core of the device. Physically, it features two independent data transmission/reception channels. In Amstrad's layout, Channel A is fully wired to control the serial port under the RS-232C standard, while Channel B was cleverly repurposed to monitor and sequence the status lines, control signals, and handshaking of the Centronics parallel port.
  • Z80 CTC (Counter/Timer Circuit): This timer IC is used exclusively as a dedicated programable baud rate generator (Baud Rate Generator). Its independent internal channels process the clock frequencies required to synchronize the internal registers of the Z80 DART, allowing stable data transmission ratios to be established.
  • Voltage Converter Subsystem: The lateral expansion bus of the Amstrad PCW only distributes +5V and +12V power supply lines. Since the international RS-232C specification mandates symmetric negative voltage thresholds to encode serial logical data states (preventing background noise), the CPS8256 incorporates an internal inverter/voltage converter circuit dedicated to generating the -12V rail required for line signaling.
Z80 Input/Output (I/O) Port Mapping

The CPS8256 interface decodes on the system bus by occupying a fixed range of 8 addressable ports spanning from 0E0h to 0E7h. The hardware register layout breaks down as follows:

Port (Hex) Port (Dec) Access System Function and Register Target
0E0h 224 R / W Z80 DART (Channel A) - Data Register: Reads incoming characters from the serial buffer (Rx) and writes data to be transmitted (Tx).
0E1h 225 R / W Z80 DART (Channel A) - Control Register: Writes to point to internal registers (WR0-WR5) and reads status registers (RR0-RR1).
0E2h 226 Write Only Centronics Parallel Port - Output Register (Data Latch): Stores and latches the 8-bit data byte onto physical lines D0-D7 for the printer.
0E3h 227 Read Only Centronics Parallel Port - Status Register: Real-time read of the physical hardware control lines (Busy, /Ack, Paper Empty, Select).
0E4h 228 Write Only Z80 CTC (Channel 0) - Transmitter Timer: Sets the time constant defining the Baud Rate for serial transmission (Tx).
0E5h 229 Write Only Z80 CTC (Channel 1) - Receiver Timer: Sets the time constant defining the Baud Rate for serial reception (Rx).
0E6h 230 Line reserved by decoding hardware / Unused by the Amstrad standard design.
0E7h 231 Write Only Z80 CTC (Channel 3) - General Control Register: Initializes the operating mode of the counter circuits and hardware timer interrupts.
Internal Register Structure of the Z80 DART (Port 0E1h)

For direct low-level programming (e.g., in Z80 assembly language, bypassing CP/M BIOS calls), the CPS8256 control port operates sequentially. The internal register number to be accessed is written to 0E1h, and in the following I/O clock cycle, the configuration value is sent to or read from that same port. Critical preservation bit functions are detailed below:

  • WR3 (Write Register 3 - Receiver Configuration): Bits 7 and 6 define the received data word length (11 = 8 bits, 10 = 7 bits, 01 = 6 bits, 00 = 5 bits). Bit 5 enables hardware auto-flow control via the CTS/RTS lines, and Bit 0 physically activates the receiver logic (Rx Enable).
  • WR4 (Write Register 4 - Transmission Parameters): Bits 7 and 6 control the clock multiplier factor (invariably set to 01 for the PCW design). Bits 3 and 2 define the Stop Bits (11 = 2 bits, 10 = 1 bit). Bit 1 activates the parity bit (1 = Even, 0 = Odd), and Bit 0 activates or deactivates parity checking.
  • WR5 (Write Register 5 - Transmitter Configuration): Bit 7 controls the physical DTR line state. Bits 6 and 5 establish the word length for transmitted data (11 = 8 bits, 10 = 7 bits). Bit 3 enables data transmission (Tx Enable), and Bit 1 directly controls the output RTS line.
  • RR0 (Read Register 0 - Line Status Register): Allows transfer verification via polling. Bit 7 monitors the Break condition. Bit 5 reflects the logical state of the CTS line, Bit 4 shows RI (Ring Indicate), and Bit 3 tracks DCD (Carrier Detect). Bit 2 switches to a high state (1) when the hardware transmit buffer is empty and ready, while Bit 0 indicates that an incoming character is waiting in the receiver buffer to be read.
  • RR1 (Read Register 1 - Error Register): Stores accumulated logical errors. Bit 6 detects Framing Errors, Bit 5 catches hardware receiver overrun errors (Rx Overrun Error), and Bit 4 flags logical Parity Errors.
Port Connections and Pinouts

The CPS8256 exposes two internationally standardized physical connectors wired according to Amstrad's electronic design specifications:

1. Serial Port (DB25 Male Connector - DTE Standard Configuration):

DB25 Pin RS-232C Signal Flow (PCW) Electrical Line Function
Pin 1 GND (Shield) Protective Ground (Chassis mass / cable shielding reference).
Pin 2 TXD (Transmit Data) Output Serial transmission line for asynchronous binary data.
Pin 3 RXD (Receive Data) Input Serial reception line for asynchronous binary data.
Pin 4 RTS (Request To Send) Output Hardware flow control request sent by the PCW to transmit data.
Pin 5 CTS (Clear To Send) Input Signal from the peripheral authorizing the PCW to send data.
Pin 6 DSR (Data Set Ready) Input Confirmation that the remote device/modem is powered on and ready.
Pin 7 GND (Signal Ground) Common ground reference for all digital data signals.
Pin 8 DCD (Data Carrier Detect) Input Telephone carrier tone detection line (used by modems).
Pin 20 DTR (Data Terminal Ready) Output Signal confirming that the Amstrad PCW is online and operative.
Pin 22 RI (Ring Indicator) Input Telephone ring detection line indicator.

2. Parallel Port (36-pin Amphenol Centronics Female Connector):

  • Pin 1: /STROBE control signal (Active-low output. Synchronization pulse emitted by the PCW to warn the printer that data on bus D0-D7 is valid and must be latched).
  • Pins 2 to 9: 8-bit parallel Data Bus (Logical signal lines D0 to D7).
  • Pin 10: /ACK control signal (Active-low input. Pulse sent by the printer indicating that it has successfully processed the previous byte).
  • Pin 11: BUSY signal (Active-high input. Line kept at 1 by the printer when it is offline, processing data, or its buffer is full, ordering the PCW to halt transmission).
  • Pin 12: PE error signal (Paper Empty - Active-high input notifying the physical absence of paper in the external printer).
  • Pin 13: SLCT status signal (Select - Active input confirming that the peripheral device is selected and online).
  • Pins 19 to 30: Logic ground returns to common ground (Signal Ground / GND).
Operating System Support and Emulator Integration
  • Dynamic BIOS Patching: If the CPS8256 is physically connected to the lateral expansion bus during cold boot, the startup routine stored in the system load block of the CP/M Plus operating system automatically recognizes the hardware. The BIOS dynamically alters the official welcome message on the CRT monitor, appending the string: (SIO/Centronics add-on).
  • MAIL232 Communications Tool: The original system utility floppy disk distributed officially by Amstrad included the MAIL232.COM executable. This utility interacted directly with the CPS8256 serial registers, effectively converting the computer into a compatible terminal for early BBS systems.
  • CP/M Box (by Habi / Habisoft): Habi's emulator fully intercepts all read and write operations directed to logical ports 0E0h-0E7h. It allows users to map and redirect all this data stream into modern host system physical/virtual COM ports, or route the Centronics parallel data directly into text files or Windows LPT print queues.
  • Joyce (by John Elliott): Replicates the internal logic of the Z80 CTC integrated circuit and the synchronous behavior of the Z80 DART mapped to its original hardware address space with absolute cycle-accurate precision.
Documentation and Downloads