Microprocessors in pinballs

The first solid state games

It did not take long for the microprocessor to appear in pinballs after its invention. Pinball machine with lots of relays and motors is a good application for a microprocessor. It can replace lots of moving parts and wires, and the small memory capacity of the first micros wasn't a problem, because neither were the games very complicated back then. At first, the manufacturers did not want to make any major changes to the games, or they did not completely understand the possibilities of the microprocessor. All three major companies, Gottlieb, Williams and Bally made both EM and SS versions of their first electronic games. The electronics were not used for anything that couldn't have been done with relays.

Gottlieb System 1

Gottlieb System 1 CPU board. This board has its battery
replaced with a "gold cap" capacitor.
Picture: Pascal Janin

The biggest manufacturer then, Gottlieb, took a different approach than two of its competitors. It gave the electronics design work to Rockwell, a company known for example from its space shuttle technology. The company created a quite special system, that was based on Rockwell's own 4-bit PPS4/2 microprocessor. The games were so simple that 4 bits were enough. The board set was called System 1. Many remember games like Joker Poker or Cleopatra. The System 1 CPU board had besides the microprocessor, two chips containing memory and I/O, or 2k x 8 bit ROM and 128 x 4 bit RAM and 16 I/O lines. On board there were then totally 4 kilobytes of ROM and 256 bytes of RAM. Even though the CPU was four bit, the program memory was 8 bits wide. Data memory however was 4 bits wide. More I/O came in the form of two GPIO chips, that both had 12 input and 12 output lines. The blue fluorescent displays were driven by a GPKD chip of the same family. Also included was a game personality prom, 1k x 4 bit bipolar PROM. That was the only part to change between different games. For bookkeeping and settings there was a 256 x 4 bit CMOS RAM. System 1 could control 8 solenoids (of which outhole, knocker and three chimes took already 5!), 32 lamps and 40 switches. The games were made in 1978-1980. Today the CPU board is hard to fix, because the Rockwell PPS4 chips are unavailable. Especially the masked ROM parts are very hard to get. A Nicad battery on board held the CMOS RAM powered when the game was turned off. The battery can leak after many years, making bad damage to board and components.

Williams System 3

At the same time Gottlieb got its design from Rockwell, Williams decided to make its own. The company had tried electronics already in 1977, making a few prototypes of a solid state Aztec. Mass producing started with a different system, with games Hot Tip and Lucky Seven. Both were available in EM and SS versions. The electronics was called System 3. Williams started directly with 8 bit technology, and chose the popular Motorola 6800 CPU. I/O was handled by 6821 PIA chips. The displays were orange plasma type. Memory capacity was a bit bigger than in Gottlieb system, the board had sockets for five 2k x 8 ROMs. RAM size was only 128 x 8 bits work scratchpad memory and 256 x 4 CMOS RAM for bookkeeping and settings. Controlling capacity is larger than Gottlieb's, the Williams System 3 can control 22 solenoids, 64 lamps and 64 switches. Because standard chips were used, these games can still be repaired quite easily. One problem in over 20 year old games is fading of the EPROMs, but fortunately even the oldest games software can be downloaded from Williams's web site and then reprogram the EPROM's. A weak spot on the Williams board are the IC sockets. Old SCANBE brand sockets should be replaced with proper sockets as soon as problems appear. Nicad battery causes no problems on Williams boards, because there is none. They use AA batteries instead. But those should be replaced after 1-2 years, or the will leak. Use only alkaline batteries, they leak much less!

Bally AS2518

Bally AS2518-35 - system. Upper left the CPU board, below that the lamp driver board. Upper right the solenoid driver / power supply, below that the Squawk and Talk sound board.

Bally also designed its own system. Like Williams, they also used Motorolas 6800 and 6821 chips. Memory capacity is approximately the same. But the Bally system is a little more compact. When Williams needed a separate driver board with a few more PIA chips, Bally used only two PIA's located on the CPU board. Lamp drivers were on another board and solenoid drivers on a third board. So this is by no means a copy of the Williams system. Bally's control capacity was smaller than Williams's, so some games had to be equipped with auxiliary driver boards to handle larger amount of solenoids or lamps. Memory backup is with a nicad, bringing the same problems than in the Gottliebs. The first Bally machines were Freedom, Night Rider and Eight Ball.

