
------------------------------------------------------------------------
| UPGRADE: PLAY BUBBLES ON YOUR HACKED ROBOTRON/JOUST/STARGATE MACHINE |
------------------------------------------------------------------------

COPYRIGHT 1994

REVISION NUMBER: 1.0 (first public release)
  REVISION DATE: 1 Jun 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:
-----------------

If you've seen my hack describing how to get Robotron, Joust, and
Stargate to play off the same set of Williams boards, you're probably
wondering if there aren't more games you can play...

Well, there's at least one -- Bubbles.  Bubbles won't run on the hack
without an upgrade to the CPU board, but the upgrade is quick, easy,
and best of all, won't interfere with your older games.

So, if you haven't already modified your Joust or Robotron machine to
play Joust, Robotron, and Stargate, now's the time to hack it up.  Then
turn back to this file to give yourself a fourth game, Bubbles.

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, hacked to play Joust, Robotron,
    and Stargate as per my earlier conversion hack.
1 - Set of controls for Robotron.  You should already have these due
    to your previous hackery.
1 - 27512 EPROM at 450ns or faster
1 - 2732 EPROM at 450ns or faster
1 - 6514 CMOS RAM chip (these are rare, but a 2114 RAM chip will work too)
1 - 18-pin DIP socket

You will also need an EPROM programmer (or a friend who has one),
binary dumps of the Bubbles ROMs, and a soldering iron.


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

0) Read all of these instructions before you begin.

   This is a fairly simple upgrade; it shouldn't take you more than an
   hour from start to finish.  Good luck!


1) Create the program ROM data files:


1.1) Read the Bubbles 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.


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

     Call this file "blank.fff".


1.3) Create the program ROM, using a 27512.  The contents of the game
     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 script will create the required file:

     cat bubbles.01 > bubbles.512
     cat bubbles.02 >> bubbles.512
     cat bubbles.03 >> bubbles.512
     cat bubbles.04 >> bubbles.512
     cat bubbles.05 >> bubbles.512
     cat bubbles.06 >> bubbles.512
     cat bubbles.07 >> bubbles.512
     cat bubbles.08 >> bubbles.512
     cat bubbles.09 >> bubbles.512
     cat blank.fff >> bubbles.512
     cat blank.fff >> bubbles.512
     cat blank.fff >> bubbles.512
     cat blank.fff >> bubbles.512
     cat bubbles.10 >> bubbles.512
     cat bubbles.11 >> bubbles.512
     cat bubbles.12 >> bubbles.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 wired up
     an adaptor when you hacked your game to play Robotron, Stargate,
     and Joust.  Read in the Bubbles sound data to create "bubbles.snd",
     the file for the new Bubbles sound ROM.


2) Fry up the ROMs:


2.1) Burn a 27512 with the contents of "bubbles.512".


2.2) Burn a 2732 with the contents of "bubbles.snd".


3) Okay, now you've got your chips, but you've got a bit more work left
   to do before Bubbles will run.  If you plug the chips in now and
   power things up, you should see what appears to be a normal powerup
   sequence, a couple of encouraging text messages, and then a brief
   flash of color as the game resets itself.

   So, what's the deal here?

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

   The deal is that Robotron and Joust used 4K of CMOS RAM, organized
   in a 1K-by-4bit block.  Bubbles, on the other hand, used the full
   eight bits of the data bus, requiring a second CMOS RAM chip.

   The cool part is that plunking in the second chip will make Bubbles
   happy, but because none of the earlier games depended on the older
   RAM architecture, it'll be completely transparent to them.

   Once more, we go to the board and ask what we can use...

   (Well, like what?)

   Like the 6514 RAM that's already there.  It's got the same pinout
   as the new RAM chip we're going to install, so we can save ourselves
   a lot of wiring by just sticking our new chip directly on top of the
   old one.

   (Yeah, but what about...)

   ...the upper 4 bits of the data bus?  Okay, we'll bend those pins
   away from the body of the old chip and hook 'em up to the data bus
   somewhere else.

   (Like where?)

   Like on the 74LS245 that's about two inches away from our two RAM
   chips.  How's that?

   (Sounds cool.  When do we start?)

   How 'bout now?


4) Safety precautions:

   You're going to be soldering wires and a chip socket directly onto
   some existing chips on your CPU board.  For best results, you should
   "tin the leads" of the both the wires and the pins of the existing
   chips.  This is best done by briefly touching the soldering iron to
   the leg of the chip in question, and then touching some solder to
   the now-heated chip leg.

   The risk you run while doing this is that you may overheat the chip.
   For maximum safety, do things one leg at a time, in random order
   around the chip, and wait a few seconds between legs to let things
   cool off a bit between tinnings.

   Before you solder anything, you should remove the three batteries
   from their clip; remember that messing around with powered chips is
   usually a bad idea, and that the CMOS RAM is powered at all times by
   these batteries.

   As a final precaution, you may wish to remove the 6809 CPU chip and
   the two video decode ROMs before you begin; the video decode ROMs
   are difficult (if not impossible) to replace should they die, and
   the 6809 is very close to the area of the circuitry on which you'll
   be working.  Better safe than sorry.


