Programming eproms and upgrading pinball software

The game rules (and part of the operating system of a pinball machine) are not fixed, they can be updated. Sometimes new versions were released that brought more functionality or fixed bugs. On recent machines (most types made after 2005) an update can be done by USB (see here on how to upgrade the software on a Spooky pinball machine).
On older electronic machines (everything from 1977) it's not so easy to do. The software is stored in an eprom. Updating to a newer version means physically installing a new eprom chip. If you have the right hardware you can program the new version of the eprom chip yourself. Without this hardware, you have to buy a new eprom from someone who programs it for you and then install the eprom in your machine.

What is an eprom ?

EPROM is short for Eraseble Programmable ROM. And a Rom is Read Only Memory. Something that can only be read when it's installed (in the pinball machine), but with the correct tool it can be erased and written (programmed).
Note that PROMs also exists, these are blank chips that can only be written once, they do not have the ability to be erased. In pinball machines you sometimes find them in WPC sound boards. PROMs were selected because they are cheaper, and for some applications (like sounds) there's no need for updates.

pinball and arcade eproms
Eproms that are often found in pinball and arcade machines. Usually the clear window is covered with some kind of decal, with a version number on it.
Note the eprom on the far left: a Fujitsu MB8516, which is their version of a 2716.

Types of eproms

Many types of eproms exist. In pinball machines most often the 27 series is used (and the 25 series in the very old electronic games).
How do you know an eprom is the correct type you need ? First start with recognising eproms - they have a clear window (or the window is covered by a decal). The letters on them indicating the type also give a clue.

Eproms useful for pinball machines are manufactured by several companies, which each use their own code. There are useful indications like the type and brand, but for us useless indications like a production datestamp. All these different writings make it difficult to give a complete list of all eproms useable in pinball machines. It's better to understand what the codes means, what to look for, and that way decide if an eprom is suitable or not for your application.

pinball eproms
Eproms used in System11 and WPC / WPC95 pinball machines.

Most in pinball useful eproms have these type of markings on them:

  • A logo of the company that made them. Some common are Fujitsu (F), Texas Instruments (TI), AM(D), ST(M).
  • Specific type of eprom. See below.
  • A copyright year or datestamp when it was produced. If it's the full year (YYYY) then it's usually as a copyright note, the specific production week is noted in the YYMM format.
  • Programming voltage information. This is sometimes part of the type, sometimes seperately noted.

The specific type is also made up of parts that each contains information.
Take for example the eprom at the top right in the picture above: AM27C512-200DC
AM = AMD, the company that manufactured the eprom.
27 = the 27 series
C = CMOS. If an eprom doesn't have this, it's probably NMOS. NMOS uses more electricity. For pinball use it doesn't matter, usually you can use both types of eproms.
512 = the size - check the table below
-200 = the speed: a lower number is better, the eprom can read at higher speeds. 100ns is faster than 150ns or 200ns. Not every company notes the speed the same, one may write 150 and the other 15. For most pinball machines, speed doesn't matter. It does matter for instance in Sega display eproms (120ns or faster). A specific eprom speed matters when you want to use the eproms in computers like the Commodore Amiga, Atari ST and Nintendo SNES cartridges.
D = DIP package, the type of eprom. For pinball machines it's always DIP, with 24, 28 or 32 legs.
C = Commercial use. Doesn't matter for pinball machines.

Let's have a look at what's written on all the eproms above, and describe the differences.
Top row: D27C256-250V10, 27C256-15, 27C256-20. These three are all 27C256 eproms, made by different manufacturers in different years (1984 ?, 1989 week 22 and 1989 week 21). They can handle different speeds (25, 15 and 20ns) and need to be programmed at different voltages (10v and 12,5v). 256 bits (=32kB). Top right is the AM27C512-200DC described above, double the size of the 3 other eproms.
Center row: AM27C010-150DC, D27C010-150V10, M27C4001.
Bottom row: M27C4001-10F1, M27C4001-12F1 and M27C801-100F1. The first two are basically the same part from the same company, although they do not look identical visually. The most right (801) is again double the size of the others.

