
-----------------------------------------------------------------
|  SWITCHABLE CONVERSION BETWEEN ROBOTRON, JOUST, AND STARGATE  |
-----------------------------------------------------------------

COPYRIGHT 1994

REVISION NUMBER: 1.0 (first public release)
  REVISION DATE: 24 May 1994
     CREATED BY: Doug Jefferys


STANDARD DISCLAIMER:
--------------------

The author hereby grants permission to reproduce and distribute this
document for personal use, subject to the condition that the document
(along with any copyright and disclaimer notices) is not modified in
any way.  The opinions expressed within this document are those of the
author only and not necessarily those of the author's employer.  This
document is provided for informational purposes only.  Although the
author has made every effort to provide accurate information, he cannot
guarantee the accuracy or usefulness of any of the information contained
herein due to the complexity of the issues involved.  The author takes
no responsibility for anything arising as a result of anyone using the
information provided in this document, and the reader hereby absolves
the author of any and all liability arising from any activities
resulting from the use of any information contained herein.


GENERAL OVERVIEW:
-----------------

Okay, so there's been a lot of talk among us collectors about what
can and cannot be done with Williams games.  The theory has been
discussed; now it's time for some application.

What we want to do is get three Williams games to play within the
same cabinet.  What we don't want to do is hunt for any new hardware.

We look at the Williams games out there, and note that Robotron and
Joust use common parts, except for the ROMs.  We note that Stargate's
ROMs will also work in a Robotron or Joust cabinet.  Sadly, we note
that we can't run Robotron or Joust off a Stargate setup, but, as they
say, life is hard.

Swapping control panels isn't too bad, but we're really sick and tired
of swapping all 12 program ROMs (and the sound ROM) every time we want
to switch games.  Wouldn't it be nice if all we had to do was use a
ZIF (Zero-Insertion-Force) socket and a single chip?  It'd be cleaner,
easier, safer, and infinitely more convenient.  Heck, it'd even be
quicker than swapping ROM boards.  All in all, a real win.

At the end of this project, you'll have a funny-looking adaptor with
a ZIF socket that you can plug into your sound board, and a small
daughterboard (also with a ZIF socket) plugged onto your ROM board.
You'll have a few pairs of chips which you wan swap in and out of the
sockets to swap games, and as a bonus, you'll have a pile of spare
ROMs you can use for hacking.

As with my previous conversions, sections labeled "Tech Note" are
primarily for people who want to know *WHY* the hack works, and how
it was designed.  If you're only interested in building the unit,
you can skim over these sections.


INGREDIENTS:
------------

1 - Working Joust or Robotron machine.
1 - Set of controls for whichever two (Joust/Robotron/Stargate) games
    you don't have yet.  How you obtain or create these is up to you.