6800 CPU (here by Hitachi) and
a PPS4/2 CPU, note the strange looking case.

Other manufacturers

Besides the three major companies, also many others were experimenting with solid state games. Here must be mentioned Mirco Games (not Micro), who takes credit from the first solid state pinball. The game was Spirit of 76 (do not confuse with a Gottlieb of same name) and it operated on Intel's 8008 CPU. Production run was small and the company did not make other games. Spanish company Playmatic developed its on system based on RCA's 1802 CPU. These games with LED displays have been also imported to Finland, I remember fixing a Big Town once. Another Spanish company, Recel, made some games with the Rockwell PPS4 chip set, but its system was unlike Gottlieb's though.

Technology evolves

After the first SS games each manufacturer went on developing their systems. Gottlieb still trusted on Rockwell and made them design a second generation system. This was first used in Spiderman, 1980, and got the name System 80. It used a 6502 CPU and 6532 I/O chips. System 80 was further developed during some years and got more memory capacity and alphanumeric displays. The last Gottliebs were done with System 3, that was still based on 6502 CPU and used MOSFET transistors for solenoid control.

Williams System 6. Upper left is the CPU, below it the driver board. Upper right is the sound board, below it is the power supply, and the transformer is at the bottom with some rectifiers and capacitors.

Williams continued developing their system. System 3 was followed by System 4, 6, 7, 9 and 11, that all used a Motorola 6800 type CPU. The CPU changed to 6802 in System 9, it has 128 bytes of internal RAM but otherwise is the same as 6800. Memory capacity got larger, making more complicated games possible. System 11 had an alphanumeric display. A notable change came in 1990, with new WPC system, when the CPU changed to much more powerful 6809 with a 2 MHz clock frequency.

Bally used the AS2518 board for couple of generations, that differ mainly in memory capacity. We remember the fine machines such as Flash Gordon, Vector and Xenon. The next step from Bally was to change the CPU to 6803, that has internal RAM and a timer, This made the board a little simpler, and at the same time the memory capacity increased. 6803 board based machines are for example Eight Ball Champ, Hardbody and Truck Stop, of which the latter were last 6803 game after Williams merged with Bally and continued using the Williams System 11 board set.

Today, when the only existing pinball manufacturer is Stern, it is interesting to know than in the 1980's Stern used the Bally system in its games. Stern games like Nugent, Flight2000 and Lectronamo were exactly like Ballys from the inside! A little difference on the CPU board though. Stern doubled the RAM capacity by adding another RAM chip.


How does the CPU operate in pinballs? Let's look at the Bally 6800 board. With the help of two PIA's the CPU controls displays, lamps, solenoids and switches. The CPU operation is timed by two different interrupts. A Zerocross-signal interrupts the CPU when powerline signal crosses the zero point, that is 100 times a second with a 50 Hz AC power. A small oscillator on CPU board generates a display interrupt approximately 300 times a second.

Even today the games are programmed in assembly language. The manufacturers do not trust high level compilers, even if they today make as good code as assembler, if possibly even better because the programmer doesn't have to worry about register level stuff.


At power on, the first thing the game program does is to test the CPU board. Every ROM chips checksum is calculated, every RAM chip is tested, every PIA is tested and both interrupts are checked to occur. Over 90% of the board components are tested, and the game is not allowed to start if any test fails. The tests take about 10 seconds, and their progress can be observed by looking at the flashing LED on CPU board. Every succesful test flashes the LED once. By counting the flashes it can be seen which test fails.

;checksum rom

         ldx   #6000          ;start from 5fff (top of u6)  
romck2:  clra    
         lds   #0400          ;add 0400 bytes  
romck1:  dex     
         adda  00,x   
         sts   digit  
         bne   romck1   
         coma                 ;check that sum is 0  
         bne   .              ;rom test error    
         cmpx  #1000          ;all rom 1000-5fff done?    
         beq   romok  
         cmpx  #5000          ;u6 done?    
         bne   romck2   
         ldx   romend         ;u6 done, get game rom end  
         beq   romok  
         bra   romck2

