Disclaimer: This information is provided as is. There may be errors in this information. You may use this information only if you agree that Minimalist / Coinop.org, its employees, and noted authors will never be held responsible for any damage, injury, death, mayhem, etc. caused by errors in the information. When working with high voltage, never work alone and always follow safety precautions.

Document Title: [Grav_to_BlkWidow.txt (text file)]

-----------------------------------------------------------------
|    SWITCHABLE CONVERSION BETWEEN GRAVITAR AND BLACK WIDOW     |
-----------------------------------------------------------------

COPYRIGHT 1993

REVISION NUMBER: 1.1 (first public release)
  REVISION DATE: 17 March 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:
-----------------

Once upon a time there was a game called Gravitar.  Best described
as "Lunar Lander with guns", it was a good game, and lots of fun.

Once upon a time there was also a game called Black Widow.  Best
described as "a cross between Robotron:2084 and Centipede, but played
on a vector monitor", it was also good, and lots of fun.

Black Widow boards have a cute little sticker on 'em.  If you own
such a board, and you peel back this sticker, you'll be greeted with
a neat surprise:  they're actually Gravitar boards in disguise.

Okay, so the control panels are a little different -- you might
want to add two four-directional joysticks to your Gravitar panel,
or you might want to add five buttons to your Black Widow panel,
but considering that you can save yourself the trouble of buying
a whole new cabinet, it's a small price to pay.

Now that you've gotten the control panels out of the way, there
still remains the subject of the boards.  A simple ROM swap will
do the trick, but won't help you much if you want to switch back
and forth on a regular basis.  You're looking at either a lot of
ROM swapping, or finding a new board to plug in.  One method is
time-consuming and potentially damaging to the components, and
the other requires a considerable hardware investment.

Wouldn't it be nice if it were just a matter of flicking a switch
and swapping control panels?  Why bother swapping an army of ROMs
when both games can be held on a single chip?  People have designed
multi-carts for home video game systems before, so why can't the
same idea be applied here?

Unlike home games, most arcade games from the early '80s ran on
proprietary hardware architectures which were unique from game to
game.  It turns out, however, that the multi-cart technology *can*
be applied in some rare instances.  This is one of them.

At the end of this project, you'll have two small daughterboards and
a few small connectors.  Plugging the daughterboards into sockets on
the main board and soldering the wires from the connectors onto some
test points (also on the main board) will give you the ability to
convert back and forth between the two games at the flick of a switch.

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 Gravitar/Black Widow machine (kinda helps :-)
1 - Set of controls for whichever game you don't currently own
1 - 27512 EPROM at 450ns or faster
1 - 27256 EPROM at 450ns or faster
3 - 7408 quad AND chips
2 - chunks of blank breadboard, .100" spacing, about 2.5 inches square
2 - 12-pin female .100" MTA connectors
2 - 12-pin male .100" strip headers
1 - 4-pin female .100" MTA connector
1 - 4-pin male .100" strip header
2 - 28-pin chip sockets
2 - 24-pin chip sockets
3 - 14-pin chip sockets
4 - 14-pin male .100" strip headers

You will also need an EPROM programmer (or a friend who has one),
binary dumps of the original Gravitar and Black Widow ROMs, a wire-
wrapping tool and a soldering iron.


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

0) Read all of these instructions before you begin.

   Steps 1 and 2 can be done at your desk in about half an hour.

   Step 3 is just background information, but you should probably
   understand the material as the hack won't make much sense without
   some background information.

   Step 4 should take about half an hour.

   If you get tired, *STOP* and take a break.  Half an hour spent
   lounging around the house and finishing off last night's pizza
   will make you feel better and will save you at least two hours
   of debugging time later :-)


1) Create the ROM data files:


1.1) Read the Gravitar and Black Widow ROMs (All 2532s except for
     the one 2716) and store the data on disk.  We will assume, in
     this example, that you name the data files after the chips'
     part numbers.