3 - 27512 EPROMs at 450ns or faster
3 - 2732 EPROMs at 450ns or faster
1 - 7404 hex inverter chip
1 - 74133 single 13-input NAND chip (no, that's not a typo :-)
1 - 28-pin ZIF (Zero-Insertion Force) socket
1 - 24-pin ZIF (Zero-Insertion Force) socket
1 - 16-pin socket
1 - 14-pin socket
1 - 28-pin socket
3 - 24-pin sockets
1 - 4-pin .100" male strip header
5 - 12-pin .100" male strip headers
1 - 12-pin .100" female MTA plug
1 - 4-pin .100" female MTA plug
1 - chunk of blank breadboard, .100" spacing, about 2.5 inches square

You will also need an EPROM programmer (or a friend who has one),
binary dumps of Robotron, Joust, and Stargate ROMs, a wire-wrapping
tool and a soldering iron.


WHAT THIS HACK IS:
------------------

It's a way of getting a Joust or Robotron machine to play Joust,
Robotron, and Stargate.

You'll be able to switch between any of the three games in about
a minute, by switching two EPROMs and (possibly) an adaptor.


WHAT THIS HACK ISN'T:
---------------------

This hack will *NOT* work on most Stargate machines.  Stargate's CPU
board requires an upgrade before it will run the newer games, and its
ROM board is also incompatible.  Sorry, folks, but them's the breaks.

There *are* ways around this, but...

...the cheapest upgrade path from Stargate is to get a Robotron or a
Joust ROM board and to upgrade the Stargate CPU board, but...

...unfortunately, CPU board upgrades are beyond the scope of this hack.
I'm working on a supplementary document that will describe some of the
various Williams boards out there, as well as their upgrade paths.  If
you've got spare CPU boards lying around, but none of them are from
Joust or Robotron, try a Sinistar or Bubbles CPU.  These should work.

Last but not least, this hack is not for those of you who want to keep
your high score information or game settings stored between playing
sessions.  Due to differences in the software, switching games will
erase your CMOS RAM settings.  Sorry, but there's no easy way around
this one.  (I suppose you could wire up a whole bank of CMOS RAM chips
and manually select a specific chip when you switched games, but such
an extension would be far beyond the scope of this project...)


DETAILED INSTRUCTIONS:
----------------------

 0) Read all of these instructions before you begin.

    Steps 1) through 4) can be done at your desk in about half an hour.

    Steps 5) and 6) are the toughest and will take a fair bit of
    patience and care with the soldering iron; the EPROM socket
    adaptors can be a real pain to build.  Take your time and don't
    be afraid to take breaks.

    Steps 7) and 8) are a little less tedious, but should still be done
    with care, as you'll be soldering directly to the circuit board in
    step 8).  Again, take your time and take some breaks.

    Steps 9) and 10) are a nice wind-down and can be done in another
    half-hour or so.  The frustration level here will depend on your
    luck in getting connectors that co-operate with your wire and tools,
    but even the most persnickety combination of equipment shouldn't
    take you more than an hour.


 1) Create the program ROM data files:


 1.1) Read the Robotron, Joust, and Stargate ROMs and store the data
      on disk.  When reading ROMs, make sure your programmer is set
      to the correct chip type (2732 or 2532).  As long as you get
      the data in, the rest doesn't matter.

      Due to the multiplicity of ROM sets out there, I can't guarantee
      that every ROM set will work with this hack.  I can, however,
      guarantee that "Solid Blue" ROMs will work for Robotron, and that
      the "Solid Red" ROMs will work for Joust.  I don't know about
      which sets of Stargate ROMs will work, as I only had one set
      (which had been burned by a third party) to work from.

      As an added note, the "Solid Red" Joust ROMs are an older version
      of the program.  The "Pterodactyl Trick" will work on these ROMs.


 1.2) Create a dummy file of hex $FFs, 4096 bytes long.

      Call this file "blank.fff".


 1.3) Create the program ROMs, using 27512s.  The contents of the three
      games will be mapped onto each ROM as follows:

      $0000-$0FFF = ROM 1
      $1000-$1FFF = ROM 2
      $2000-$1FFF = ROM 3
      $3000-$1FFF = ROM 4
      $4000-$1FFF = ROM 5
      $5000-$1FFF = ROM 6
      $6000-$1FFF = ROM 7
      $7000-$1FFF = ROM 8
      $8000-$1FFF = ROM 9
      $9000-$CFFF = BLANK
      $D000-$DFFF = ROM 10
      $E000-$EFFF = ROM 11
      $F000-$FFFF = ROM 12

      Executing the following scripts will create the required files:

      cat joust.01 > joust.512
      cat joust.02 >> joust.512
      cat joust.03 >> joust.512
      cat joust.04 >> joust.512
      cat joust.05 >> joust.512
      cat joust.06 >> joust.512
      cat joust.07 >> joust.512
      cat joust.08 >> joust.512
      cat joust.09 >> joust.512
      cat blank.fff >> joust.512
      cat blank.fff >> joust.512
      cat blank.fff >> joust.512
      cat blank.fff >> joust.512
      cat joust.10 >> joust.512
      cat joust.11 >> joust.512
      cat joust.12 >> joust.512

      cat robotron.01 > robotron.512
      cat robotron.02 >> robotron.512
      cat robotron.03 >> robotron.512
      cat robotron.04 >> robotron.512
      cat robotron.05 >> robotron.512
      cat robotron.06 >> robotron.512
      cat robotron.07 >> robotron.512
      cat robotron.08 >> robotron.512
      cat robotron.09 >> robotron.512
      cat blank.fff >> robotron.512
      cat blank.fff >> robotron.512
      cat blank.fff >> robotron.512
      cat blank.fff >> robotron.512
      cat robotron.10 >> robotron.512
      cat robotron.11 >> robotron.512
      cat robotron.12 >> robotron.512

      cat stargate.01 > stargate.512
      cat stargate.02 >> stargate.512
      cat stargate.03 >> stargate.512
      cat stargate.04 >> stargate.512
      cat stargate.05 >> stargate.512
      cat stargate.06 >> stargate.512
      cat stargate.07 >> stargate.512
      cat stargate.08 >> stargate.512
      cat stargate.09 >> stargate.512
      cat blank.fff >> stargate.512
      cat blank.fff >> stargate.512
      cat blank.fff >> stargate.512
      cat blank.fff >> stargate.512
      cat stargate.10 >> stargate.512
      cat stargate.11 >> stargate.512
      cat stargate.12 >> stargate.512

      Tech Note:  The address space between $9000 and $CFFF is used
                  by the machine for I/O and other goodies, so you
                  can't use it for your own hacks.  Sorry...


 1.4) If your sound board uses 2532s (as it probably does), and you only
      have 2732s to program for the missing games, you'll have to wire
      up an adaptor later.  You should, however, still read in the data.
      This will give you the ".snd" files needed for the sound ROMs.

      Note that Stargate actually uses 2K for its sound data, not 4K
      like Robotron and Joust.  Read in its data and save it to disk
      as "stargate.raw".

      NOTE:  If you have a 4K data file for Stargate, examine it more
      closely.  You may find that only the first half of the file
      contains data and that the second half is composed solely of
      $FFs.  If this is the case, you'll have to split off the first
      2K of the file to create "stargate.raw".  To create the 4K
      "stargate.snd" file which will be used in this hack, you'll want
      to have two copies of this data, one after the other.  Execute
      the following script to create "stargate.snd":

      cat stargate.raw > stargate.snd
      cat stargate.raw >> stargate.snd

      You may now discard the "stargate.raw" file.

      Tech Note:  We're saving ourselves a lot of trouble; re-strapping
                  a sound board is a real pain.  See the discussion on
                  the various strapping options in step 4) for more
                  details.


 2) Fry up the ROMs:


 2.1) Burn a 27512 with the contents of "joust.512", another with the
      contents of "robotron.512", and a third with the contents of
      "stargate.512".

      Tech Note:  My EPROM programmer won't conveniently handle
                  anything larger than a 27512.  Thus, I'm going
                  with the "switchable chip" design, rather than
                  trying to consolidate all three games on one
                  larger chip.  If you've read through this file
                  and grok how this version of the hack works,
                  then you should be able to figure out how to
                  extend it appropriately.  Have fun!


 2.2) Burn a 2732 with the contents of "joust.snd", another with
      the contents of "robotron.snd", and a third with the contents
      of "stargate.snd".


 3) Okay, you've got your chips.  Now we have to figure out when to
    read data from the chips, and from what addresses we should do
    the reading.

    [Editor's Note:  This whole section is basically an extended tech
                     note, but it's probably worth reading, just to
                     get a feel for what we're trying to accomplish
                     with all of this...]

    Or not.  Most of this has already been figured out for us by the
    gang at Williams.  The 74154 on the ROM board takes the four high
    bits of a 16-bit address and turns it into sixteen separate signals.
    Twelve of those signals are the !CS signals for the old ROMs, and
    the other four can be ignored, as they don't have anything to do
    with this hack.

    (So, what can we use that's already on the board?)

    Well, for starters, the 2732 (or 2532) sockets on the ROM board
    are directly connected to the data bus, and are also connected to
    the lower 12 bits of the address bus.  If we construct our adaptor
    wisely, that's a *big* pile of signals we won't have to worry about
    on the 27512.

    (Yeah, but what about...)

    ...the upper 4 bits of the address bus?  According to the game's
    schematics, these are sitting on the inputs of the aforementioned
    74154.  All we have to do is connect them to the high 4 bits of
    the 27512's address pins, and voila -- our 27512 can be used to
    access the entire ROM address space.

    Okay, so when do we turn it on?  Simple.  We read from the 27512
    by pulling its !CS pin low whenever we want to read.  We *want*
    to read whenever any of the *original* twelve !CS pins on the ROM
    board is pulled low by the 74154.  Confused yet?

    (Yes!)

    Okay, look at it this way.  If all twelve !CS pins on the ROM board
    are high, then all chips are deselected.  Don't read anything.  The
    !CS on the 27512 should remain high.

    If any of the twelve !CS pins on the ROM board are low (and by
    definition, only one of them can be low at any given time), then
    the game must be trying to read from a ROM chip, so !CS on the
    27512 should be low.

    If we call the !CS on the 27512 "!CS512", and the !CS signals to
    the original ROMs "!CS1" through "!CS12", we see that:

       (!CS512) == (!CS1) && (!CS2) && ... && (!CS 11) && (!CS12)

    So, where do we get a 12-input AND gate?  We could make one out
    of a whole mess of 4-input AND gates, but there's an easier way,
    namely the 74LS133.  This chip is a 13-input NAND gate.  A truly
    odd duck in the TTL world, but downright invaluable in this
    situation.  Get the NAND of all 12 inputs (and a surplus "1"),
    invert it to get the AND of the inputs, and you're done.  Since
    all the logic is done on one chip, and since the order isn't
    important, the wiring will be a cinch!


 4) Verify strapping of boards:

    You could start building right now, except for the fact that you
    wouldn't necessarily be building on the right platform.  Williams
    boards have many jumpers and pads which can be cut or inserted in
    order to change their configuration.

    This is good from a design standpoint, as one can use the same board
    in a variety of applications.  Indeed, this hack owes its existence
    to the flexibility designed into the Williams hardware.

    Alas, it makes documenting such hacks a nightmare.  Some of you
    will have ROM boards strapped for 2532s, others with 2732s.  The
    same goes for the sound boards.  Other strapping options, used for
    specific games, may also be present.  Due to the wide variety of
    strapping variations out there (and the lack of documentation),
    it is generally difficult to tell anyone how to turn an arbitrary
    board set into a set which can be used in this hack.

    Having said that, we can still simplify the problem and save
    ourselves some work in the process:


 4.1) ROM board:

      This hack depends on having a ROM board which is strapped
      for 2732s.  Before we go any further, we need to make sure
      that this is the case.

      The easy way to tell is to look at the chips on the board.
      If they're 2732s, all is well and you can go to the next
      step.

      If they're 2532s, you'll have to change the strapping to
      accept 2732s before you can continue.  This is a very simple
      modification which can be done in less than ten minutes.

      According to the schematics, there are four jumpers on the
      ROM board, labeled W1 through W4.  Here are their approximate
      locations:

      W1: to the immediate left of ROM 5
      W2: to the immediate left of W1
      W3: to the immediate left of ROM 6
      W4: to the immediate left of W3

      If your board contained 2732s, W1 and W3 will be connected.
      If it used 2532s, W2 and W4 will be connected.

      When the boards come from the factory, the pairs of jumper
      pads will be connected by a (usually red) zero-ohm resistor.
      (These look just like ordinary resistors, except they've got
      very simple markings -- a single black line)  To change the
      strapping of your board, you can either desolder the jumpers
      and move them to their new homes, or just cut them off and use
      a piece of insulated wire to connect the pads.

      NOTE: If you decide to cut them off and replace them with
      wires, make sure the wires are insulated; the jumpers carry
      real signals; these are *not* ground wires!

      So, if your board contained 2532s, you'd desolder W2 and W4,
      and place the jumpers across the immediately adjacent pads
      at W1 and W3.


 4.2) Sound board:

      At this point, your ROM board should be strapped for 2732s.
      We now concern ourselves with the strapping of the sound board.

      The sound board can be strapped in *dozens* of configurations.
      For simplicity's sake, we shall assume that you started with one
      that was strapped for use in Robotron or Joust.  This means that,
      in all probability, it was strapped for 2532s; rather than fool
      around with trying to modify the strapping for 2732s, I decided
      to merely build an adaptor into the project, the construction of
      which is described later.

      The hacking we did in step 1.4) with the Stargate sound ROM data
      comes in handy here.  Because the original Stargate sound board
      was strapped for a 2516 (or 2716), and because some of the other
      jumpers on the ROM board are strapped differently, we would have
      had to swap a lot of jumpers every time we wanted to use the game.
      Rather than go through all this trouble, we embedded the strapping
      work in the 2732 EPROM itself, saving us untold headaches in the
      process.

      So, strapping doesn't matter here.  If the board came from Joust
      or Robotron, it's strapped for either game, and is strapped for
      2532s.  The adaptor will let us use our 2732s, and the work we
      did in step 1.4) will let us use Stargate sound ROMs in the same
      board without any further work.


 5) Build the program board:


 5.1) Start by building the adaptor to allow you to plug the big EPROM
      into one of the 2732 sockets on the ROM board.  This will allow
      us to use the address and data lines already present on the board,
      thereby saving us some wiring work.

      Tech Note:  Here are the pinouts for a 2732 and a 27512.  We want
                  to build something that will let us plug the 27512
                  into the game's existing 2732 socket.
                                         __ __
                                     A15|  U  |+5V
                      __ __          A12|     |A14
                   A7|  U  |+5V       A7|     |A13
                   A6|     |A8        A6|     |A8
                   A5|     |A9        A5|     |A9
                   A4|     |A11       A4|  2  |A11
                   A3|  2  |!CS       A3|  7  |!CS
                   A2|  7  |A10       A2|  5  |A10
                   A1|  3  |!CE       A1|  1  |!CE
                   A0|  2  |D7        A0|  2  |D7
                   D0|     |D6        D0|     |D6
                   D1|     |D5        D1|     |D5
                   D2|     |D4        D2|     |D4
                  GND|_____|D3       GND|_____|D3

                  Note the similarities between these pinouts.  We can
                  ignore the !CS signal on the 2732, as we're creating
                  our own from the other logic, and we'll have to move
                  the +5V line.  The rest of the pins can go straight
                  through to the chip; no wiring required.

                  We'll use strip headers for those "straight through"
                  connections, cutting off any lines we don't need, and
                  bending any lines we'd like to reroute away from the
                  chip, again simplifying the wiring job ahead.


 5.2) Start by putting the 12-pin strip headers into both boards,
      as shown below.  Note that you want the longer pins of the
      strip header to stick out of the top side of the boards, and
      the shorter pins to be on the bottom.

      Viewed from the top, the boards should look like this:

      LEGEND:
      -------
      . = empty hole on breadboard
      * = a pin from a 12-pin male strip header
      . . . . . . . . . . . . . . . . . . . . . . . . .
      . . . . . . . . . . . . . . . . . . . . . . . . .
      . . . . . . . . . . . . . . . . . . . . . . . . .
      . . . . . . . . . . . . . . . . . . . . . . . . .
      . . . . . . . . . . . . . . . . . . . . . . . . .
      . . . . . . . . . . . . . . . . . . . . . . . . .
      . . . . . . . . . . . . . . . . . . . . . . . . .
      . . . . . . . . . . . . . . . . . . . . . . . . .
      . . * . . . . . * . . . . . . . . . . . . . . . .
      . . * . . . . . * . . . . . . . . . . . . . . . .
      . . * . . . . . * . . . . . . . . . . . . . . . .
      . . * . . . . . * . . . . . . . . . . . . . . . .
      . . * . . . . . * . . . . . . . . . . . . . . . .
      . . * . . . . . * . . . . . . . . . . . . . . . .
      . . * . . . . . * . . . . . . . . . . . . . . . .
      . . * . . . . . * . . . . . . . . . . . . . . . .
      . . * . . . . . * . . . . . . . . . . . . . . . .
      . . * . . . . . * . . . . . . . . . . . . . . . .
      . . * . . . . . * . . . . . . . . . . . . . . . .
      . . * . . . . . * . . . . . . . . . . . . . . . .
      . . . . . . . . . . . . . . . . . . . . . . . . .
      . . . . . . . . . . . . . . . . . . . . . . . . .

      The view from the side should look like this:

              | | | | | | | | | | | |             < pin
              | | | | | | | | | | | |             < pin
              | | | | | | | | | | | |             < pin
              | | | | | | | | | | | |             < pin
              | | | | | | | | | | | |             < pin
              | | | | | | | | | | | |             < pin
      =========================================== < breadboard
              * * * * * * * * * * * *             < plastic surrounding pins
              | | | | | | | | | | | |             < pin
              | | | | | | | | | | | |             < pin


 5.3) Cut off pin 20 (!CS) of the strip header; it won't be used
      by anything in the circuit.


 5.4) Bend pin 24 at a right angle.  It will eventually supply the
      circuit with its +5V power.

      When you have completed the preceding two steps, the board
      should look something like this when viewed from the top...

      LEGEND:
      -------
      . = empty hole on breadboard
      * = a pin from a 12-pin male strip header
      x = a *cut* pin from the strip header
      - = a *bent* pin from the strip header

      . . . . . . . . . . . . . . . . . . . . . . . . .
      . . . . . . . . . . . . . . . . . . . . . . . . .
      . . . . . . . . . . . . . . . . . . . . . . . . .
      . . . . . . . . . . . . . . . . . . . . . . . . .
      . . . . . . . . . . . . . . . . . . . . . . . . .
      . . . . . . . . . . . . . . . . . . . . . . . . .
      . . . . . . . . . . . . . . . . . . . . . . . . .
      . . . . . . . . . . . . . . . . . . . . . . . . .
      . . * . . . . . --- . . . . . . . . . . . . . . .
      . . * . . . . . * . . . . . . . . . . . . . . . .
      . . * . . . . . * . . . . . . . . . . . . . . . .
      . . * . . . . . * . . . . . . . . . . . . . . . .
      . . * . . . . . x . . . . . . . . . . . . . . . .
      . . * . . . . . * . . . . . . . . . . . . . . . .
      . . * . . . . . * . . . . . . . . . . . . . . . .
      . . * . . . . . * . . . . . . . . . . . . . . . .
      . . * . . . . . * . . . . . . . . . . . . . . . .
      . . * . . . . . * . . . . . . . . . . . . . . . .
      . . * . . . . . * . . . . . . . . . . . . . . . .
      . . * . . . . . * . . . . . . . . . . . . . . . .
      . . . . . . . . . . . . . . . . . . . . . . . . .
      . . . . . . . . . . . . . . . . . . . . . . . . .

      ...and something like this when viewed from the side:

      LEGEND:
      -------
      = = breadboard material
      * = the plastic that surrounds the row of pins in the strip header
      | = uncut pins
      x = the stub of the cut pin
      . = the end of a bent pin, pointing towards the viewer.

              | | | | | | |   | | |
              | | | | | | |   | | |
              | | | | | | |   | | |
              | | | | | | |   | | |
              | | | | | | |   | | |
       PIN 15 | | | | | | | x | | | .     PIN 24  < pin (also bent/cut pins)
      ===========================================
              * * * * * * * * * * * *
              | | | | | | | | | | | |
              | | | | | | | | | | | |


 5.5) Using a soldering iron, tin the leads of the tops of the strip
      header pins and the pins of a 28-pin socket.  This will make
      step 5.6) infinitely easier to perform, and make the final
      product considerably more reliable.


 5.6) Place the 28-pin socket on *top* of the strip header pins and
      solder all connecting pins in place.  Probably the best way
      to start is to solder the four pins on the corners of the chip
      first. This will hold things in place solidly enough to do the
      rest of the soldering job.  When you're done, finish up by
      reflowing the solder on the four corner pins you started with.

      When you are done, you should have something that looks like this:

      LEGEND:
      -------
      # = body of 28-pin socket
      ! = pins from 28-pin socket
      = = breadboard material
      * = the plastic that surrounds the row of pins in the strip header
      | = uncut pins from the strip header
      x = the stub of the cut pin
      . = the end of a bent pin, pointing towards the viewer.

              ###########################         < 28-pin socket body
              ###########################         < 28-pin socket body
              ! ! ! ! ! ! ! ! ! ! ! ! ! ! PIN 28  < pins from 28-pin socket
              | | | | | | |   | | |
              | | | | | | |   | | |
              | | | | | | |   | | |
              | | | | | | |   | | |
              | | | | | | |   | | |
       PIN 15 | | | | | | | x | | | .     PIN 24
      ===========================================
              * * * * * * * * * * * *
              | | | | | | | | | | | |
              | | | | | | | | | | | |


 5.7) You're almost done.  Now you want to wire up the last few pins to
      complete the adaptor, specifically +5V line.

      Going back to our side view, connect a thin wire to pin 28 of the
      adaptor.  Run it down to the bent pin 24 to supply +5V to the chip.

              ###########################
              ###########################
              ! ! ! ! ! ! ! ! ! ! ! ! ! !
              | | | | | | |   | | |     ' PIN 28  < +5V to the 27512
              | | | | | | |   | | |    /
              | | | | | | |   | | |   /
              | | | | | | |   | | |  /
              | | | | | | |   | | | ,
       PIN 15 | | | | | | | x | | | .     PIN 24  < +5V from the 2732
      ===========================================
              * * * * * * * * * * * *
              | | | | | | | | | | | |
              | | | | | | | | | | | |


 5.8) Complete the adaptors by plugging them into the two 24-pin sockets
      you obtained earlier, as shown in the diagram below.  (Due to the
      limitations of ASCII drawings, we have not shown the wiring you
      performed during step 5.7) above...)

      LEGEND:
      -------
      # = body of 28- or 24-pin socket
      ! = pins from 28- or 24-pin socket
      = = breadboard material
      * = the plastic that surrounds the row of pins in the strip header
      | = uncut pins from the strip header
      x = the stub of the cut pin
      . = the end of a bent pin, pointing towards the viewer.

              ###########################
              ###########################
              ! ! ! ! ! ! ! ! ! ! ! ! ! !
              | | | | | | |   | | |     '
              | | | | | | |   | | |    /
              | | | | | | |   | | |   /
              | | | | | | |   | | |  /
              | | | | | | |   | | | ,
       PIN 15 | | | | | | | x | | | .
      ===========================================
              * * * * * * * * * * * *
              | | | | | | | | | | | |
              #######################             < 24-pin socket body
              #######################             < 24-pin socket body
              ! ! ! ! ! ! ! ! ! ! ! !             < pins from 24-pin socket


 5.9) Cram the 24-pin ZIF socket into the top socket of the daughterboard.

      You could have done this whole hack using the ZIF socket *as*
      the top socket of the daughterboard, but ZIF sockets are expensive,
      and there's no point in wasting a ZIF socket if you make a mistake.

      Also, the pins on some models of ZIF sockets move fractionally
      when chips are inserted and extracted.  As the solder joints on
      the adaptor are already of fairly marginal quality, we want to
      reduce the risk of cracking over the long term.

      At any rate, test-fit the completed board by plugging it into
      one of the 24-pin sockets on the main board.  It should insert
      smoothly and seat firmly.  Lay the partially-constructed board
      aside and proceed to the next step:


 6) Create the adaptor for the sound board:

    Tech Note:  Here are the pinouts for a 2532 and 2732.  We want to
                build something that will let us plug the 2732 into the
                sound board's existing 2532 socket.
                      __ __              __ __
                   A7|  U  |+5V       A7|  U  |+5V
                   A6|     |A8        A6|     |A8
                   A5|     |A9        A5|     |A9
                   A4|     |A11       A4|     |+5V
                   A3|  2  |!CS       A3|  2  |!CS
                   A2|  7  |A10       A2|  5  |A10
                   A1|  3  |!CE       A1|  3  |A11
                   A0|  2  |D7        A0|  2  |D7
                   D0|     |D6        D0|     |D6
                   D1|     |D5        D1|     |D5
                   D2|     |D4        D2|     |D4
                  GND|_____|D3       GND|_____|D3

                Note the similarities between these pinouts.  All
                we have to do is move A11 over to the proper pin,
                and bring a GND signal to the 2732's !CE pin (as
                the chip should always be enabled).

                Just as before, we'll use strip headers for the
                "straight through" connections, cutting off any
                lines we don't need, and bending any lines we'd
                like to reroute away from the chip before rerouting
                them.


 6.1) Start by putting a couple of 12-pin strip headers into one
      of the 24-pin sockets.  Cut pin 18 about halfway up, and cut
      pin 21 near its base.  After you're done your cutting, you
      should have something like this:

      LEGEND:
      -------
      # = body of 24-pin socket
      ! = pins from 24-pin socket
      = = breadboard material
      * = the plastic that surrounds the row of pins in the strip header
      | = uncut pins from the strip header
      x = the stub of the cut pin

              | | | | |   | |   | | |
              | | | | |   | |   | | |
              | | | | |   | |   | | |
              | | | | | x | |   | | |
              | | | | | | | |   | | |
       PIN 13 | | | | | | | | x | | |    < top of strip header
              * * * * * * * * * * * *    < plastic surrounding pins
              | | | | | | | | | | | |    < bottom of strip header
              #######################    < 24-pin socket body
              #######################    < 24-pin socket body
              ! ! ! ! ! ! ! ! ! ! ! !    < pins from 24-pin socket


 6.2) As in step 5.5), use your soldering iron to tin the leads of
      the tops of the strip header pins and the pins of a 24-pin
      socket.  This will make step 6.3) infinitely easier to perform,
      and make the final product considerably more reliable.


 6.3) Again, just as in step 5.6), place the 24-pin socket on *top*
      of the strip header pins and solder all connecting pins in place.

      When you are done, you should have something that looks like this:

      LEGEND:
      -------
      # = body of 24-pin socket
      ! = pins from 24-pin socket
      = = breadboard material
      * = the plastic that surrounds the row of pins in the strip header
      | = uncut pins from the strip header
      x = the stub of the cut pin

              #######################    < 24-pin socket body
              #######################    < 24-pin socket body
              ! ! ! ! ! ! ! ! ! ! ! !    < pins from 24-pin socket
              | | | | |   | |   | | |
              | | | | |   | |   | | |
              | | | | |   | |   | | |
              | | | | | x | |   | | |
              | | | | | | | |   | | |
       PIN 13 | | | | | | | | x | | |    < top of strip header
              * * * * * * * * * * * *    < plastic surrounding pins
              | | | | | | | | | | | |    < bottom of strip header
              #######################    < 24-pin socket body
              #######################    < 24-pin socket body
              ! ! ! ! ! ! ! ! ! ! ! !    < pins from 24-pin socket


 6.4) This is the tricky bit.  You want to connect pin 18 of the
      *bottom* socket to pin 21 of the *top* socket.  You also
      want to connect pin 14 of the adaptor to pin 18 of the top
      socket.

      This step involves some very tricky and delicate placement of
      wires, fingers, and a soldering iron.  It can be by one person
      without burned fingers, but a third set of hands will probably
      make things go a little easier.  Just be careful and it'll all
      work out.  (And come to think of it, it was harder to come up
      with these ASCII pictures than it was to do the wiring :-)

      What you will end up is something like this, when viewed from
      the side:

              #######################    < 24-pin socket body
              #######################    < 24-pin socket body
             ~! ! ! ! ! ! ! ! ! ! ! !    < pins from 24-pin socket
              |~|-|-|-|-' | | | | | |
              | | | | |   ----' | | |
              | | | | |  /| |   | | |
              | | | | | x | |   | | |
              | | | | | | | |   | | |
       PIN 13 | | | | | | | | x | | |    < top of strip header
              * * * * * * * * * * * *    < plastic surrounding pins
              | | | | | | | | | | | |    < bottom of strip header
              #######################    < 24-pin socket body
              #######################    < 24-pin socket body
              ! ! ! ! ! ! ! ! ! ! ! !    < pins from 24-pin socket

      Finally, just to exhaust the limitations of ASCII art, here's
      an oblique X-ray view, with the body of the top socket cut away
      and the body of the bottom socket eliminated.

      Connect "A" (on pin 14 == GND) to "A" (pin 18 on the top socket),
      and connect "B" (pin 18 on the bottom socket) to "B" (pin 21 on
      the top socket).

             # # # # # # # # # # # #     < pin 1 on top socket
          A /|||||||||||||||||||||||
           / ||| / / / / / / / / |||     < |||
          / /|||/ / / / / / / / /|||     < ||| = top socket material
         / / ||| / / / / / / / / |||     < |||
        / / /|||/ / / / / / / /  |||
       * * * ||| * * * * * * *   |||     < pin 1 on bottom socket
      / / / /|||/ / / / / / /    |||
             |||                 |||
             |||||||||||||||||||||||
             # # # # # # # # # # # #     < pin 24 on top socket
            / / / / / / / / / / / /
           / / / / / A / / B / / /
          / / / / /   / /   / / /
         / / / / / B / /   / / /
        / / / / / / / / / / / /
       * * * * * * * * * * * *           < pin 24 on bottom socket
      / / / / / / / / / / / /

      You now have an adaptor which you can plug into any 2532 socket
      and use a 2732 chip.  If you're feeling masochistic, you can whip
      up a few more of these; you never know when one will come in handy.

      Tech Note:  No, you can't use these to program 2532s in a burner
                  configured for 2732s, but you can use it to read 'em,
                  which is good enough for most purposes.


 6.5) Cram the 24-pin ZIF socket into the top socket of your adaptor.

      Once you've got the ZIF socket in the adaptor, and have verified
      that you can indeed insert/extract chips with zero force, the
      assembly is complete.  Plug the completed assembly into the
      empty 24-pin socket on the sound board which used to hold the
      sound ROM.

      We will now turn our attention back to our half-constructed
      daughterboard...


 7) Wrap the daughterboard:

    Lay out rest of parts as shown in the diagrams below, and wrap.

    The EPROM sockets will already be present from the adaptor work
    you performed in step 5) above.  You still have to add the 14-pin
    socket for the 7404 hex inverter, the 16-pin socket for the 74133
    13-input NAND gate, the 12- and 4-pin connectors which will be
    used to connect the hack to the ROM board.

    Now it's time to start wrapping!

    The wrap lists will be in the form "Xn - Ym", where "X" and "Y"
    denote components as depicted in step 5) above, and "n" and "m"
    denote pin numbers.  Explanatory notes and/or signal names are
    shown off to the right of the list.

    For example:

      E28 - X14  |  +5V

    means to connect pin 28 of the EPROM to pin 14 of the 7404 and
    that the connection carries +5VDC.

    Remember that the wrap lists are from the point of view of the
    pin numbers on the ICs -- i.e. that the diagrams in this document
    depict the boards as seen from the *PARTS* side, not the *WIRING*
    side.  You will have to mentally flip things around if you want to
    use the diagrams to do the wrapping.

    This bears repeating, especially for inexperienced wire-wrappers.
    Make absolutely sure that if you're connecting something to "the
    second pin from the leftmost" on some chip on the diagrams above,
    that you actually connect it to the second pin from the RIGHT on
    the chip when you're looking at it from below.  It's an easy
    mistake to make, and it can be very frustrating.

    If you've got small labels to stick on the bottom of your board
    to prevent this kind of mistake, by all means use 'em.

    Okay, you're ready to wrap.  Grab your tools and wire, get comfy,
    and go to work!

    LEGEND:
    -------
    . = empty hole on breadboard
    P = 27512 EPROM
    X = 74133 13-input NAND chip
    Y = 7404 hex inverter chip
    C = 12-pin connector
    D = 4-pin connector

    . . . . . . . . . . . . . . . . . . . . . . . . .
    . . .     . .     .     . . . . . . . . . .     .
    . . .  1  . .  4  .  1  . . . . . . . . . .  12 .
    . . .   C C C C   .   D D D D D D D D D D D D   .
    .     . . . . .     . .     . . . . . . . . . . .
    .  1  . . . . .  28 . . 16  . . . . . . . . . . .
    .   P . . . . . P   . .   X X X X X X X X . . . .
    . . P . . . . . P . . . . . . . . . . . . . . . .
    . . P . . . . . P . . . . . . . . . . . . . . . .
    . . P . . . . . P . . .   X X X X X X X X . . . .
    . . P . . . . . P . . .  1  . . . . . . . . . . .
    . . P . . . . . P . . .     . . . . . . . . . . .
    . . P . . . . . P . . . 14  . . . . . . . . . . .
    . . P . . . . . P . . .   Y Y Y Y Y Y Y . . . . .
    . . P . . . . . P . . . . . . . . . . . . . . . .
    . . P . . . . . P . . . . . . . . . . . . . . . .
    . . P . . . . . P . . .   Y Y Y Y Y Y Y . . . . .
    . . P . . . . . P . . .  1  . . . . . . . . . . .
    . . P . . . . . P . . .     . . . . . . . . . . .
    . . P . . . . . P . . . . . . . . . . . . . . . .
    . . . . . . . . . . . . . . . . . . . . . . . . .
    . . . . . . . . . . . . . . . . . . . . . . . . .

    .---------------------.
    | POWER / MISCELLANY: |
    |-------------------------------------------------------------------.
    | P28 - X16  |  +5V (better yet, use the P24 bent pin from before)  |
    | X16 - Y14  |  +5V                                                 |
    | P14 - Y7   |  GND                                                 |
    | Y7  - X7   |  GND                                                 |
    `-------------------------------------------------------------------'

    .--------------------------.
    | ADDRESS INPUTS (4-PIN): |
    |-------------------------------------------------------------------.
    | C1  - P2   |  A12                                                 |
    | C2  - P26  |  A13                                                 |
    | C3  - P27  |  A14                                                 |
    | C4  - P1   |  A15                                                 |
    `-------------------------------------------------------------------'

    .------------------------------.
    | CHIP SELECT INPUTS (12-PIN): |
    |-------------------------------------------------------------------.
    | D1  - X2   |  !ROM1                                               |
    | D2  - X3   |  !ROM2                                               |
    | D3  - X4   |  !ROM3  (The order doesn't really matter here;       |
    | D4  - X15  |  !ROM4   all that matters is that all the Dxx        |
    | D5  - X14  |  !ROM5   pins find an input pin on the 74LS133.      |
    | D6  - X13  |  !ROM6   The suggested arrangement here, however,    |
    | D7  - X12  |  !ROM7   is probably the easiest in terms of         |
    | D8  - X11  |  !ROM8   physically laying out and wrapping the      |
    | D9  - X10  |  !ROM9   wires.  Draw it out on a piece of graph     |
    | D10 - X5   |  !ROM10  paper to get get the idea)                  |
    | D11 - X6   |  !ROM11                                              |
    | D12 - X7   |  !ROM12                                              |
    | X16 - X1   |  The 13th input to the NAND remains high             |
    `-------------------------------------------------------------------'

    .---------------------.
    | CHIP SELECT OUTPUT: |
    |-------------------------------------------------------------------.
    | X9  - Y9   |  CS goes to the 7404                                 |
    | Y8  - P22  |  !CS goes to the 27512                               |
    `-------------------------------------------------------------------'


 8) Wire the connectors:

    Your daughterboard is now complete; you may now plug it into any
    one of the 12 empty 24-pin sockets on the ROM board.  Although any
    of the sockets will work, it's probably best to choose one near the
    center of the board; you'll definitely want to be able to plug the
    power connector into the ROM board (I've found that boards just
    don't work too well without power :-), and you'll also want an
    unobstructed view of the seven-segment diagnostic LED, just in
    case you goofed in the wiring.  (Trust me, you *WILL* want a good
    view of that LED.  'Nuff said :-)

    Having said all of that, pick a socket and plug in the daughterboard.

    All sixteen pins from the daughterboard's two connectors will be
    used by the hack.  When you place the wires into the female plugs
    for these connectors, keep in mind that they'll all be going to
    various locations underneath the ROM board, so be sure they're all
    long enough to reach any of the ROM sockets from their starting
    point on the daughterboard.

    Be careful when soldering the wires to the chips and sockets.
    Although the only chip you're likely to damage is the 74154,
    anything can (and occasionally will) go wrong.

    For this reason, you might want to (carefully) remove the two
    40-pin ICs before you begin -- these are pieces of custom hardware
    that *CANNOT* be replaced if damaged by stray charge from your
    soldering iron.  If you're good at removing large chips without
    bending the legs, why not spend another minute to make things a
    bit safer?  (While we're at it, take careful note of the way the
    chips are facing before you remove them -- you don't want to put
    them in backwards after you're done!)

    If you have access to an ESD-safe workstation, this would be an
    extremely good time to use it.  At the very least, make sure that
    both you and the PCB are safely grounded while you're hacking on
    the board.


 8.1) 4-pin connector:

      The .100" female MTA 4-pin connector carries the upper four bits
      of the address bus to the 27512.  Wires from this connector will
      reach underneath the ROM board to the 74154 near the 40-pin ribbon
      cable that connects the ROM board to the CPU board.

      Label the connector and connect the wires as follows:

       1 - A12 -> 23-of-74154
       2 - A13 -> 22-of-74154
       3 - A14 -> 21-of-74154
       4 - A15 -> 20-of-74154

      Plug the 4-pin connector into the ROM daughterboard.


 8.2) 12-pin connector:

      The .100" female MTA 12-pin connector carries the !CS signals from
      all twelve ROM sockets to the 74LS133.  Wires from this connector
      will reach underneath the ROM board to each of the board's ROM
      sockets.  As an alternative, they can also connect to the 74154.

      For ease of wiring, I'd advise sticking them to the individual
      ROM sockets; this makes them easy to manipulate and lowers the
      risk of shorting pins.  If you take them to the 74154, you'll
      have 16 wires leading to a single chip, and things can get a
      little hairy when soldering that 16th wire :-)

      Because everything is being NANDed together, it doesn't matter
      which wires go where.  The guide below is just that -- a guide.
      You're free to hook 'em up in whatever way seems most convenient
      to you.  Happy hacking!

       1 - !CS1  ->  1-of-74154 == 20-of-ROM1
       2 - !CS2  ->  2-of-74154 == 20-of-ROM2
       3 - !CS3  ->  3-of-74154 == 20-of-ROM3
       4 - !CS4  ->  4-of-74154 == 20-of-ROM4
       5 - !CS5  ->  5-of-74154 == 20-of-ROM5
       6 - !CS6  ->  6-of-74154 == 20-of-ROM6
       7 - !CS7  ->  7-of-74154 == 20-of-ROM7
       8 - !CS8  ->  8-of-74154 == 20-of-ROM8
       9 - !CS9  ->  9-of-74154 == 20-of-ROM9
      10 - !CS10 -> 15-of-74154 == 20-of-ROM10
      11 - !CS11 -> 16-of-74154 == 20-of-ROM11
      12 - !CS12 -> 17-of-74154 == 20-of-ROM12

      Plug the 12-pin connector into the ROM daughterboard.  If you
      removed the 40-pin custom ICs before doing the soldering, put
      them back in now.  Make absolutely sure that the chips are
      plugged in correctly.  You do *NOT* want to plug the custom
      in backwards.  When they're back in, check again, just to be
      certain.


 9) Control panels - pinouts

    Okay, so you can run the three programs on your console, but how
    the heck do you actually play the game?  It's gonna be mighty
    awkward playing Joust without buttons, or Stargate with two 4-way
    joysticks, isn't it?

    Well, yes and no.  You'll have to switch the control panels when
    you switch games, and you'll also probably have to construct an
    adaptor to go between the game's wiring harness and the small
    interface board in order to make the control panel sensible.

    You do have a couple of adavantages, though:

    Many Williams cabinets were identical; the control panel from one
    could be swapped directly into the other.  Stargate and Robotron,
    for example, share identically-constructed cocktail cabinets; the
    control panels can be swapped in about a minute, and that's
    including the time to insert the adaptor.

    Also, certain control panels can be fashioned directly out of the
    originals.  Making a Joust panel out of a Robotron panel, for
    instance, is easy and practical.

    The "switch test" portion of the self-test procedure proved to be
    invaluable in generating the following pinouts and testing the
    adaptor and control panel I wound up building to support my new
    games.


 9.1) Robotron interface board pinout

          1 - P1 fire left
          2 - P2 move up
          3 - P2 move down
          4 - P2 move left
          5 - P2 move right
          6 - P2 fire right
          7 - P2 fire up
          8 - P2 fire down
          9 - P2 fire left
         10 - GND
         11 - P1 move up
         12 - P1 move down
         13 - P1 move left
         14 - P1 move right
         15 - 1-player start
         16 - 2-player start
         17 - P1 fire up
         18 - P1 fire down
         19 - P1 fire right
         20 - GND


 9.2) Stargate interface board pinout

          1 - P1 move up
          2 - P2 fire
          3 - P2 thrust
          4 - P2 smart bomb
          5 - P2 hyperspace
          6 - P2 inviso
          7 - P2 reverse
          8 - P2 move down
          9 - P2 move up
         10 - GND
         11 - P1 fire
         12 - P1 thrust
         13 - P1 smart bomb
         14 - P1 hyperspace
         15 - 2-player start
         16 - 1-player start
         17 - P1 reverse
         18 - P1 move down
         19 - P1 inviso
         20 - GND


 9.3) Joust interface board pinout

          1 -
          2 - P2 move left
          3 - P2 move right
          4 - P2 flap
          5 -
          6 -
          7 -
          8 -
          9 -
         10 - GND
         11 - P1 move left
         12 - P1 move right
         13 - P1 flap
         14 -
         15 - 2-player start
         16 - 1-player start
         17 -
         18 -
         19 -
         20 - GND


