Updates
 
08/05/07   – Publish v1.0
08/06/07   – Publish v1.1 – P1+P2 returns to the menu
08/19/07   - Added address mappings to the page
02/11/09   - Publish v1.2 - removed startup tests and test mode
09/02/09   - Publish v1.2a - fixed ms pac attract screen and fruit path bugs
12/08/09   - Publish v2.0 - Adds freeplay/coin up with attract mode and High Score Save
12/08/09   - Publish v2.1 - Ability to turn off cheats and created an options page
12/08/09   - Publish v2.2 - Fixed the screen saver issues caused by 2.1
12/08/09   - Publish v2.3 - Fixed sound and graphics issues when returning to main menu

 
Overview
 
I am a big fan of multigame kits that run on original hardware.  For my Pac-man I use Mike Doyle and Dave Widel’s 96-in-1 kit 
located at http://home.everestkc.net/mdoyle/multipac.htm.  Like most collectors I come across a number of Pac-man boards 
for projects and can not afford one of these kits for each of them.  For these boards I use the free hack located at 
http://www.marvin3m.com/video/pacman.htm#hack1.  This is a great quick hack for getting more than one version of Pac-man 
on a board.  The only thing I don’t like about this hack is the use of mechanical switches.  Generally you need to run some wires 
from the Pac-man board to the coin door or some other reachable location.  My goal when starting this project was to have this 
hack menu driven and eliminate the mechanical switches.
 
 
Design
 
The first thing I needed to do was find somewhere on the Pac-man board I could control via code to replace the mechanical switches.  
Looking through the many Pac-man resources on the internet I found that the latch at 8K has three outputs which it does not use.  
The addressable latch at 8K that controls sound, flip and other things also has output for Start Lamp 1 (Pin 9), Start Lamp 2 (Pin 10) 
and Coin Lockout (Pin 11).  These pins can be turned on and off like switches and since Pac-man does not use start lamps or the coin
lock-out it is not taking anything away from the original game.
 
I realized after playing around with my theory that there was a problem.  When Pac-man starts up it clears all the pins on the latch.  
In fact it clears and sets them a few times during initialization.  So, now I needed to go and modify the Pac-man and Ms. Pac-man 
code to get rid of this step or the game will reset the first time the latch is cleared.
 
Next I needed a menu to drive the 4 games. My wife helped me design the menu (see below).  It is nothing fancy but it will get the 
job done.  I am sure I will make modification to make it more fancy in the future but this is it for now.  
 
After getting the menu written and modifying Pac-man code and changing around the hack to use the latch instead of the mechanical
switches I ran into another issue.  It appears that when the pins would turn on to change the bank on the EPROM the CPU would crash 
because it had the code pulled out from under it.  I did not realize this at first so I hacked around on the board to use transistors, 
capacitors, relays and lots of other components I did not need.  After chatting with some people who have done this before 
(see thank you section) it turns out that when the bank changes the code on the next line is different than expected so the CPU crashes.  
To do this I needed to make sure that the part of the menu code that turned the pins on the latch on and off needed to be in each bank 
of the EPROM at the same location.  To do this without removing one of the games I needed to embed some menu code into the Pac-man code. 
 
 
Screen Saver
 
At the moment there is a pretty simple screen saver in place.  After about a minute of no activity it clears the screen
and shows pac-man and the ghosts bouncing around the screen.  I may add to this in the future, but it does the job.  
Any movement of the joystick brings you back to the menu screen.

High Score Save
 
Version 2.0 of this modification supports high score save for each game in thier own high score table.  The high score is 
saved on an nvram that is wired on to the board.  The nvram used can either be a 48z02 or a DS1220 (both can be found 
on the store page).  My initial thought was to plug the nvram into one of the empty eprom sockets and just 
wire up the w/r and CS lines.  For several reasons that did not work but if you wire up the nvram to the 2114 ram (or make 
an adapter) it will work.  There are some creative ways to get the nvram on the board, if you think of any send them to me
and I will post them here.  


Here is how the nvram (48z02/DS1220) needs to be connected:


