Close

Testing ULAs

A project log for OpenSpand ZX81 expansion

OpenSpand is a ZX81 expansion cartridge based on an RP2350B chip. Like a ZXpand+ with extended functionality.

adamklotblixtadam.klotblixt 01/06/2025 at 17:560 Comments

I spent the entire day testing different combinations of ULAs and CPUs on my ZX81s in order to understand why some combos did not work with OpenSpand. Lots of chip changes and short tests of different programs, lots of hung or rebooted ZX81. In the end I did find a way to be compatible with all the combinations I have tested.

In the RD code I used to let the RP2350 first output data and then set the data itself. It worked perfectly fine on the Sincalir ULAs, but very poorly on some of the clone ULAs. Changing the order to first write the data and then setting to output fixed a lot of problems.

The main loop that checked the Z80 bus and responded in real time had to be changed as well. After many hours of testing and rewriting code, I decided to read a newer version of the Z80 manual. I had problems with the CMOS version of the Z80, whereas the NMOS version was perfectly stable. After some reading I realized I had decoded the RFSH signal by itself, where the manual claims it has to be decoded together with MREQ. With this info I managed to change my if/else-code to a much better switch/case that is better at decoding the bus evenly timed. In the end I had to use 2 different statements, both RFSH together with MREQ and RFSH by itself, in order to get 100% stable operation.

5 different ULAs, 4 different CPUs were tested on 2 different ZX81 revisions. I finally have a better grasp of what chips I own, and that they actually work OK :D

From left to right:
VLA81 V2.2, 2x of Andy Rea's ZX81 ULA 2K18, Andy Rea's ZX81-ULA 2011, Sinclair 2C185E and 2C210E under heatsinks.

Discussions