10) Control panels - an example

    Due to the large number of possible starting configurations
    (upright, cocktail, Robotron, Joust, Stargate), I will not attempt
    to describe every possible adaptor and control panel mod under the
    sun; I'll just describe my own situation (starting from a Robotron
    cocktail unit and the pinouts described above) and let you take
    things from there.


10.1) Since I already had a Robotron cocktail machine, the Robotron
      control panel was the trivial case.  It was already there, so
      no work was required.  Gee, life is tough!


10.2) Stargate was done by creating a completely separate control
      panel with lines running directly down to the interface board.

      Yes, this was a bit of a cheat; rather than build an adaptor, I
      merely bypassed the game's wiring harness and plugged directly
      into the interface board.  Still, it made the wiring easy, and
      I was in a bit of a hurry at the time.

      Someday I'll get an original Stargate control panel from a
      cocktail machine and build the proper adaptor, but this will
      suffice for now.


10.3) Joust was the interesting case; I had two joysticks and plenty
      of space on the Robotron panel, so I modified it to support Joust
      directly by adding two buttons and fiddling with the internal
      wiring.  No swapping of panels required, just the insertion and
      removal of an adaptor.

      Yes, I cringed as the drill bit worked its way through the
      original panel, but once the new buttons were installed, they
      blended in nicely with the original panel.  If I didn't know
      better, I'd say they'd been installed at the factory myself.

      I then added a piece of wire connecting the right stick's "UP"
      switch to the right button, and another piece of wire connecting
      the left stick's "UP" switch to the left button.  Two more pieces
      of wire to ground the buttons completed the circuit.

      When playing Robotron, there would thus be two ways to move or
      fire upwards; either by pressing up on the joystick or by pressing
      the newly-installed "FLAP" button.  Since buttons are not normally
      used in Robotron, this mod is completely unobtrusive to the player
      when in Robotron mode.

      When in Joust mode, there would be two ways to flap; either by
      pressing the "FLAP" button or by moving up on the joystick.  It's
      possible, while moving side to side, to activate this switch by
      accident, but I've found it to be a relatively minor problem.  If
      you find it to be a pain, try arranging the wiring so that pulling
      "DOWN" on the stick activates "FLAP" instead -- you might find it
      more to your liking.

      I then constructed an adaptor to connect the Player 1 control panel
      harness to the game's interface board as follows, using the pinouts
      described above in section 9).