Below is a list of the different sizes. Note that eprom sizes are in indicated kiloBIT, not kiloBYTEs. 1 byte = 8 bits.
File sizes in windows are default shown kilobytes, you have to divide them by 8 to get kilobyte and match what's written on the eprom. A file of 512kB is 4mbit and you need an 27c040 eprom, it is too large for a 27C512 !
Up to 512kbit the naming is straightforward. Above it manufacturers started to use different notations, internally the eproms can be different but they are all compatible.
2704 = 4 kilobit = 0.5kbyte
2708 = 8 kilobit = 1 kbyte
2716 = 16 kilobit = 2 kb
2732 = 32 kilobit = 4 kb
2764 = 64 kilobit = 8kb
27128 = 128 kilobit = 16kb
27256 = 256 kilobit = 32kb
27512 = 512 kilobit = 64kb
27C010 or 27c1001 = 1 megabit (1024 kilobit) = 128 kbytes
27C020 = 2 megabit = 256kb
27C040 or 27C400 or 27C401 or 27C4001 = 4 megabit = 512kb
27C080 or 27C800 or 27C801 or 27C8001 = 8 megabit = 1 MB (megabyte)

How to erase eproms

Eproms have a clear window in them, exposing the internal part that stores everything. When you look at it you see that internally it's quite small, compared to the whole chip.
The component is just put in a larger 'package' as humans need to be able to handle the part and solder the sockets to attach it to a pcb. Nowadays SMD components are much smaller as they're soldered in a different way, they don't need the big metal legs anymore.

eprom internal window
A closeup of the part underneath the window. The square is what actually stores everything and what you erase.

Erasing an eprom is done by exposing the internal part to ultraviolet (UV) light. Therefore you need an eprom eraser. That is a small box with a UV lamp in it, and usually a timer. Put some eproms in it (the clear window goes up towards the UV lamp), expose them for about 5 (for 2716 / 2732 eproms) up to 15 minutes (for 27C080), and the eproms should be blank again. For the correct time you can look it up in the datasheet or by trial and error..
All the data is erased by the uv light. Using an eprom programer you can test if they're empty and ready to be programmed again. If an eprom is not completely empty yet, give it another erase session. Don't leave the eprom in for too long or it can be permanently damaged.

Programmed eproms should have their clear window covered for protection. Whilst to completely erase an eprom it takes a long time (even in direct sunlight), damage can always happen. Even one erased bit can give checksum errors or 'weird' problems. Sunlight, but also fluorescent lights also emit UV light. Machines like Sys80 Gottlieb games that use a fluorescent tube for backbox illumination can get errors in their eproms if the windows aren't covered anymore. 40 year old glue usually doesn't hold well anymore..

eprom eraser with uv
An eprom eraser. Put the eproms in the drawer, close it, and switch it on. The timer usually is about 10 minutes per setting, don't leave the eproms in there for an hour !

Buying an eprom programmer

To program an eprom you need special hardware: an eprom programmer. Many versions exist. 20 to 30 years ago, professional programmers used to cost a lot - hundreds of dollars. Too much for a pinball enthousiast who just needed one a few times a year. A cheap alternative was the Willem programmer, an open source version that you had to solder yourself. You may still find online references to it. It only works on a serial port, so it's not relevant anymore.

Luckily many cheap ($30 to $100) chinese versions of eprom programmers exist now. They became cheap enough that it's useful to own one, even if you don't buy dozens of pinball machines a year. Just having the comfort of burning your own updates when you need it, without having to order online and waiting for it, can be worth it.
With these cheap programmers you have to be careful - most do work fine with USB, but some have software that only works on a specific version of Windows (either Windows XP or only 32 bit versions). Even some of the models for sale now on ebay/amazon/aliexpress ship with software that only runs on Windows XP !
So if you're in the market for a programmer, compare and check the specifications, you want a recent model with USB and support for your recent Windows version (Windows 10 or whatever you use).