1.2) Create a dummy file of $FFs, 2048 bytes long.
     Call this file "blank.fff"


1.3) Create the program ROM, a 27512.  The contents of the Gravitar
     and Black Widow program ROMs will be mapped onto the following
     addresses relative to the 64K of memory available on the chip:

     $0000-$0FFF = BLANK
     $1000-$6FFF = GR 201..206
     $6FFF-$7FFF = GR 206 (may only need to copy $6FFA..$6FFF)
     $8000-$8FFF = BLANK
     $9000-$EFFF = BW 101..106
     $F000-$FFFF = BW 106 (may only need to copy $EFFA..$EFFF)

     Executing the following script will create the required file:

     cat blank.fff  >  27512.dat
     cat blank.fff  >> 27512.dat
     cat 136010.201 >> 27512.dat
     cat 136010.202 >> 27512.dat
     cat 136010.203 >> 27512.dat
     cat 136010.204 >> 27512.dat
     cat 136010.205 >> 27512.dat
     cat 136010.206 >> 27512.dat
     cat 136010.206 >> 27512.dat
     cat blank.fff  >> 27512.dat
     cat blank.fff  >> 27512.dat
     cat 136017.101 >> 27512.dat
     cat 136017.102 >> 27512.dat
     cat 136017.103 >> 27512.dat
     cat 136017.104 >> 27512.dat
     cat 136017.105 >> 27512.dat
     cat 136017.106 >> 27512.dat
     cat 136017.106 >> 27512.dat

     Tech Note:  No, you can't use $0000-$0FFF for storing your
                 own hacks unless you want to modify the address
                 decoding considerably.  This hack is designed to
                 use the game's on-board address decoding to do
                 most of the work, and the low $1000 bytes of the
                 27512 ($8000..$8FFF in Gravitar's memory map)
                 don't map onto any existing ROM space.

     Tech Note:  You probably *CAN* use $7000-$7FF9 (and $E000..$EFF9)
                 as blank space for your own hacks.  I suspect that
                 only the last six bytes of this memory are required
                 to hold the 6502's reset vectors.  No guarantees,
                 as I haven't had time to test this theory, but it's
                 a good guess.


1.4) Create the vector ROM, a 27256:

     $0000-$07FF = BLANK
     $0800-$0FFF = GR 210
     $1000-$3FFF = GR 207..209
     $4000-$47FF = BLANK
     $4800-$4FFF = BW 107
     $5000-$7FFF = BW 108..110

     Tech Note:  Again, since we're using the on-board address
                 decoding and chip selection signals, you can't
                 use the low $0800 bytes for storing your own hacks.

     Executing the following script will create the required file:

     cat blank.fff  >  27256.dat
     cat 136010.210 >> 27256.dat
     cat 136010.207 >> 27256.dat
     cat 136010.208 >> 27256.dat
     cat 136010.209 >> 27256.dat
     cat blank.fff  >> 27256.dat
     cat 136017.107 >> 27256.dat
     cat 136017.108 >> 27256.dat
     cat 136017.109 >> 27256.dat
     cat 136017.110 >> 27256.dat


2) Fry up the ROMs:


