Amstrad CPS8256 Technical Reference
Sources for this document are two PD text files, DART.DOC (by SJ Dibble) and AMS-SIO.DAT, covering the serial port only. Information on the parallel port, and on any other serial/parallel interfaces, would be appreciated.
Richard Fairhurst, 1997
Port addresses
The following I/O addresses are used by the CPS8256. For reference, the equivalent ports on Amstrad, Pace and Cirkit interfaces for the CPC are included in brackets.
&E0 (&FADC) | DART data |
&E1 (&FADD) | DART control |
&E2 (&FADE) | DART data (port B) |
&E3 (&FADF) | DART control (port B) |
&E4 (&FBDC) | 8253 counter 0 |
&E5 (&FBDD) | 8253 counter 1 |
&E6 (&FBDE) | unused |
&E7 (&FBDF) | 8253 write mode word |
Baud rates
To set the transmit rate, send &36 to port &E7, and two values from the table (in the order given) to &E4. To set the receive rate, replace &36 with &76. This values are obtained with the CTC 8253 connected to 1.84375MHz.
Note that the 8250 is only reliable at speeds up to 9600 baud. To use faster speeds, you should replace it with a 16550AF chip, which is pin-compatible with the 8250. (Thanks to Rob Scott for this information.)
31250 | &00, &04 |
19200 | &00, &07 |
9600 | &00, &0D |
7200 | &00, &11 |
4800 | &00, &1A |
3600 | &00, &23 |
2400 | &00, &34 |
2000 | &00, &3F |
1800 | &00, &45 |
1200 | &00, &68 |
600 | &00, &D0 |
300 | &01, &A0 |
200 | &02, &71 |
150 | &03, &41 |
110 | &04, &70 |
75 | &06, &83 |
50 | &09, &C4 |
45 | &0A, &D9 |
DART registers
Other control functions involve programming the DART. To write a value to a register, first send the register number, then the new value, to &E1. To read a value, output the register number, and then you can input it from the same port.
Write register 0
&18
: reset port
&38
: reset error bits
Write register 3
b7 and b6: Rx data bits (11
8 bits, 10
7, 01
6, 00
5)
b5: hardware handshaking using RTS/CTS
b4 to b1: must be 0
b0: enable Rx data line
Write register 4
b7 and b6: DART clock mode (set to 01
)
b5 and b4: unused (set to 0)
b3 and b2: stop bits (11
2 bits, 10
1, 01
1.5, 00
illegal)
b1: parity type (1
even, 0
odd)
b0: parity checking on/off
Write register 5
b7: DTR enabled/disabled
b6 and b5: Tx data bits (11
8 bits, 10
7, 01
6, 00
5)
b4: send break
b3: enable Tx data line
b2: unused
b1: RTS enabled/disabled
b0: unused
Read register 0
b7: break received
b6: unused
b5: CTS
b4: ring indicate
b3: DCD (carrier detect)
b2: Tx buffer ready
b1: interrupt-related
b0: Rx character available
Read register 1
b7: unused
b6: framing error
b5: Rx overrun error
b4: parity error
b3 to b1: unused
b0: all sent