Williams Multi-game Hack
by Nick Sayer
First, I'd like to thank Doug Jeffreys and Sean Riddle for their information.
Without them, I wouldn't have gotten as far as I have.
This hack is a middle ground between Doug's version and Sean's version. This hack combines Doug's all-in-one-ROM hack and his Bubbles hack onto one daughtercard and reduces the number of added wires slightly. It also adds a DIP switch selection and independent CMOS banks for each of the games. This hack does nothing about the control panel. I just switch plugs on mine when I flip the DIP switches. This hack won't give you Defender or Sinistar. They require changes to the memory map that are beyond the scope of this hack. Besides, Sinistar needs a vertical tube and Defender is just a simpler version of Stargate. This hack also makes few permanent modifications to the original boards. As these games start to officially become antiques, a collector should also begin thinking about being a conservator. If all we wanted was to just play the games, we could play them on our PCs, after all. There are two changes that have to be made, however: The original CMOS chip on the CPU/vid board must be disabled. There are two ways to do this. The better method is to desolder and remove the CMOS chip and replace it with an IC socket. This makes the hack more reversable. To reverse the hack, just stick the chip back in the socket. The other alternative is to cut the /CS trace leading to this chip. To undo this, you'll need to reconnect the trace. The trace in question is the one leading to pin 8. The CMOS RAM chip is at 1C on the board. Pin 10 is the /WE pin. You don't need to cut this pin, as we don't really care what is written into this chip anymore, since we'll never read from it (besides, both /CS and /WE have to be asserted to write). Since you've disabled the CMOS chip, you can also remove and throw away the AA batteries on the CPU/vid board. They won't be used anymore. The other change that is necessary is removing and bypassing the 7805 on the sound board. The reason for this is that the daughtercard ties into the 5 volt supplies from both the ROM board and from the sound board. If the 7805 were left in place, then the result would be two 5 volt power supplies fighting with each other to power the whole system. This leads to large currents through the daughtercard and possibly ripple or other problems with the +5 supply on one of the boards. The best way to handle this situation is to desolder and remove the 7805 from the sound board and run a wire between one of the unused power input pins and test point 4. Then punch down a new wire on the power connector to match the pin you connected to TP4 and connect the wire to the +5 volt supply at some convenient point. You should use a relatively beefy wire for both this and the TP4 jumper -- 24 gague or better. You don't have to modify the soundboard if you don't want to. The other option is to keep the 5 volt supplies separate -- Connect pin 24 from the sound board ribbon cable to pin 28 of the 27512, but nowhere else, and use a separate set of DIP switches to control the sound board ROM. By keeping the 5 volt supplies separate you should be safe from the problem of fighting power supplies. Next, carefully remove the ROMs from your ROM board. Not only are you going to want to save them for later, but you (presuming you don't have other means to get Williams ROM images) need to read them in so that you can put the code into the new BIG ROM used on the daughtercard. The daughtercard will contain a 27C040, a 27512, a 74LS04, a 74LS133, a 74154, a M48Z08, 3 DIP switches and two 24 pin sockets that will attach to ribbon cables leading off to the ROM board and the sound board. The circuit is fairly simple. A0-A11 and D0-D7 come in on one of the 24 pin sockets. A12-A15 come in on 4 wires. Two /CS signals come from the 74154 on the ROM board to the one on the daughtercard (which is going to have the same inputs, and will thus 'mirror' the ROM board one). A12-A15 also go to the '154. 12 of the outputs of the 74154 go into the 74LS133 (leave out outputs 9 through 12). The output of the 74LS133 gets inverted by one of the gates in the 74LS04 on the way to becoming the /OE pin of the 27C040. A16-A18 of the '040 go to 3 DIP switches. A0-A9 also go to the M48Z08, as do D0-D7. A10-A12 go to the same DIP switches. /E and /G (tied together) go to the CMOS /CS from the CPU/vid board, and the M48Z08's /W goes to the CMOS chip's /WE signal. Finally, a 2nd 24 pin socket brings in A0-A11 and D0-D7 from the sound board (note that this is a different address space, thus the two separate ROMs on the daughterboard). Those signals as well as the sound board ROM's /CS go to the 27512, and A12-A14 come from the DIP Switches. Now let's look in detail at what's going on. The 74154 on the ROM board is there to choose which of the 12 ROMs should be selected. It does this based on 6 inputs -- two /CS signals and A12-A15. There are 16 outputs of this chip, only 12 of which go to ROMs. We want to select the BIG ROM whenever any of these 12 outputs is chosen. So we want a 12 input inverted-input NOR gate. Well, the 74LS133 is a 13 input NAND gate... Add an inverter at the end and tie one of the inputs high and we're all set! The upper address pins of the '040 act as a game select, choosing which 64K chunk of the ROM is to be present in the address space. It also does this for a 1K chunk of the NVRAM, and a 4K chunk of the sound ROM. My first pass at this was wire-wrapped in a 4"x4" piece of perfboard. The hardest part was finding a supplier of the SGS-Thomson NVRAM chips. I ended up having to buy 10 of them. *sigh* They're interesting little devices, though. I'm sure that you can do something interesting with the other 9 if you're forced to do this as well. One thing I have discovered is that you can't quite just switch games by flipping the DIP switches. At first blush, this conclusion would seem obvious -- changing the DIP switches with the CPU running is bound to scramble things badly. However, just flipping the DIP switches really does work in the case of the main CPU. The CPU will get confused and stop petting the watchdog (the watchdog is a small timer circuit on the CPU/vid board. If a particular memory location is not written with a particular value every so often, the watchdog will "bite" and reset the CPU), and the game will reset. The trouble is that the watchdog has no effect on the sound board's CPU. So you can change games with the DIP switches only, but the sound will usually go bonkers in the process. One way you can avoid this is to tie the /RESET lines of the two CPUs together. The CPU on the CPU/vid board is at 1E, and the /RESET pin is pin 37. The CPU on the sound board (at least on mine) is at the lower left corner and /RESET is pin 40 (the CPU/vid board CPU is a 6809, the sound board CPU is a 6802. I have not tried this -- I just change games with the power off since going in the back cuts the interlock anyway). Another problem with just flipping DIP switches is that sometimes the CPU can scramble the NVRAM before it gets bitten by the watchdog. If you're going to just flip the switches, I recommend holding RESET down while you do it. Schematic of the daughterboard. It was originally hand drawn and faxed into a fax modem. Many thanks to Scott McGovern for converting it into a proper CAD document. SGS-Thomson's web site. You can find PDF datasheets on the M48Z08 here. Spies schematics page. Look in the Williams section for Joust schematics. |