"Flash" Part 1. And so it begins...
So, the playfield is a mess. OK, we'll have to deal with that. We can start with the upper side of the playfield or the lower side. Seeing as this blog is called "Life Under The Playfield", guess where we started!
The big decision here was whether or not to remove the wiring harness. It seems like a drastic step to unsolder the harness because the chances of being able to ever solder it back, are infinitesimally small. Impossible, even. So this is a definitive, never-to-be-undone decision. I did think about doing the playfield first, so I could skip the big harness decision, or at least postpone it, but no.
There are two reasons why I wanted to get the harness off there. The first reason is that I have no intention of putting a Williams System6 MPU board or driver board or anything remotely like that into this machine. "Flash" is being reborn with state of the art electronics, and is the pilot project for our new TP400 system. The system uses a serial network to communicate between the main game computer and all of the ancillary hardware. For example, a TP410 board operates two flipper coils and two slingshots. Want to activate the flippers? Talk to the first TP410 on the playfield. I'll get into the architecture of the TP400 system a bit later on. For now, suffice to say, it isn't plug-compatible with the miles and miles of wires in a Williams System6 pinball.
So that's a strong reason to remove the wiring to the solenoid coils. The playfield also uses old 6.3 volt bulbs, and I'm switching to multicolour LEDs. I'd originally thought I'd just change out the tungsten bulbs for #42 or #46 LED equivalents, but I'm no fan of the bayonet fittings used in old machines. I find they are flaky. If I never have to jiggle a bayonet bulb to get it to work again, I'll be very happy. OK, so the lamp matrix harness can probably go, too. But the switch matrix? I will most likely be retaining the switch matrix more or less exactly as it is. So why desolder all those connections only to re-add them?
The second main reason for wanting to remove the wiring harness is the back of the playfield is a mess. Cobwebs everywhere, rusty mechanical fittings, and I'm pretty sure the top of the playfield has bird poop. Yes, bird poop. I am going to have to remove each and every mechanism and clean it. To say nothing of the lamps. Removing the harness gives me better access to the internals. I can start to get a grip on what's what.
A lot of the mechs have been bent out of shape so I will need to remove them, clean them, and try to straighten the various actuators and weird mechanical Rube Goldberg movements, before restoring them back to the playfield. I'll also end up changing a lot of the coils too, I suspect. Once the mechanics, the LEDs, and the switches are back in place, I can start adding TP400 boards and restoring the wiring.
Maybe now is a good time to talk about switch and lamp matrices?
An average machine has anywhere from 40 to 60 switches on the playfield and in the backbox. These range from the numerous deadly tilt switches, the coin mech switches, rollovers, slingshot switches, targets, and so on. Given that a lot of these machines used PIA chips to read the switches and to operate the lamps and solenoids, you can imagine you'd need a lot of data bits on the PIA to be able to read 60 switches. Given that a PIA has 16 I/O pins, you'd need four of the things just to read the switches, to say nothing of all the lamps and solenoids. That would get expensive, very quickly. It would also make the wiring harness an absolute nightmare.
Instead, we arrange the switches into an array with eight rows and eight columns (that's convenient - we can do that with a single PIA). Take a look at this picture, to see what I mean:
Here, we have twelve switches connected to four columns and three rows. If I output four bits to the columns such that C3 is 1 (high) and C2 through C0 are 0 (low), then I can sense the last column of switch positions on R0 through R2. If any one or more of those switches in the fourth column are closed, then I will see a corresponding 1 (high) on R0 through R2. I can then set C3 to 0, and set C2 to 1. Now I'm looking at the third column. In the CPU, I can do this easily by setting the column register to 0b0001 (or 01 in HEX). I can quickly read R0 to R2 and see if any of the switches in the first column are closed. Then, I can use a Left-Shift instruction (LSR on the 6800) to shift the register to the left. Now I have 0b0010 (or 02 in HEX) and I'm now sampling the switch status on the second column. I can do this a total of four times, and I'll have read all twelve switches using only seven I/O bits. the number of switches I can read is equal to the number of rows multiplied by the number of columns. For small numbers of switches (for example, only four), it isn't worthwhile. But eight rows and eight columns allows me to read 64 switches with only 16 I/O bits or one PIA chip.
It's a bit slower to read the switches this way, as I have to loop through eight different columns and read the row status for each. There's also another side-effect, which is known in keyboard terms as a "two key rollover" issue. To explain this a little better, let's refer to the above diagram, and number the switches based on their row and column numbering. So C3R2 is the switch at the bottom-right of the diagram and C0R0 is the switch at the top-left. It's all very well provided no two switches are closed at the same time, but what happens if they are? What happens if I'm holding down the flipper button just as the ball bounces off the slingshot, and presses the slingshot leaf switch?
So C3R2 is closed, so too is C2R2. Now I've shorted out C3 (high) and C2 (low) as I scan the switch state (or vice versa). The +5 volts logic high from C3 flows down to row #2 where C3R2 brings the signal across to row 2. But C2R2 is also closed, and so now we've sent +5 volts back up C2 which is set to ground, thus shorting it out. We could do a complicated "open collector" arrangement where we only drive the signal low, and it floats high via a pullup resistor. I won't go into too much detail on this, because there's an easier way.
We can put a diode in series with each switch. Now we can drive +5 volts down through C3 to R2, but the diode blocks the 5 volt signal from travelling back up R2 to C2.