2.1) Burn a 27512 with the contents of "27512.dat", and burn a 27256
     with the contents of "27256.dat".

     Tech Note:  In case you're wondering why we didn't put the vector
                 ROMs and program ROMs onto the same chip, there's a
                 catch in the game's architecture:  the machine has
                 separate address and data buses for program and vector
                 RAM and ROM.  We are therefore forced to have two sets
                 of address and data lines, and consequently, two chips.

     Tech Note:  When we're done everything, flicking a switch will
                 pull the A15 line of the 27512 high or low, resulting
                 in data being read from the top or bottom (Gravitar
                 or Black Widow) halves of the chip.  The same idea
                 will be applied to the 27256 and A14.  It's now just
                 a matter of figuring out when to enable/disable the
                 chips' outputs -- address decoding.


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...]

   Figuring out *when* to read data is fairly simple.  The game PCB
   has test points on all chip selection lines, marked !ROM[0..5] and
   !VROM[0..3].  Figuring out *where* to read from is a bit more fun;
   we will use the chip-selection signals to *deduce* the addresses
   from which we're going to read our data.

   The cute part of this technique is that we only have to deduce
   a few address lines, as A0..A11 and D0..D8 are all supplied to
   us from the existing chip sockets.  This greatly reduces the
   amount of wiring involved and, as an added bonus, allows us to
   plug the "final product" into any socket we feel like.

   So, our inputs are the !ROMx and !VROMx chip selection lines,
   and our outputs are going to be a set of address lines above
   A11, and one chip selection signal to enable/disable the main
   chip.  A little muddling with the schematics and game memory
   map produces the following logic functions:

   PGM: A12 = !ROM1 && !ROM3
        A13 = !ROM0 && !ROM3 && !ROM4
        A14 = !ROM0 && !ROM1 && !ROM2
        !CS = !ROM0 && !ROM1 && !ROM2 && !ROM3 && !ROM4 && !ROM5
            = A13 && A14 && !ROM5

   VEC: A12 = !VROM0 && !VROM2
        A13 = !VROM0 && !VROM1
        !CS = !VROM0 && !VROM1 && !VROM2 && !VROM3
            = A12 && A13 && !VROM3

   What we will eventually want to do is hook up a bunch of 7408
   quad-AND chips to evaluate these functions and pass their results
   on to the ROMs.

   There's one other catch.  We're using 28-pin 27xx-series EPROMs,
   and the board is set for 24-pin 25xx-series EPROMs.  We have to
   integrate an adaptor into the circuit in order to allow us to use
   the address and data lines as they come from the socket without
   doing extra wiring.


4) Here's where the fun begins.  Build the adaptor to allow you to
   plug the big EPROMs into the 2532 sockets on the two pieces of
   daughterboard.

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

               Note the similarities between these pinouts.  We can
               ignore the !CS signal on the 2532, as it no longer
               has any relevance to us, and we'll also have to move
               the +5V and A11 lines.  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.


4.1) Start by putting the 14-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 14-pin male strip header

     . . . . . . . . . . . . . . . . . . . . . .
     . . . . * * * * * * * * * * * * * * . . . .
     . . . . . . . . . . . . . . . . .         .
     . . . . . . . . . . . . . . . . . PIN 15  .
     . . . . . . . . . . . . . . . . .         .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . * * * * * * * * * * * * * * . . . .
     .         . . . . . . . . . . . . . . . . .
     .  PIN 1  . . . . . . . . . . . . . . . . .
     .         . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .


     The view from the side should look like this:

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


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


4.3) Bend pins 23 and 26 at right angles.  These will eventually
     supply the circuit with its +5V power.


4.4) Also bend down pin 20.  This pin will supply the chip with
     the A11 signal from the 2532 socket.

     When you have completed the preceding three steps, both boards
     should look something like this when viewed from the top...

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

     . . . . . . | . . | . . | . . . . . . . . .
     . . . . * * | * * | x * | * * * * * . . . .
     . . . . . . . . . . . . . . . . .         .
     . . . . . . . . . . . . . . . . . PIN 15  .
     . . . . . . . . . . . . . . . . .         .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . * * * * * * * * * * * * * * . . . .
     .         . . . . . . . . . . . . . . . . .
     .  PIN 1  . . . . . . . . . . . . . . . . .
     .         . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .


     ...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 28  < pin (also bent/cut pins)
     ===========================================
             * * * * * * * * * * * * * *
             | | | | | | | | | | | | | |
             | | | | | | | | | | | | | |


4.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
     the next step infinitely easier to perform, and make the final
     product considerably more reliable.