10.4) Assuming you did the same thing that I did (namely adding a couple
      of buttons to the Robotron control panel as duplicates of the "UP"
      joystick directions), your adaptor should look like this:

         Robotron Harness        Connect to Interface Board
         (Pin # and meaning)     (Pin # and meaning for Joust)

          1 (P1 fire left) ---->  2 (P2 move left)
          2 (P2 move up)
          3 (P2 move down)
          4 (P2 move left)
          5 (P2 move right)
          6 (P2 fire right)
          7 (P2 fire up)
          8 (P2 fire down)
          9 (P2 fire left)
         10 (GND) -------------> 10 (GND)
         11 (P1 move up) ------> 13 (P1 flap)
         12 (P1 move down)
         13 (P1 move left) ----> 11 (P1 move left)
         14 (P1 move right) ---> 12 (P1 move right)
         15 (1-player start) --> 16 (2-player start)
         16 (2-player start) --> 15 (1-player start)
         17 (P1 fire up) ------>  4 (P2 flap)
         18 (P1 fire down)
         19 (P1 fire right) --->  3 (P2 move right)
         20 (GND) -------------> 20 (GND)


11) Usage instructions:

    Congratulations!  If you've made it this far, you should now be
    able to switch between Robotron, Joust, and Stargate, simply by
    swapping two EPROMs and any associated control panel adaptors.

    Assuming you started with a Robotron cabinet, plug the Robotron
    27512 into the ROM daughterboard, and the Robotron 2732 into the
    adaptor on the sound board.

    Check everything over, power the game up, and pray :-)

    Run through the self-test.  Everything should work perfectly; the
    game shouldn't know it's been hacked with.

    Power down, count ten seconds, and try with the other two sets of
    ROMs and control panels.  Although the high scores, audit information
    and difficulty settings will be reset between games, everything else
    should work normally.