5) Identify your chips:

   Locate chips 1C and 1G on your Robotron (or Joust) CPU board.

   Chip 1C should be a 6514 (or 5114, or something ending in "14").
   It will be found on the top row of chips, two chips to the left
   of 1E, the 6809 CPU.

   Chip 1G is the 74LS245; it will be found on the top row of chips,
   immediately to the right of 1E, the 6809 CPU.  The following diagram
   should clear up any doubt:
    ______________________________________________________
   |                                                      |
   |         #########     ####                           |
   |            _ _                                       |
   |  1 1 1 1  | U |  1 1 1 1  [                       ]  |
   |  A B C D  |   |  G H I J  [  RAM - 1K through 1R  ]  |
   |           | 6 |           [                       ]  |
   |           | 8 |                                      |
   |    2 2 2  | 0 |  2 2 2 2  [                       ]  |
   |    B C D  | 9 |  G H I J  [  RAM - 2K through 2R  ]  |
   |           |___|           [                       ]  |
   |                                                      |
   |___/\              /\      [   /\                  ] _|
         \  /\      /\/  \  /\ [/\/  \- 3K thr/\/\ 3R  ]/
          \/  \  /\/      \/  \/      \  /\/\/    \  /\/
               \/                      \/          \/

   Tech Note:  Here are the pinouts for the 6514 CMOS RAM chip at 1C.
               They are identical in every way with a 2114 RAM chip,
               so if you can't find a 6514, don't worry; a 2114 will
               do just fine.
                   __ __
                A6|  U  |+5V
                A5|     |A7
                A4|     |A8
                A3| 6 2 |A9
                A0| 5 1 |I/O1
                A1| 1 1 |I/O2
                A2| 4 4 |I/O3
               !CS|     |I/O4
               GND|_____|!WE


5.1) Wire up the socket.

     Take an 18-pin DIP socket and bend pins 11 through 14 out at
     a right angle.  These pins will eventually carry the upper four
     bits of the data bus to the chip.

     The other pins should all be soldered directly onto the existing
     chip at 1C on the CPU board.  When you're done, you should have
     something like this when viewed from the air:

     LEGEND:
     -------
     . = empty space on motherboard
     C = 6514 CMOS RAM beneath empty socket
     - = bent pin from 18-pin socket and associated wire

     . . . . . . . . . .
     . . . . . . . . . .
     .     . .     . . .
     .  1  . .  18 . . .
     .   C     C   . . .
     . . C  6  C . . . .
     . . C  5  C . . . .
     . . C  1  C . . . .
     . . C  4  C---  . .
     . . C     C---  . .
     . . C  1  C---  . .
     . . C  C  C---  . .
     . . C     C . . . .
     . . . . . . . . . .
     . . . . . . . . . .

     From the side, it should look like this:

     LEGEND:
     -------
     = = motherboard material
     # = body of 18-pin DIP socket
     | = uncut pins
     x = the stub of the cut pin
     ; = the end of a bent pin, pointing towards the viewer.

            ###################        < body of 18-pin
            ###################        < DIP socket
             ! ! ! ! ! ! ! ! !
             | ; ; ; ; | | | |         < pins 11-14 bent at right angles
             |         | | | |
             |         | | | |         < remainder of pins connected
             |         | | | |         < directly to legs of 6514 chip
           .-|---------|-|-|-|-.
           | | _ _ _ _ | | | | |       < body of 6514 chip
           | V V V V V V V V V |       < wide part of 6514 pins
           `-|-|-|-|-|-|-|-|-|-'       < skinny part of 6514 pins
     ==================================< PCB material
             ' ' ' ' ' ' ' ' '         < solder behind motherboard


5.2) Connect the socket to the data bus.

     The four bent pins of the socket you just glommed onto the 6514
     at location 1C will carry signals D4 through D7.  You can get these
     signals from the 74LS245 at location 1G.

     Connect four thin wires directly to pins 6 through 9 of the 74LS245
     at 1G.  Connect these four wires to the four bent pins of the socket
     you installed in step 4.1) as follows:

     .----------.
     | DATA BUS |
     |----------------------------------------------------------------.
     | 1C14 - 1G6  |  D4                                              |
     | 1C13 - 1G7  |  D5                                              |
     | 1C12 - 1G8  |  D6                                              |
     | 1C11 - 1G9  |  D7                                              |
     `----------------------------------------------------------------'

     When you're done, your modified CPU board should look like this:

     LEGEND:
     -------
     . = empty space on motherboard
     C = 1C - 6514 CMOS RAM beneath empty socket
     G = 1G - 74LS245
     x = unrelated chips (included for reference only)
     - = bent pin from 18-pin socket (and associated wire)

     . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
     . . . . . . . . . . . . . . . . . . . . . . . .     . .     .
     .     . .     . . . . . . . . . . . . . . . . .  1  . .  20 .
     .  1  . .  18 . . . . . . . . . . . . . . . . .   G     G   .
     .   C     C   . . x     x . . . . . . . . . . . . G  7  G . .
     . . C  6  C . . . x  1  x . . . x           x . . G  4  G . .
     . . C  5  C . . . x  D  x . . . x           x . . G  2  G . .
     . . C  1  C . . . x     x . . . x           x . . G  4  G . .
     . . C  4  C<------------------------------------->G  5  G . .
     . . C     C<------------------------------------->G     G . .
     . . C  1  C<------------------------------------->G  1  G . .
     . . C  C  C<------------------------------------->G  G  G . .
     . . C     C . . . . . . . . . . x           x . . G     G . .
     . . . . . . . . . . . . . . . . x 1E - 6809 x . . . . . . . .
     . . . . . . . . . . . . . . . . x    CPU    x . . . . . . . .
     . . . . . . . . . . . . . . . . x           x . . . . . . . .


