Sunday, 27 May 2018

ZX Spectrum Resurrection

This is another one of those computer boards that have had a hard life, and are borderline cases whether they are worth repairing.
This is the board as it arrived. The result of many previous repairs and repair attempts have taken their tole.
Most notably, a recent attempt to remove the lower RAM chips. Here, two chips have been moved, one with the legs partly cut odd, some pads and tracks have been damaged, and capacitor C8 is missing, presumably cracked when used to lever the chip off. Please don't lever chips of boards. If they don't fall off by themselves, they are still attached.
Looking at the rest of the lower RAM. One chip has been removed and another of a different manufacturer, part number and speed, soldered back. Yes, it 'should' work, but you usually have a much better chance if you can match the rest of the chips, like the RAM chip to the right, which is the same part number, but a year older than the rest.
Another chip has been removed and socketed, although it worries me that it's not even the right socket, it's two parts of a larger socket cut down.
The same thing has been done to replace one of the upper RAM ICs, although it looks like the original chip has been reinstated.
The whole board has been recapped (a pet hate of mine), with radial capacitors with bent leads, rather than axial types as originally, although many of them are Nichicon, so they are at least good quality parts.
The Z80 is not original, it has a 1988 date code, the rest of the board is 1984 (8426 on the PCB under the lower RAM). The ROM has been replaced by an EPROM, and the 7805 with a switching replacement. The whole board is also covered in pretty nasty flux residue.
Finally, the ULA is a 6C001E-6, the board is an issue 4A. This then doesn't look like the original since the board is data a year later  The 6C001E-6 isn't meant to be used on issue 4 or later boards anyway, as the RAM timing was changed.
Where do you start? Well, the partial removal of the lower RAM has left some solder bridges on the back, so I can't even power it on. I think step one is to remove the lower RAM and try to make good the damage.
OK, well, that was fun. I have cleanly removed the remaining chips, as well as the replacement chip and the bits of socket.
One thing I didn't realise until I started, is that all the chips had their pin 1 legs cut and resoldered. An interesting trouble shooting technique, presumably a previous short on the -5V rail?
With a clear view of the board, it's not too bad, there are clearly some broken tracks, and missing tracks, and possibly a number of missing through hole vias. The missing capacitor, C8 is a 22nF decoupling capacitor. I replaced that with one from elsewhere on the board, so it matched, and fitted a modern 22nF cap where it was less obvious elsewhere on the board.
I've drawn in the two most obvious missing tracks in red. The rest of the tracks are generally OK, a few more breaks, and some places were the signal hasn't made it through to the top of the board due to loss of through hole plating. If I was going to replace this RAM, it would probably end up with a lot of wire links replacing missing tracks.
However, the saving grace with this board, is the owner had purchased a lower RAM replacement module that he planned to fit. This only has pins at either end, and one or two pins per chip in between, so I only needed to make sure those particular pickup points were connected correctly. It is also based on static RAM, so only needs 5V, rather than relying on the Spectrums rather flaky -5V and 12V rails.
This has thick square pins, which is not ideal, as these wouldn't fit in the round turned pin sockets I normally use in these situations. They are my preferred choice as they contact the board on both sides, so can act to replace missing through hole plating.
So instead, I went for soldering it directly to the board, with a couple of wire links underneath to fix missing connections. With that installed, I could at last power it on and see what we were looking at.
OK, so there is some output, but all 8 bits are being reported as bad. At this point, I swapped out the ULA and Z80 for known working ones, and removed the EPROM for the moment. That didn't help. Time to recheck the connections.
This time I found a break on the RAS line. It had continuity to IC25 (where I had measured it), but not to the ULA. Looking carefully around the board, I traced the track back to where it ran to the ULA, and bingo, we have a track break.
This is close to the leg of C28, so I presume it was knocked with the soldering iron when removing C28 for recapping. (another reason why I dislike recapping is it has these sort of knock on effects with the potential for more damage to be caused).
OK, so we have a working Spectrum now, although it is using a replacement ULA and Z80 and no ROM, loading the test ROM from an external ROM interface.
This has the two test ROM images I used (ZX Diag and the 128K RAM tester), and also the standard 48K BASIC ROM and the Looking Glass ROM (an updated version with keywords entered in the style of +2 BASIC). This fits into the divMMC future case (because I had those around), and as such I thought I may as well fill the 9 way D connector hole with a Kempston joystick interface. (UPDATE: people have asked, so I have listed the Joystick Emulator boards on Tindie)
Plugged into that is one of my 'Joystick emulator' boards. I use these for testing USB joystick boards, but it is handy here as you can control some of the features of ZXdiag using a Kempston joystick.
Running with that, it was working, so time to return some of the original chips. Replacing the EPROM didn't work. I tried to read it in the programmer, but it wasn't reading correctly, the whole thing was corrupt. I tried erasing it and reprogramming it, but it wouldn't verify giving similar errors.
The board had been modified (or at least so it appeared) for an EPROM, so I burned a replacement and fitted that, but I thought I would double check the EPROM conversion, and sure enough that wasn't right.
The H and N links set the ROM type as 'Hitachi' or 'NEC', and swap around the two CS lines on the mask ROM, one driven from MREQ, and one from ROMCS. Here, the original N links have been cut, and one of the H links has been fitted. This means the ROM would be enabled when ROMCS was low, even if MREQ was high. The missing link sets the second enable pin, on the mask ROM, pin 27. On a 27128 EPROM, this is the PGM pin, which needs to be pulled high in normal operation. This had been done with a wire link on the back of the board.
The usual way to do this properly, is to make an OR gate with two diodes and a resistor, so that the CS line is only low if both MREQ and RAMCS are low. These can be fitted in place of the links, with the 10K pulldown resistor attached to a convenient ground point to the left of the speaker.
With that fitted and the new EPROM, we were back in business. I put back the original ULA (well, not the original, but that one it arrived with), and that worked fine. I presume the timing is less of an issue as the lower RAM replacement module uses a latch to store the two parts of the RAM address.
I decided to remove the socket on the upper RAM as it was a bit loose, and may have caused intermittent faults in future.
I did try the original Z80 (again, I mean the one it came with), and although that worked, it had a bad M1 line, so it couldn't be used with a divMMC or Interface 1. So the upper RAM is original to the board. The ULA was replaced some time in the past, and I have now replaced the Z80, ROM and lower RAM. The speaker is still original though.
Time for some testing, with a divMMC future of course.

If you want to support this blog, you can donate via Patreon or Paypal, or buy something from my store.