TROUBLESHOOTING:
----------------

Safety Check:

- Check *EVERYTHING* for shorts, etc... before plugging it in.  Go over
  it and look for little bits of solder that went to the wrong place,
  strands of wire, *anything* that could cause trouble.  If you've got
  a multimeter with a continuity checker, use it.  The five minutes you
  spend now may save you hours of debugging later.

- Solder is brittle and can crack easily, and you've made some fairly
  precarious joints when constructing the EPROM adaptors.  Be careful
  when operating the ZIF sockets and swapping chips, and try not to
  wiggle things around too much.

  Another error-prone part of the hack lies in the wiring under the ROM
  board where you soldered some wires to the !CS pins of the empty ROM
  sockets.  Poor solder joints or broken-off wires should show up as
  individual ROM failures during the game's self-test procedure and be
  highlighted on the ROM board's LED display.

- When switching between games, wait at least 10-20 seconds before
  switching chips.  The power supply can still supply enough power
  to damage your chips if you yank 'em out too early.  Yes, you could
  always burn yourself another set, but why take the chance?

  Changing the control panel adaptor before changing chips is a good
  way to make this habit automatic -- by the time you've changed the
  panel adaptor, it'll be safe to swap the EPROMs.


Reality Check:

- Are you running off a Joust or Robotron CPU board?  A Sinistar
  or Bubbles CPU board will also work, but a Stargate CPU board
  will *NOT* work unless it's been upgraded to at least the Joust
  or Robotron level.  ("WHAT THIS HACK ISN'T")

