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.
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.
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. |
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.
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).