NVRAM pin1   (A7) ->  2114 (4K) pin17                                       NVRAM pin24 (Vcc)  ->  Any +5
NVRAM pin2   (A6) ->  2114 (4K) pin1                                         NVRAM pin23 (A8)   ->  2114 (4K) pin16
NVRAM pin3   (A5) ->  2114 (4K) pin2                                         NVRAM pin22 (A9)   ->  2114 (4K) pin15
NVRAM pin4   (A4) ->  2114 (4K) pin3                                         NVRAM pin21 (/W)  ->  2114 (4K) pin10
NVRAM pin5   (A3) ->  2114 (4K) pin4                                         NVRAM pin20 (/G)   ->  74ls139 (5L) pin10
NVRAM pin6   (A2) ->  2114 (4K) pin7                                         NVRAM pin19 (A10) ->  Any GND
NVRAM pin7   (A1) ->  2114 (4K) pin6                                         NVRAM pin18 (/E)   ->  74ls139 (5L) pin10
NVRAM pin8   (A0) ->  2114 (4K) pin5                                         NVRAM pin17 (D7)   ->  2114 (4K) pin11
NVRAM pin9   (D0) ->  2114 (4N) pin14                                       NVRAM pin16 (D6)   ->  2114 (4K) pin12
NVRAM pin10 (D1) ->  2114 (4N) pin13                                       NVRAM pin15 (D5)   ->  2114 (4K) pin13
NVRAM pin11 (D2) ->  2114 (4N) pin12                                       NVRAM pin14 (D4)   ->  2114 (4K) pin14
NVRAM pin12 (Vss) -> Any GND                                                NVRAM pin13 (D3)   ->  2114 (4N) pin11
 
  Here is a great example of an adapter courtesy of Slava Madrit
  
  
  
Here is a great example of an adapter courtesy of Mike Fuchs

  
Modified Hack
 