4.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
             ! ! ! ! ! ! ! ! ! ! ! ! ! !         < pins from 28-pin socket
             | | | | |   |     | |   | |
             | | | | |   |     | |   | |
             | | | | |   |     | |   | |
             | | | | |   |     | |   | |
             | | | | |   |     | |   | |
      PIN 15 | | | | | . | x . | | . | | PIN 28
     ===========================================
             * * * * * * * * * * * * * *
             | | | | | | | | | | | | | |
             | | | | | | | | | | | | | |


4.7) You're almost done.  Now you want to wire up the last few pins to
     complete the adaptors, specifically the A11 line and the +5V lines.

     Going back to our side view, we've labeled the appropriate pins
     with "A" and "B".  Connect the two "A" pins to connect A11, and
     connect the three pins marked "B" to supply +5V to the chip.

             ###########################
             ###########################
             ! ! ! ! ! ! ! ! ! ! ! ! ! !
             | | | | |   |   A | |   | |         < A = A11 to the 27xxx
             | | | | |   |     | |   | |
             | | | | |   |     | |   | |
             | | | | |   |     | |   | |
             | | | | | A |   B | | B | |         < A = A11 from the 2532
      PIN 15 | | | | | . | x . | | . | | PIN 28  < B = +5V from the 2532
     ===========================================
             * * * * * * * * * * * * * *
             | | | | | | | | | | | | | |B        < B = +5V to the 27xxx
             | | | | | | | | | | | | | |


4.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 the previous step)

     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.

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

     Test-fit the completed adaptors by plugging them into the 24-pin
     sockets on the main board.  You will probably have to bend the
     test points down to give yourself enough clearance.  Just be
     gentle when bending the test points out of the way and be sure
     not to bend them down so far that they short out the traces
     on the main board.  When you are done, the test points should
     probably be at about a 30-degree angle relative to the board.


5) Lay out the rest of parts as shown in the diagrams below.

   The EPROM sockets will already be present from the adaptor work
   you performed in step 4) above.  You still have to add the 14-pin
   sockets for the 7408 quad-AND chips and the 12- and 4-pin connectors
   which will be used to connect the hack to the main 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 steps 5.1) and 5.2) below, 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 first 7408,
   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 shown above
   depict the boards as shown 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!


5.1) Program (27512) board:

     LEGEND:
     -------
     . = empty hole on breadboard
     P = 27512 EPROM
     X = 7408 quad-AND chip
     Y = 7408 quad-AND chip
     C = 12-pin connector

     . . . . . . . . . . . . . . . . . . . . . .
     . . . . P P P P P P P P P P P P P P . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
             . . . . . . . . . . . . . . . . . .
      PIN 1  P P P P P P P P P P P P P P . . . .
             . . . . . . . . . . . .         . .
     . . . . . . . . . . . . . . . . C PIN 1 . .
     . . . . X X X X X X X . . . . . C       . .
     . . . . . . . . . . . . . . . . C . . . . .
             . . . . . . . . . . . . C . . . . .
      PIN 1  X X X X X X X . . . . . C . . . . .
             . . . . . . . . . . . . C . . . . .
     . . . . . . . . . . . . . . . . C . . . . .
     . . . . Y Y Y Y Y Y Y . . . . . C . . . . .
     . . . . . . . . . . . . . . . . C . . . . .
             . . . . . . . . . . . . C . . . . .
      PIN 1  Y Y Y Y Y Y Y . . . . . C . . . . .
             . . . . . . . . . . . . C . . . . .
     . . . . . . . . . . . . . . . . . . . . . .

     .---------------------.
     | POWER / MISCELLANY: |
     |-------------------------------------------------------------------.
     | P28 - X14  |  +5V                                                 |
     | X14 - Y14  |  +5V                                                 |
     | P14 - X7   |  GND                                                 |
     | X7  - Y7   |  GND                                                 |
     | P14 - P20  |  !CE should be low; the chip should always be active |
     | C2  - P1   |  GAME_SELECT connects to A15 on the 27512            |
     `-------------------------------------------------------------------'

     .---------------------.
     | CHIP SELECT INPUTS: |
     |-------------------------------------------------------------------.
     | C5  - X2   |  !ROM0                                               |
     | C5  - X9   |  !ROM0                                               |
     | C6  - X10  |  !ROM1                                               |
     | C6  - X12  |  !ROM1                                               |
     | C7  - X4   |  !ROM2                                               |
     | C8  - X1   |  !ROM3                                               |
     | C8  - X13  |  !ROM3                                               |
     | C9  - Y12  |  !ROM4                                               |
     | C10 - Y5   |  !ROM5                                               |
     `-------------------------------------------------------------------'

     .--------------------------.
     | INTERMEDIATE PROCESSING: |
     |-------------------------------------------------------------------.
     | X8  - X5   |  !ROM0 && !ROM1                                      |
     | X6  - Y2   |  A14 == (!ROM0 && !ROM1) && !ROM2                    |
     | X3  - Y13  |  !ROM0 && !ROM3                                      |
     | Y11 - Y1   |  A13 == (!ROM0 && !ROM3) && !ROM4                    |
     | Y3  - Y4   |  A13 && A14                                          |
     `-------------------------------------------------------------------'

     .------------------.
     | ADDRESS OUTPUTS: |
     |-------------------------------------------------------------------.
     | X6  - P27  |  A14                                                 |
     | X11 - P2   |  A12                                                 |
     | Y11 - P26  |  A13                                                 |
     | Y6  - P22  |  !CS == (A13 && A14) && !ROM5                        |
     `-------------------------------------------------------------------'