romok:   lds   #stack  
         bsr   flashled       ;1. flash: rom ok  

Main program

The main program checks the switch matrix state. The matrix consists of all playfield switches, coin switches, tilt, start button etc. When a changed state is noticed, the switch number is used to get a subroutine address, which is then executed. In case of a coin switch, the subroutine checks the pricing settings and adds credits accordingly. In case of a tilt switch, the program sets the tilt flag, turns flipper power off and lights the TILT lamp. And so on. The switch matrix is scanned in three successive zerocross interrupts and its state is stored in RAM. To eliminate switch bounce and stuck switches, the switch is considered closed only if the three scans show the switch as "open", "closed", "closed". Only then is the switch subroutine executed. If all three scans show the switch closed, it is marked as stuck. Other combinations are caused by contact bouncing and can be rejected.

main5:   tba     
         andb  00,x           ;clear switch state       
         stab  00,x        
         ldx   tmpvect        ;get vector       
         ldx   00,x        
         jsr   00,x           ;call vector       
main1:   ldx   usrpresc        
         jsr   00,x        
         ldx   scoreupd       ;call score update routine      
         jsr   00,x        


AC line voltage drops to zero 100 times per second (with 50 Hz power). This generates an interrupt to CPU, that then waits a short time to let the voltage rise a bit. Then the controlled lamps state is fetched from RAM and written to lamp driver board thyristors, that then stay on until the next zero crossing.

Game timers are handled in this interrupt. If a timer has a positive value, it is decreased by one. The main program can then check the timers and do various stuff if a timer has gone to zero, and set new values to the timers. For example the solenoid pulses are done with these software timers. A bumper or slingshot gets power for three zerocross cycles. An eject hole solenoid is given a longer pulse to make sure the ball gets out.

;system zerocross irq

zcirq:   dec   timer1  
         ldx   timerw         ;timer1 <= 0?  
         bmi   zci1
         beq   zci1   
         dex                  ;dec timer1  
zci1:    stx   timerw  
         ldaa  timer2         ;timer2 at 0?  
         beq   zci2   
         dec   timer2         ;dec timer2  
Next is the switch matrix read. As said, the matrix state is stored in three arrays. Because it takes three zerocrosses to read the matrix, it would be too slow for bumpers and slingshots that need immediate attention. So these special switches are read once at every zerocross interrupt and thir corresponding solenoid is fired instantly.

Display interrupt

About 300 times each second, the CPU gets a display interrupt. Score displays are multiplexed, that means only one digit at a time in each 5 displays is shown. The digit position changes 300 times per second, so that human eye sees them all on constantly. The numbers for five displays are stored in RAM, as is the currently displayed position. In the display interrupt the old digit is turned off, new position selected and the new digit turned on.

dspi1:   staa  pia1a          ;lamp data/adr=ff  
         ldab  #3C  
         stab  pia1bctl       ;set lamp strobe 1  
         ldab  #3D  
         stab  pia2actl       ;set lamp strobe 2, enable disp irq  
         ldab  #34  
         stab  pia1bctl       ;clr lamp strobe 1  
         ldab  #35  
         stab  pia2actl       ;clr lamp strobe 2  
         ldaa  digit          ;find current digit  
         ldx   #021D          ;and make X= 21d + digit#  
dspi2:   inx     
         bcc   dspi2
         ldaa  #35  
         staa  pia1actl       ;disp data enable  
These older Ballys were programmed with assembly language only. Williams could squeeze much more features in the same memory amount by using its own event driven operating system and a clever interpreted script language williams_lvl7_programming.html.

When comparing the different software architectures of old pinballs, it is easy to note how Williams developed into a class of its own. Bally stuck with the straight assembly language and had to struggle with memory limitations, Gottlieb outsourced the electronics/software division and lost control in its own games, while Williams developed solutions to work with limited memory space and produced machines that still fascinate players. It was not the softwares or electronics fault that Williams finally had to quit pinball business.