The goals of this project are quite straight forward.
- Achieve 100% 48K Spectrum compatibility:
- Accurate video/T-state timings
- Video memory contention delay
- Floating bus (aka reading from an unknown port)
- Produce RGB with TV and VGA sync signals (to allow a normal TV or computer monitor to be used).
- Use nothing but off-the-shelf discrete components.
- Allow design to be extended to 128K spectrum.
These goals appear obvious at first glance, however it is easier to design a clone that does not accurately mimic the video timings and memory contention etc of a real Spectrum, in which case there will be a number of ZX Spectrum programs that will not run correctly.
We could decide that this is an acceptable trade-off for simplicity, however I have written a number of games that require the floating bus 'bug' that I'd like to run on the clone, and besides, there's nothing like rising to the challenge!!!
In the following sections I will look in detail at the ZX Spectrum design and behaviour, starting with the ULAs video generation...