5.2) Vector (27256) board:

     LEGEND:
     -------
     . = empty hole on breadboard
     V = 27256 EPROM
     Z = 7408 quad-AND chip
     C = 12-pin connector
     D = 4-pin connector

     . . . . . . . . . . . . . . . . . . . . . .
     . . . . V V V V V V V V V V V V V V . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . .
             . . . . . . . . . . . . . . . . . .
      PIN 1  V V V V V V V V V V V V V V . . . .
             . . . . . . . . . . . . .       . .
     . . . . . . . . . . . . . . . . C PIN 1 . .
     . . . . Z Z Z Z Z Z Z . . . . . C       . .
     . . . . . . . . . . . . . . . . C . . . . .
             . . . . . . . . . . . . C . . . . .
      PIN 1  Z Z Z Z Z Z Z . . . . . C . . . . .
             . . . . . . . . . . . . C . . . . .
     . . . . . . . . . . . . . . . . C . . . . .
     . . .         . . . . . . . . . C . . . . .
     . . .  PIN 1  D D D D . . . . . C . . . . .
     . . .         . . . . . . . . . C . . . . .
     . . . . . . . . . . . . . . . . C . . . . .
     . . . . . . . . . . . . . . . . C . . . . .
     . . . . . . . . . . . . . . . . . . . . . .

     .---------------------.
     | POWER / MISCELLANY: |
     |-------------------------------------------------------------------.
     | V28 - V1   |  +5V                                                 |
     | V1  - Z14  |  +5V                                                 |
     | Z14 - D3   |  +5V                                                 |
     | V14 - Z7   |  GND                                                 |
     | Z7  - D1   |  GND                                                 |
     | V14 - V20  |  !CE should be low; the chip should always be active |
     | C2  - V27  |  GAME_SELECT connects to A14 on the 27256            |
     | D2  - C2   |  GAME_SELECT originates at the 4-pin connector       |
     `-------------------------------------------------------------------'

     .---------------------.
     | CHIP SELECT INPUTS: |
     |-------------------------------------------------------------------.
     | C5  - Z1   |  !VROM0                                              |
     | C5  - Z5   |  !VROM0                                              |
     | C6  - Z4   |  !VROM1                                              |
     | C7  - Z2   |  !VROM2                                              |
     | C8  - Z9   |  !VROM3                                              |
     `-------------------------------------------------------------------'

     .--------------------------.
     | INTERMEDIATE PROCESSING: |
     |-------------------------------------------------------------------.
     | Z3  - Z13  |  A12 == (!VROM0 && !VROM2)                           |
     | Z6  - Z12  |  A13 == (!VROM0 && !VROM1)                           |
     | Z11 - Z10  |  A12 && A13                                          |
     `-------------------------------------------------------------------'

     .------------------.
     | ADDRESS OUTPUTS: |
     |-------------------------------------------------------------------.
     | Z3  - V2   |  A12                                                 |
     | Z6  - V26  |  A13                                                 |
     | Z8  - V22  |  !CS == (A12 && A13) && !VROM3                       |
     `-------------------------------------------------------------------'