This is a modified copy of the hack from (http://www.marvin3m.com/video/pacman.htm#hack1) that uses the 3 pins at 8k 
instead of the mechanical switches.  My hack uses a 27020 instread of a 27010 which basically have the same pinout, but
The 27020 is twice as big.  This way I can add my menu and have room to expand it and add a game or two later.
 
    1. Row 6 mod.
      The
      27020 is a 32 pin DIP. The socket I used was 6J and is 24 pins. Bend up pins 1, 2, 3, 4, 22, 24, 25, 28, 29, 30,31, and 32. Place the new ROM socket in the pcb socket so that the bottom of the chip (opposite side from the notch) lines up with the bottom of the socket. This means that pin 16 of the chip should go into pin 12 of the socket. If you had not bent up pins 1 through 4 and pins 29 through 32, they'de be hanging off. The actual pcb socket you use isn't important (as long as it's not 6K or 6L). We could use 6E, 6F, or 6H, but the daughterboard in 6D gets in the way.
      1. Connect pins 24 (OE\) and 22 (CE\) to 7N pin 12.
      2. Connect pin 25 (A11) to 7L pin 9.
      3. Connect pin 28 (A13) to 7N pin 14.
      4. Connect pin 29 (A14) to 6B pin 5 (test connector 8th "finger" from the bottom component side). I tapped into it at this side edge connector.
      5. Connect pin 4 (A12) to 7J pin 6.
      6. Solder the wire between pins 1 (Vpp), 31 (PGM\), and 32 (Vcc) to +5 volts. You can tap into this in a number of places. Pin 24 of every ROM socket has 5 volts on it.
      7. NEW: Connect pin 3 (A15) to 8K pin 11.
      8. NEW: Connect pin 2 (A16) to 8K pin 10.
      9. NEW: Connect pin 30 (A17) to 8K pin 9
 
    1. Row 5 mod.
      The 27128 is a 28 pin DIP. Bend up pins 1, 2, 20, 22, 23, 26, 27, and 28 on a 28 pin socket. Put the new socket into the pcb socket at 5E or 5F. Again, it doesn't matter which.
      1. Connect pins 22 (OE\) and 20 (CE\) to GND. You can pick up GND at pin 12 of any of the ROM sockets. You can also use pin 14 of the 27128 or pin 16 of the 27010. GND is always the top right pin of the EPROM (if you are facing the component side of the pcb with the edge connector towards the ceiling).
      2. Connect pin 23 (A11) to 4F pin 1.
      3. Connect pin 26 (A13) to pin 2 of the 27010.
      4. Connect pin 2 (A12) to 5L pin 5.
      5. Connect pins 1 (Vpp), 27 (PGM\), and 28 (Vcc) to +5 volts. I just connected pin 1 to pin 28. I then globbed solder between pins 27 and 28. Then, I soldered another wire from the glob to pin 24 of another ROM position (5H).
 
Address Mappings
 

74ls259 Pin (9) 0x20000

74ls259 Pin (10)

0x10000

74ls259 Pin (11)

0x8000

27c020 Address

Character Roms

Game

0

0

0

0x00000

Pac-Man

Menu

0

0

1

0x08000

Pac-Man

Pac-Man Fast

0

1

0

0x10000

Ms. Pac-Man

Ms Pac-Man Cheat

0

1

1

0x18000

Ms. Pac-Man

Ms Pac-Man Fast

1

0

0

0x20000

Pac-Man

Pac-Man Cheat

1

0

1

0x28000

Pac-Man

Empty

1

1

0

0x30000

Ms. Pac-Man

Empty

1

1

1

0x38000

Ms. Pac-Man

Empty

 

 
Modified Eproms
 
          The row 6 27c010 EPROM needed to change a bit, but the row 5 EPROM remains unchanged.  The row 6 EPROM has 
          a new layout to include the menu and some other changes to the original Pac-man/Ms. Pac-man code.  This is very
          wasteful, but I did not want to make a bunch of changes to fit everything on the 27c010.  The 27c020 gives me more
          then enough room to add a couple more games in the future.
 
          Download bin files: 
4n1_1_2.zip

4n1_2_0.zip
 
00000 - 00FFF Menu Part 1
01000 - 01FFF Menu Part 1
02000 - 02FFF Menu Part 2
03000 - 03FFF empty
04000 - 04FFF empty
05000 - 05FFF empty
06000 - 06FFF helper functions
07000 - 07FFF empty
 
08000 - 08FFF Pac-Man 6e
09000 - 09FFF Pac-Man 6f speedup cheat
0A000 - 0AFFF Pac-Man 6h
0B000 - 0BFFF Pac-Man 6j 
0C000 - 0CFFF empty
0D000 - 0DFFF empty 
0E000 - 0EFFF helper functions
0F000 - 0FFFF empty 
 
10000 - 10FFF Ms. Pac-Man boot1
11000 - 11FFF Ms. Pac-Man boot2 cheat
12000 - 12FFF Ms. Pac-Man boot3 
13000 - 13FFF Ms. Pac-Man boot4
14000 - 14FFF Ms. Pac-Man boot5
15000 - 15FFF Ms. Pac-Man boot6
16000 - 16FFF helper functions
17000 - 17FFF empty
 
18000 - 18FFF Ms. Pac-Man boot1
19000 - 19FFF Ms. Pac-Man boot2 speedup cheat 
1A000 - 1AFFF Ms. Pac-Man boot3
1B000 - 1BFFF Ms. Pac-Man boot4
1C000 - 1CFFF Ms. Pac-Man boot5
1D000 - 1DFFF Ms. Pac-Man boot6
1E000 - 1EFFF helper functions
1F000 - 1FFFF empty
 
20000 - 20FFF Pac-Man 6e
21000 - 21FFF Pac-Man 6f cheat
22000 - 22FFF Pac-Man 6h
23000 - 23FFF Pac-Man 6j 
24000 - 24FFF empty
25000 - 25FFF empty
26000 - 26FFF helper functions
27000 - 27FFF empty
 
28000 - 28FFF empty
29000 - 29FFF empty
2A000 - 2AFFF empty
2B000 - 2BFFF empty
2C000 - 2CFFF empty
2D000 - 2DFFF empty 
2E000 - 2EFFF empty 
2F000 - 2FFFF empty 
 
30000 - 30FFF empty 
31000 - 31FFF empty 
32000 - 32FFF empty 
33000 - 33FFF empty 
34000 - 34FFF empty 
35000 - 35FFF empty 
36000 - 36FFF empty
37000 - 37FFF empty
 
38000 - 38FFF empty
39000 - 39FFF empty
3A000 - 3AFFF empty
3B000 - 3BFFF empty
3C000 - 3CFFF empty
3D000 - 3DFFF empty
3E000 - 3EFFF empty
3F000 - 3FFFF empty
 
  
 
Web Resources
 
http://members.cox.net/seanriddle/arcade.html
 
 
Thank You
 
First of all thank you to the person or people that came up with the original hack.  I would also like to thank the people 
who helped me with all the great knowledge they have learned and shared via a website or emails with me directly.  
This would not have been possible without Rob Carroll, Sean Riddle, Scott “Jerry” Lawrence, David Caldwell and 
many others.