Recently, I got a “The Amazing Spider-Man” (Gottlieb 1980) that won’t boot. I’ve never worked with this architecture before, so my diagnostics might seem a little haphazard, but this is my plan:
- Make sure the board has good power and the chips seem to the be functioning
- Scope the signals (address, data, chip select, reset, IRQ, etc.)
- Plug into the diagnostic port and single step the processor
- Remove the processor and check the ROM, RAM, and RIOT chips
Step 1 is complete. There was a weird jumper on the back of the board that was shorting power to ground near chip Z26 (hex inverter chip). I can’t begin to imagine why this jumper was there. Its only function was to create a short between +5 and ground, and it did that quite well.
Step 2 – I looked at the signals and they looked reasonable, with the exception of A4. I never saw it go low and it appeared to have noise on it from A5 perhaps.
I thought maybe there was a short in one of the chips that was causing A4 to be pulled high or something. When I removed U4, the problem disappeared, so I replaced U4 and moved on. After this, I was able to see A4 go low on occasion, but when it’s high it still has noise on it from other lines. Maybe it’s just crosstalk, I’m not sure. I decided that it would be easier to tell once I plugged into the diagnostic port and tried to read the addresses being accessed, so I moved on to step 3.
Step 3 – I have a bunch of Arduino Nano’s around (I use them for lots of projects) so I figured I could use one to serve as a diagnostic interface to this board. They’re perfect for this type of thing, but they only have 18 useful I/O lines (I think), so I had to put two together. I basically turned one Arduino into a shift register to read the Address lines, and used the other to input the Data bits and other signals (R/W, SYNC, clock, etc.). I use two lines to control the board – RESET and READY. This code is pretty simple, but I can GitHub it if anyone thinks it might be useful. Here’s my breadboard interface to the System 80.
With that done, I wrote code to RESET the 6502, raise the READY line, wait for the SYNC signal, and then drop READY again. After that, I figured I could read what the processor was trying to do. Here are the results of that effort.