6) Regression test:

   You've done all the wiring, but before we go any further, let's make
   sure that we haven't damaged anything in the process.

   Plug your modified CPU board into the harness and power up all three
   games (Robotron, Joust, and Stargate).  If everything works normally,
   you can go for Bubbles in a few minutes.

   If you notice problems, work backwards - disconnect the four wires
   and see if that fixes things.  If not, chances are you've either
   shorted something out with a stray glob of solder, or you've gone
   and fried the CMOS RAM or the '245.

   If the game powers up, but behaves erratically, odds are the fault
   lies with the CMOS RAM.  If the game appears dead to the world (no
   evidence of CPU activity whatsoever), it's the '245.  Check for solder
   globs first, and as a last resort, replace the chips.

   The odds of problems arising from this procedure are slim, but you
   always have to be careful when soldering directly to a motherboard.

   If the three older games work fine, power back down and insert your
   6514 or 2114 RAM chip, and swap in the Bubbles ROMs.  Power up, and
   verify that Bubbles now functions normally.  If something goes wrong
   here, it's almost certainly a bad solder joint - you haven't shorted
   out anything vital (because the other games work fine), but neither
   do you have good contact to the newly-expanded RAM on which Bubbles
   depends.

   Finally, when you have verified that Bubbles is running, make sure the
   other three games function normally with the new RAM in the system.
   There should be no problems with any of the four games at this stage.


7) Control panels:

   Okay, so you can run Bubbles on your console, but how the heck do
   you actually play the game?

   Well, pretty easily.  If you've hacked your machine to play Joust,
   Stargate, and Robotron, you'll be pleased to note that Robotron is
   almost 100% compatible with Bubbles.  If you can live with starting
   2-player games with the 1-player start button and vice versa, you're
   done.  If you're really feeling masochistic, you can build a quick
   adaptor to swap pins 15 and 16 (the P1 and P2 start buttons), or
   you can just use your Robotron panel as-is.

   For the record, here are the pinouts of the two interface boards:


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


7.2) Bubbles interface board pinout

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


8) Usage instructions:

   Use the hack just like you used your hacked board set for the
   other three games; the modification is completely transparent
   with respect to the older games.  The only difference is that
   you can now run four games in the cabinet instead of three.

   If you've substituted a 2114 in place of a 6514 for the CMOS
   RAM extension, I'd recommend *NOT* replacing the batteries, as
   the 2114 may draw too much power and drain the batteries too
   quickly to be of any practical value.  I don't have any hard
   data on this, as I've left the batteries out of my system from
   the day I completed this hack.  If anyone uses a 2114 with the
   batteries, let me know how it turned out and I'll add your info
   to this document.


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

Safety Check:

- Check *EVERYTHING* for shorts, etc... before powering up.  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.

  See section 6) for additional debugging tips pertaining to wiring and
  solder shorts.  Good luck!

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


Sound Check:

- If you get no sound when playing Bubbles, check your ROMs.  I've
  seen at least one set of Bubbles ROMs that are incompatible with
  one version of the Bubbles sound chip.  Your mileage shouldn't vary,
  but don't be surprised if it does.