6) Wire the connectors:

   Congratulations!  You are now the proud owner of two cute little
   daughterboards with cute little connectors on 'em.  Maybe now would
   be a good time to turn them into something useful, eh?

   For the easiest "fit" in terms of wiring, the vector daughterboard
   should be plugged into location M7, and the program daughterboard
   should go into E/F1.

   Plunk your daughterboards into the suggested locations, and imagine
   a single wire connecting the daughterboards to each other, and lots
   of wires connecting the daughterboards to the nearby !ROMx and !VROMx
   test points on the game PCB.  Finally, imagine some wires going from
   the vector daughterboard to a switch, either in your cabinet, or on
   the control panel, which will be used to switch between the two games.
   This gives you a rough idea of what the final setup will look like.


6.1) Program (27512) board:

     One of your .100" female MTA 12-pin connectors should be labeled
     as follows:

      1 - GND
      2 - GAME_SELECT
      3 - +5V
      4 - N/C (key)
      5 - !ROM0
      6 - !ROM1
      7 - !ROM2
      8 - !ROM3
      9 - !ROM4
     10 - !ROM5
     11 - N/C
     12 - N/C

     GND and +5V are actually redundant -- they are artifacts of a
     previous design, and can be included for completeness, or can
     be omitted.

     !ROM0 through !ROM5 should be filled with medium-length wires.
     Insert one end of the wire into the connector, and make sure
     you have enough length to connect to the appropriate !ROMx test
     point on the game PCB.

     GAME_SELECT should hold a long wire; long enough to connect it
     to the other daughterboard in the vector ROM area of the main
     board.


6.2) Vector (27256) board:

     The other .100" female MTA 12-pin connectors should be labeled
     as follows:

      1 - GND
      2 - GAME_SELECT
      3 - +5V
      4 - N/C (key)
      5 - !VROM0
      6 - !VROM1
      7 - !VROM2
      8 - !VROM3
      9 - N/C
     10 - N/C
     11 - N/C
     12 - N/C

     GND and +5V are actually redundant -- they are artifacts of a
     previous design, and can be included for completeness, or can
     be omitted.

     !VROM0 through !VROM5 should be filled with medium-length wires.
     Insert one end of the wire into the connector, and make sure
     you have enough length to connect to the appropriate !VROMx
     test point on the game PCB.

     GAME_SELECT should hold a long wire; long enough to connect it
     to the other daughterboard in the program ROM area of the main
     board.


6.3) 4-pin connector:

     The final .100" female MTA 4-pin connector should be labeled
     as follows:

      1 - GND
      2 - GAME_SELECT
      3 - +5V
      4 - N/C (key)

     If you're using an external switch, GND and +5V *NOT* redundant
     here; you'll need a way of turning GAME_SELECT high or low at
     the flick of a switch.

     If you're mounting the GAME_SELECT switch on the control panel,
     however, you only need to wire up GAME_SELECT, as GND and +5V
     are already present on the control panel.  
     
     See section 8) below for more details; you should decide which
     choice you will take before completing this step, as the choice
     affects the amount and style of wiring you'll have to do.


7) Wire up the test points:


7.1) Plug the 12-pin and 4-pin connectors into the daughterboards.


7.2) Tin the leads of the !ROMx and !VROMx wires coming from the
     connectors.  Also, tin the "leads" created by the !ROMx and
     !VROMx test points on the main PCB.