When selecting an eprom programmer you also have to look at what type of eproms (or for what generation of pinball machines) you want to program. Games made in the 1970ies and early 80ies often use eproms that require 25v to program. Not all programmers can handle this, as the USB port is limited in current it can supply. Most programmers do handle the 27 series eproms that use 21v or less.
More recent pinball machines (most created after 1987) use eproms that use 12v or 10v, almost every eprom programmers is able to do that. If you intend to only program 'more recent' machines then your choice in available models is much larger, if you really want to handle the old versions too then look for customer reviews that indicate people were succesful burning these eproms.

I have a TOP2008 programmer. Probably made in 2008 and it only works with Windows XP. It worked in the past on Windows 7, now I've installed a Windows XP virtual machine to be able to use the rom burning software. Because of this I wouldn't recommend it to buy now, but it can handle every type of eprom I need for pinball.

TOP 2008 eprom programmer
My TOP2008 eprom programmer. A cheap chinese programmer. It works, but finding information about it and getting everything to work can be a challenge as almost all documentation about it is in chinese.

Downloading pinball rom images

Rom images for most machines can be downloaded at the internet pinball database. Just search for the specific model of pinball machine you need, and check the downloads in the ROMs section of that machine.
Files for Gottlieb are not publicly available, programmed eproms should be bought for these games.
Williams eproms are also available at Planetary Pinball.

What version to use ? Most of the time you want to upgrade to the most recent version (the highest version number). Often there's a text file included in the download describing the changes, especially in the more recent updates. Only in a few exceptions you want to install an old version (like a prototype rom) if it supports something that newer versions don't anymore.

