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.

Software
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.
Tests
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
des
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
coma
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
Zerocross-interrupt
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
asla
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.

Back