- Is your ROM board strapped for 2732s?  (Step 4.1)

- Is your sound board strapped for 2532s?  (Step 4.2)


Sound Check:

- If you get no sound when playing Stargate, verify that both halves
  of the 2732 contain the same data; you should have two exact copies
  of Stargate's 2K sound ROM in this chip.


Control Panel Check:

- Use the self-test mode's "switch test" to make sure your control
  panel configurations play the way you want.  Once you get used to
  it, you'll be able to develop and your adaptors "on the fly"; this
  can be an excellent timesaver.


Game Check:

- When you're all done, test all three games.  If some games work, but
  you get inexplicable RAM errors or weird graphics with other games,
  check the wiring of the program ROM hack, paying particular detail to
  the 74LS133 and its associated inputs.  The '133 decides whether or
  not to read from the 27512 EPROM; some of the games use the address
  and data busses for "other stuff" when the ROM is expected to be
  inactive.  If the '133 is activating the 27512 at these times, you'll
  get bus contention and see all sorts of strange behavior.

  Due to differences in the programs and original architectures, all
  three games can function differently under these circumstances.
  Robotron, for instance, will run perfectly, even if the 27512 is
  permanently activated.  Joust will run, but the sprites will leave
  cute little trails of green pixels, and Stargate will fail, believing
  it has a bad RAM.
