RC2014 with ZX Printer interface

My original plan had never been to design and build my own computer.  I had, however, planned to build a clone of the Sinclair ZX80, which has been on my bucket list of things to own for year, and which I had found plans for online.  Whilst collecting the parts and reading up on simple Z80 computers I got kind of sidetracked and ended up with the RC2014.

The print out shown was what was left from the last time this was connected to a ZX Spectrum!

The heart of the RC2014 is a Zilog Z80 CPU, which is the same one that Sinclair used in the ZX80, ZX81, ZX Spectrum and Z88.  If the ZX81 and ZX Spectrum can run a ZX Printer, then surely it follows that the RC2014 will be able to too?

The RC2014 backplane brings out nearly every signal that the ZX Spectrum has on it’s edge connector, so a simple adapter from the 0.1″ pin header to an appropriately laid out edge connector should suffice.  The only signal the RC2014 doesn’t have is 9V which is used to drive the original ZX Printer, so I added a connector for that to be injected in.  (For my use it isn’t strictly needed as I’ve got the Timex/Sinclair 2040 (also sold as Alphacom 32) which takes it’s power from a mains adapter, not the edge connector, but is otherwise totally compatible)

i

i (1)

So, I soldered the connector on, plugged it in and expected things to work.  But, no.  I had Odd Things™ happening, and couldn’t get much sense out of the serial interface.

It turns out that the ZX Printer uses very very minimal address decoding.  Basically, if the IO address line A6 is low, then it has the data bus.  The only thing I had connected to the IO of the RC2014 was the serial interface, which although it only had a small amount of address decoding, it did use A6 in a low state.

IMG_20140909_210418

So, a little bit of thinking later, I realised that the easiest solution was to put some decoding on to the ZX Printer adapter so that it would only respond to a more specific address.  Luckily the design of the RC2014 backplane meant that cards can be easily extended with a bit of Verobaord.

IMG_20140909_221232rotated

Here’s the modified board with a 74LS10 that brings A6 low only when A0, A1, A3, A6, A7 are high.  Therefore I can address the printer from port 203 (0xCB)

 

IMG_20140909_232640

The control of the printer is very low level indeed (ie ever so simple, thus complicated to do!).  Early tests have shown that I can print lines of different lengths though!  I consider that a #WIN but will see if I can get a dedicated print driver written for this.