7.3) Solder the !ROMx wires onto the !ROMx test points, and the
     !VROMx wires to the !VROMx test points.

     Check everything twice, and wiggle the soldered wires to make
     sure your joints are solid.  A broken solder joint here can 
     send a loose wire shorting across dozens of nearby PCB traces,
     with potentially catastrophic results.  If you've tinned your
     leads properly and done a good job of soldering, you'll never
     have to worry about it.


8) Connect the game selection switch:

   First, decide what kind of a switch you want to use.  You can either
   mount a switch externally, connecting it to the game PCB through the
   4-pin connector, or you can mount it on the control panel for a more
   finished appearance.


8.1) External switch:
   
     The 4-pin female connector in section 6.3) should have three 
     wires coming out of it; GND, +5V, and GAME_SELECT.  Connect 
     these to a toggle switch such that one switch position forces 
     GAME_SELECT to +5V, and the opposite position forces GAME_SELECT
     to GND.  You're done!


8.2) Control-panel-mounted switch:

     For maximum ease of use, and a lot less strain on the connectors
     to boot, you don't have to hook your switch directly to the 4-pin
     connector.  Instead, hook things up directly to the game's wiring
     harness and mount the switch on the control panel.
     
     This is especially useful if you've added joysticks (or buttons, 
     depending on what you started with) to your existing control panel
     to avoid the need for panel-swapping.  If you're going to modify 
     your control panel, why not go all the way?  A toggle switch mounted
     directly below the P1 and P2 start buttons is easy to access and 
     gives your cabinet a finished, professional appearance.

     If you decide to go this route, you only need the GAME_SELECT pin
     on the 4-pin connector from section 6.3).  Connect the wire coming
     from the 4-pin connector to one of the unused pins on the PCB.  
     Then, add a pin to the main wiring harness to carry the GAME_SELECT
     signal to the main control panel, the utility panel, or any other 
     area of your cabinet.  If you use the control panel, for instance,
     you only have one wire to worry about, as you can use the +5V (LED 
     driver) and GND lines already present on the panel connector to
     hook up your switch.

     Connect GND, +5V, and GAME_SELECT to your toggle switch such that
     one switch position forces GAME_SELECT to +5V, and the opposite
     position forces GAME_SELECT to GND.  You're done!


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

- When working directly the main PCB (wiring up the !ROM and !VROM 
  test points), be careful about static.  If you've got an ESD-safe
  workstation, use it.  The probability of damaging your board while
  soldering is low, but there's no point in taking unnecessary chances.

- Check *EVERYTHING* for shorts, etc... before powering up your
  converted board.  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 fifteen minutes you spend now may save your
  boards later.

- The test points on the PCB are fairly tall.  Once you've plugged 
  the hack into your board, you may notice that the test points come 
  into contact with the bottom of the daughterboards, either shorting 
  out pins, or pushing the daughterboards out of their sockets.  As
  you can probably guess, both of these possibilities are Bad Things.

  If it happens on your hack, bend the test points down to about 
  a 45-degree angle.  This will solve the problem.  Just use gentle 
  pressure, and be careful not to bend the test points down all the
  way, or you'll run the risk of shorting out the traces on the PCB,
  which is an Even Worse Thing!

- Solder is brittle and can crack easily.  If you've bent the test
  points as described above, you might want to reflow the solder 
  joints connecting the wire to the test point, and the test point 
  to the PCB.  You should also pay close attention to the quality 
  of the solder joints that form the connection between the various 
  layers of your adaptors, and be gentle when plugging in or removing 
  the daughterboards.

- When switching between games, power things off and wait for a few
  seconds before flicking the switch.  Switching "on the fly" will
  confuse the hell out of the machine.  In most cases, the program 
  will crash, leading to an immediate reset, but it's conceivable 
  that there are portions of code during which a switch could lead
  to sufficient confusion to cause hardware damage.  Why take the
  chance?

Good luck building this gadget, and happy hacking!

}