Zaccaria and Stern (and Sega and Data East as they're basically the same company that evolved) create multiple roms for different languages. With Zaccaria games it's usually a separate file to download. Stern display romes usually includes all the language files in one download file. A letter in the filename indicates what language the rom is for (A = English, F = French, G = German, I = Italian, L = Spanish), you only have to use the file for the language you want. You should always upgrade both the cpu and the display rom to the same version.

What eprom size to use

That questions often comes up. What specific eprom do I need for game xxx ?
The answer to that question is not always straightforward. You can't say that all Bally -17 or all WPC games use the same eprom. Usually there aren't many possibilities, but exceptions are always possible. The old boards can be configured (using jumper wires) to handle different eproms. You have to see what is installed, and if you want to use another type of eprom you need to physically solder jumper wires to the board sometimes.
From 1987 on (starting with Sys11) you have to look at the size of the file you want to write. The boards were created in such a way that they can handle eproms of different sizes. You can't just look in the manual to see what eprom type to use. Manuals are often generic and only indicate the maximum type of eprom the board can handle. The game specific manual may indicate what size of eprom the game shipped with, but an update can always require a larger size.

The answer to the question is: check the configuration of your board (what eprom is installed now) and what size does the downloaded image have ? That last part is the most important: each type of eprom has a maximum size, and the eprom needs to be large enough to fit the image you want to burn. Most eprom burner software will just write what they can to the eprom, and not give an error if you try to write a file that's too large to fit on a chip.

Sometimes you can use a larger eprom. This depends on the configuration of the board (can it handle larger types) and only works if the larger eprom is pin compatible with the original intended eprom.
A 2732 for instance is pin compatible with a 2716 and can be used as an alternative when the original size is hard to find. You burn an image double the size of the original. Create this large file by copying the file onto itself. In a command window use the copy command:
to create a gamerom twice the size of the original rom.

If you do want a general indication of what eproms are used in what types of pinball machines:
27C040 was often in the cpu on WPC games. The very early (alphanumeric) WPC games used a smaller eprom, the last WPC95 games the larger 27C080.
Data East / Sega often uses 27C512 on the cpu board (Stern use the larger 27C010) and two 27C040 on the display board.
Bally-17 and -35 and Stern-100 and -200 use the 2716, 2732 and 2532 eproms.

old Bally and Stern pinball eproms
Various old eproms as used in the first generation electronic Bally and Stern pinball machines.

Using an eprom programmer

Each type of programmer will have it's own version of software. All programmers offer the same functionality:

  • Verify blank eprom
  • Select eprom type
  • Load image from disk
  • Burn image to eprom
  • Read eprom
  • Verify eprom to image
  • Save image to disk

Take care of the orientation of the eprom when you insert it in the programmer - one side has a notch, indicating pin 1.
Inserting an eprom in a programmer is easier than inserting it in the socket of a pcb. A programmer usually has a special ZIF socket: pull a lever up and it opens up so you can insert the eprom without putting any stress on the legs, put the lever down to lock the eprom into place.

ZIF socket of an eprom programmer
Inserting an eprom in the ZIF socket. Always check the orientation of the notch !

Verify blank eprom

Before an eprom can be programmed, it must be completely blank. This verification reads the contents of the whole eprom and checks that all bits are set to 1 or FF (in hexadecimal). Eproms that fail this test can't be programmed, you need to clear them completely first (some more time under the UV lamp). With the UV light all the bits are set to '1', and programming the chip means that some bits are selectively set to 0.

Select eprom type

Before you can program an eprom you have to let the software know what type it is. Most programmer softwares have a large catalog with the settings all the specific eproms. Here you need to specify the exact type like it's imprinted on the eprom, not just the type but also brand and speed. Try to select what matches most the eprom you want to program.

I noticed on my programmer there are sometimes errors in the software, especially with the very old types of eprom. For programming a 20C040 it usually doesn't matter what brand I select, it does it correct.
If an eprom fails to program, you can download the datasheet and inspect (and correct) the settings. There are still many sites where you can download the datasheet, best is to google for 'datasheet' and the specific eprom type. You will get results like this TMS2532 datasheet: a pdf file with very technical details. Verify the information in the datasheet with the settings you have in your programmer, especially settings about pulse width and delays (values in nanoseconds). Mismatches in delays can cause your programmer to fail, it'll write part of the eprom and then give an error.

Load image from disk

Before you can write an image to the eprom, you have to load it into the memory of your software.

Burn image to eprom

This is the actual writing of the loaded image onto the eprom. Let's hope everything goes well, if it fails you need to figure out why. Usually the software will do a verify if the eprom is clear before it starts the write operation. Failures can happen for a lot of reasons: the eprom is physically bad, the settings are incorrect, the voltage supplied is not enough. Some of the old eproms need 25v (more recent eproms 21v) and not all programmers can handle the higher voltage.

Read eprom

This functionality reads the contents of the eprom into the software. Useful if you have an eprom and don't know what version is on it, or if you want to save the contents of it to a file.
If you have eproms and don't know for what machine they are for, the Rom identification at is a useful website. You can upload the rom files there and it will compare it to a very large set of known arcade and pinball eproms.

Verify eprom to image

This will read the contents of the eprom and compare it to the image loaded in the software. This step is often done automatically after burning an eprom, to verify the write was successful. You can also use it to check a programmed eprom if it matches a file you have.

Save image to disk

Useful if you have programmed eproms that you want to store the contents of. You read the eprom into the software memory, and store that then as a file on disk.

Programmers often have other useful features:
Calculating the checksum of an eprom. A checksum is number that's calculated based on the contents of an eprom. If you want to verify if the contents are completely identical (or if a write was successful) you can just compare the checksums, even if 1 bit is different then the checksum will also be different.
Eprom / IC detection: insert an IC and the eprom will try to detect what type it is (and even verify if it works correct).