Atari Generation 1 MPU, based on FPGA
Hardware version v1.x
Software Version 0.3.3
user manual
v1.1 04.09.2026
German version: AtariFA_HWv1_x_Bedienungsanleitung.html. French version: AtariFA_HWv1_x_manuel_utilisateur.html. The chapter numbering is the same in all three.
By using AtariFA it is possible to damage your pinball machine. As this is a private project with NO commercial interest the author accepts no liability for any damage that may arise by using AtariFA!
AtariFA replaces the MPU of an Atari Generation 1 pinball machine with an FPGA board. It emulates the MC6800 processor, provides the ram and the game roms, and rebuilds the TTL logic around them - the address latches, the display multiplexer, the switch matrix decoders, the lamp drivers and the solenoid drivers.
The FPGA is a Cyclone 10 LP (10CL006) on a piggy-back board that sits on the AtariFA PCB. The PCB carries the original Atari edge connectors, so the board goes in where the Atari MPU came out.
Five games are supported and all five are in the FPGA at the same time:
The Atarians, Time 2000, Airborne Avenger, Middle Earth and Space Riders. Which one runs is set with three DIP switches - there is no SD card and nothing to download per game. Free play is a fourth DIP switch, not a different rom set.
What do you need?
That is all. No SD card, no card reader, no battery.
Two things are worth knowing before you begin:
Six of the ten DIP switches are read once, during boot. Changing them while the game runs has no effect. See chapter 4.3.
Credits and high scores are lost when you switch the machine off. That is not a limitation of AtariFA - the original Atari Generation 1 MPU has no battery backup either. See chapter 6.3.
Download the latest FPGA program for AtariFA from lisy.dev
Program the FPGA (chapter 11)
Set 'game select' according to your pinball (Appendix A)
Decide where the sound should come out - option 3, see chapter 4.2.1. For an unmodified machine with its Auxiliary Board in place, leave it OFF
Replace your original Atari MPU with AtariFA
Switch the game ON
Watch the info display for about 5 seconds and check that game select and version are what you expect (chapter 5.2)
Enjoy
There is no 'first boot' procedure and nothing to initialise - the board has no non volatile memory that would need it.
AtariFA has the same edge connectors as the original Atari Generation 1 MPU and goes in at its place. Switch the machine off, pull the original MPU, put AtariFA in, done.
Replaced: the MPU board, including the display driver logic, the switch matrix decoders, the lamp drivers and the solenoid drivers. Those all live on the AtariFA PCB now - 12 ULN2003A for the lamp matrix, 20 IRL540 MOSFETs for the solenoids.
Still needed: the Atari Auxiliary Board. Two things come from there and are not rebuilt on AtariFA:
The coin door counter and lockout coils are driven through the Auxiliary Board as well.
So: leave the Auxiliary Board in the machine.
Next to the original Atari edge connectors the PCB carries two 25 pin 'box connectors'. They bring the same signals out on a connector that is easier to probe, for testing on the bench without a playfield attached.
The box connectors also carry the four lamp strobes, made on the board by four P-channel MOSFETs. Those are for test LEDs only - they are not built to drive the 20 V lamp matrix of a real playfield. On a machine the strobes come from the Auxiliary Board.
The board has its own fuse holders for the solenoid supply. Use 2 A slow blow.
Two of the twenty solenoid drivers, Q14 and Q18, are not fitted - depending on the game those outputs do not exist on the original either. There is simply no MOSFET there, and the game cannot drive them anyway.
AtariFA has ten DIP switches in two banks: a bank of four and a bank of six.
Throughout this manual, and on the info display, a switch that is 'ON' counts, and switch 1 of a bank is always the one that counts 1.
| DIP | Function | Weight |
|---|---|---|
| Dip1 | game select, bit 0 | 1 |
| Dip2 | game select, bit 1 | 2 |
| Dip3 | game select, bit 2 | 4 |
| Dip4 | free play - ON = active | - |
The three game select switches give a number from 0 to 7. Numbers 0 to 4 are the five games, see Appendix A. Numbers 5, 6 and 7 are not used and fall back to Middle Earth - so a wrongly set switch never leaves the board without a game.
Free play is described in chapter 7.
Default setting is all 'OFF' - that is the right setting for a standard machine.
| DIP | Function | read |
|---|---|---|
| Dip1 | background music - ON = active | at boot |
| Dip2 | reserved | at boot |
| Dip3 | sound: OFF = Auxiliary Board, ON = on-board amplifier | continuously |
| Dip4 | let FA-Control take over - ON = allowed | continuously |
| Dip5 | lamp dead time, high bit - on its own = timing of the original MPU | continuously |
| Dip6 | lamp dead time, low bit - four steps together with Dip5, only needed if LEDs glow | continuously |
'OFF' - the original path. AtariFA feeds the Atari Auxiliary Board exactly as the original MPU does: the four audio lines and the four volume latch lines. The sound is then made by the Auxiliary Board and goes to the amplifier of your machine. This is the setting for an unmodified pinball.
'ON' - the on-board path. The sound is generated inside the FPGA, filtered and sent to the small amplifier (TDA7267) on the AtariFA PCB. Use this on the bench, or in a machine whose Auxiliary Board audio section is defective. The Auxiliary Board outputs are held in their idle state while this is selected.
This switch may be changed while the game is running - it is read continuously. The sound moves over immediately.
'OFF' - nobody interferes. A plugged in FA-Control module can watch the displays and switches, but it cannot switch anything. This is the setting for normal play, and it is the default.
'ON' - FA-Control may drive the machine. Only then does AtariFA hand over control when asked, and the game is stopped while it does. Everything else is in chapter 9.
This switch is read continuously as well: turning it 'OFF' while FA-Control is in charge takes control away immediately and restarts the game. That is the emergency stop for a test tool that has locked up.
Option 1, 'ON' - background music plays while a ball is in play. The MP3 player on the board plays folder 02 of its memory card in a loop, and pauses again once the ball rests in the outhole and the game is over. Everything about it is in chapter 8.4.
Option 1, 'OFF' - no background music. This is the default, and it is the setting for a machine that should behave like the original.
Option 1 used to belong to an experimental credit/high score save feature that is currently on hold, see chapter 13. From software 0.3.0 on it is the background music switch.
Option 2 is not used. Leave it 'OFF'. It is wired, it is shown on the info display, and it is there for later software versions.
Both switches are read at boot only - see chapter 4.3.
Atari drives the lamps in a time multiplex: four columns are switched on in turn, half a millisecond each. On the original MPU the column is switched at the very moment the new lamp values become valid. Because the column drivers on the Auxiliary Board take a few microseconds to turn off, the wrong lamp gets a very short pulse of current every time — the neighbouring lamp in the same driver group, from the previous column.
On an incandescent bulb you will never notice. LED replacement lamps, however, glow visibly even though they are switched off. This is the well-known effect that LEDs in an Atari "never go fully dark"; the Atari manual describes it as a supposed "keep-alive" circuit, but it is the same thing.
AtariFA therefore switches the column while all lamps are blanked, and then gives the old column a short dead time to decay before the new lamp values go live. How long a column driver needs to turn off differs from machine to machine — it depends on the components and on how much current the lamps of that column draw. The less current, the longer it takes. A column fitted with LED replacement lamps is therefore the worst case. That is why the dead time is selectable, through options 5 and 6 together:
| Option 5 | Option 6 | Dead time | Brightness |
|---|---|---|---|
| OFF | OFF | about 65 µs — default | 21.8 % |
| OFF | ON | about 250 µs | 12.8 % |
| ON | OFF | none — timing of the original MPU | 24.5 % |
| ON | ON | about 400 µs | 5.5 % |
What to set:
Incandescent bulbs in the machine: nothing. The default is right and the switches mean nothing to you.
LED replacement lamps, everything fine: nothing either. The default is enough in most machines.
Single LEDs glow although they should be off: go one step up — first option 6 = 'ON' (250 µs), and only if that is not enough, both to 'ON' (400 µs). Use the smallest step that removes the glow, because every step costs brightness. At 250 µs that is barely noticeable in the machine; 400 µs is clearly dimmer, which is intended and not a fault.
Option 5 = 'ON' on its own selects the timing of the original MPU, glow included. Useful if you want to compare AtariFA against the original board, or if you prefer the original behaviour. Incandescent lamps do not care at all.
Both switches are read continuously, so they may be changed while the game is running — which makes the difference easy to compare on the spot, without a power cycle. A column stays the same half millisecond long in all four positions; only how much of it is reserved for decay changes.
The meaning of the combination changed against software 0.1.7 and 0.1.8. Option 5 alone and option 6 alone still mean what they did; both together used to select the original timing and are now the longest dead time. Which build is running is shown on the info display at power on (chapter 5.2).
If even the longest step (options 5 and 6 both 'ON') changes nothing: then the column turn-off time is not the cause, and turning it up further will not help — half a millisecond of column time does not allow much more than 400 microseconds anyway. There is a second reason that no software can do anything about: the lamp drivers (ULN2003A) pass a residual current of a few microamperes while switched off, and because one column is always powered, that is enough to make a modern LED glow. An incandescent bulb never shows it. The original MPU has the same residual current.
The remedy at the affected socket: a resistor of about 2.2 kΩ (½ W) in parallel with the lamp — it drains the residual current without affecting the lamp in operation. Equally effective: use an incandescent bulb in that position, or an LED replacement lamp with a built-in bleeder resistor ('ghost free').
This is the one thing that catches people out.
The first six switches - the three game select switches, free play, and options 1 and 2 - do not have six wires of their own. They are read through a small 3 x 2 matrix, and that matrix borrows three lines that belong to the lamp drivers. Reading it continuously would flicker the lamps, so it is read exactly once, during the boot phase, before the game starts. Afterwards the three lines go back to the lamps.
So: after changing game select, free play or option 1 / 2, switch the machine off and on again. A change while the game runs has no effect.
The remaining four switches - options 3 to 6 - have their own lines and are read continuously. They can be changed at any time.
Immediately after switching on, and after the internal clock has locked, the board reads the first six DIP switches through the strobe matrix. This takes microseconds; you will not see it. The displays are dark up to this point.
When the DIP read is done the displays come on and show the configuration for about 5 seconds. The CPU is still held in reset during this time - the game has not started yet.
| Display | Shows |
|---|---|
| Player 1 | version of the FPGA program, three digits:
<board> <sub1> <sub2> |
| Player 2 | value of game select, two digits, 00 to 07 |
| Player 3 | the six option switches, option 1 on the left, option 6 on the right
- 1 = ON |
| Player 4 | free play: 1 = active, 0 = not active |
| Credit/Ball | dark |
Everything stands right aligned, the unused digits stay dark.
Example: player 1 showing 033, player 2 showing
02, player 3 showing 000000, player 4 showing
0 is software 0.3.3 on the standard board, running Airborne
Avenger, no options set, no free play.
The leading digit of the version tells you which board
variant you have, see chapter 12. 0 is the
standard AtariFA board.
About two seconds into this window the board says its name over the on-board amplifier - see chapter 8.3.
Use this display. It is the quickest way to see whether the DIP switches are what you think they are, and since six of them are only read here, it is the only place where you can check them at all.
After the info window the CPU is released and the game starts. From here on the displays belong to the game and behave exactly as with an original Atari MPU.
The game roms are inside the FPGA; there is nothing to load and no waiting.
Settings are made exactly as on the original Atari MPU. AtariFA rebuilds the original setting hardware 1:1, it does not replace it with a menu.
The board carries the two banks of 8 programming DIP switches and the rotary 'replay' switch that the original Atari MPU has, at the same place in the address map. Set them following the manual of your pinball machine - AtariFA presents them to the game code exactly as the original does.
Do not confuse these with the ten configuration DIPs from chapter 4. The ten switches configure AtariFA; the two banks of eight and the replay switch configure the game.
In addition there are three push buttons on the board, wired in parallel to the machine: 'Atari Test', 'Coin 2' and 'Start'. They make it possible to run and test the board on the bench without a coin door.
Press the test switch - either the one in the coin door or the one on the board. The game enters its self test, and you can step through switch tests, lamp tests, solenoid tests and displays following the manual of your pinball machine.
Exception: The Atarians. Atari's first game has no documented self test, and it does not react to the test switch. That is not a fault of AtariFA.
When the machine is switched off, credits and scores are gone. The original Atari Generation 1 MPU behaves the same way - unlike later machines it has no battery buffered memory at all.
The PCB does carry a FRAM chip to change that, but the feature is not finished and is switched off in this software version. See chapter 13.
If you want the machine to start without needing coins, use free play - chapter 7.
Switch 4 of the four switch bank, ON = free play active. Remember that this switch is read at boot only, so switch the machine off and on after changing it.
Free play works for all five games. Atari sold the free play version as a different set of roms; AtariFA has those differences built in and overlays them on the game rom when the switch is on. Only 42 bytes differ across all five games, which is why this fits without a second set of roms in the FPGA.
The result is byte for byte the same code the original free play roms contain.
The Atari Generation 1 tone generation, as it sits on the MPU board and the Auxiliary Board:
The game writes to three latches for waveform, pitch and volume, exactly as it does on the original, and AtariFA reproduces the resulting tone digitally.
This is the complete sound of an Atari Generation 1 machine - these games have no separate sound board and no speech.
Set with option 3, see chapter 4.2.1: either the original Auxiliary Board path (switch OFF) or the on-board amplifier (switch ON). Both produce the same tones; they differ in where the analog signal is made.
A note on how the games switch sound off. The game code does not set the volume to zero when a sound should stop - it pulls the 'audio reset' line and leaves the volume latch where it was. AtariFA reproduces that: audio reset freezes the tone generation, which makes the output a constant level, which the Auxiliary Board blocks. If you hear a continuous tone that never stops, you are looking at a wiring problem on the audio lines to the Auxiliary Board, not at a volume problem.
About two seconds after switch-on, during the info display window, the board says "Lisü" over the on-board amplifier. It is a fixed announcement, it plays once, and it tells you that the FPGA is running and the on-board audio chain works.
It always comes out of the on-board amplifier, regardless of option 3 - it is not part of the game sound and never reaches the Auxiliary Board.
If you hear nothing here, check the on-board amplifier and its speaker connection before you look anywhere else.
Since software 0.3.0 the small MP3 player on the board (an 'MP3 mini player' with its own memory card) can play background music while a game is running. It is switched on with option 1, chapter 4.2.3, and it is off by default.
What you put on the memory card. Create a folder
named 02 and put your tracks in it,
numbered:
/02/001.mp3
/02/002.mp3
...
The player plays that folder in a loop, in its own order. There is no per-game selection and no random mode. If you also run a GottFA1_PLuS board, the same card works there.
What happens during play. The board takes its cue from the outhole switch: the music plays as long as no ball rests in the outhole. So it starts when the ball is kicked out at the beginning of a game, and it pauses when the last ball stays down. It resumes where it left off at the next game rather than starting from the beginning.
So that it does not cut out at every ball change, the board only reacts after two seconds. If the ball is kicked out again sooner than that, the music plays straight through; if the bonus count takes longer, it pauses briefly and comes back with the next ball. For the same reason the music starts two seconds into a game and stops two seconds after the last ball.
A tilt does not pause the music right away - it keeps playing until the ball is down. (Up to software 0.3.0 the board followed the flipper relay and stopped on tilt immediately. Only Middle Earth and Space Riders actually have that relay, which is why this changed.)
If no ball rests in the outhole at power-on - because it sits in the shooter lane or on the playfield, say - the music also plays in attract mode. Put the ball in the outhole, or start and finish a game, and it goes quiet again.
The game sound is not affected. Music and game sound are two separate analog paths that only meet at the amplifier. The game tones of chapter 8.1 play over the music; nothing is faded or muted. Set the balance between them with the volume control of the player and the volume of your machine.
If you hear nothing: the switch is read at boot
only, so power off and on after setting option 1. Check that the folder
is really called 02, that the card is in the player, and
that the board reports version 033 on the info display
- 133 or 233 on the two 'dev_open'
boards, chapter 5.2.
Give it time. After power-on the board allows the player five seconds to boot, then talks to it, then waits out the debounce. That adds up to about 15 seconds before the first note. Give up earlier and you will take a working module for a broken one.
If it stays quiet after that while a ball is in play, check the game selection (appendix A) once more - the board reads a different outhole switch depending on the game you set.
The board has a socket prepared for an ESP32-C3 Super Mini. It runs FA-Control - a small firmware that opens a WLAN and serves a test interface in your browser: switch every lamp individually, pulse every solenoid, watch all switches live, write digits to the displays, play sounds.
This is a tool for the bench and for fault finding, not an accessory for normal play. If you plug nothing in, you will never notice this interface - the board behaves exactly as it does without.
This feature is new in software version 0.1.3 and has been tried on a real machine.
A test tool must not be able to interfere with a running game unasked. So two things have to come together:
With option 4 OFF, the web interface says in plain words "control refused - set option DIP 4 to ON", and the game carries on undisturbed. Reading is still allowed: you can follow switch states during a running game without giving anything up.
The game is stopped. The processor is held in reset, and everything - lamps, solenoids, displays, sound - now comes from the web interface. It has to work that way: if the game kept running it would overwrite every lamp you set by hand within a few milliseconds.
The game then starts over. It cannot be paused and resumed. A game in progress is lost, so only take control in attract mode or on the bench.
Three ways, and all three make every output drop and the game restart immediately:
On connecting, FA-Control asks the board what it is made of and configures itself - nothing has to be typed in. AtariFA answers:
| Identification | AtariFA |
| Software version | the same one the info display shows, e.g. 0.3.3 |
| Lamps | 84 |
| Solenoids | 22 (20 playfield + coin counter + lockout coil) |
| Switches | 80 |
| Sounds | 16 |
| Displays | 5 (status with 4 digits, four players with 6 each) |
The numbering follows the board: switches carry the same number as in the game's self test, and solenoids 1 to 20 are the drivers Q1 to Q20 of the schematic, 21 is the coin counter and 22 the lockout coil. Solenoids are the only group starting at 1 - that is how the original counts them and how the LISY protocol counts them. Lamps (0 to 83) and switches (0 to 79) start at 0. (Up to version 0.1.9 the solenoids started at 0 as well; an FA-Control firmware older than 1.16 will therefore fire the wrong coil.)
The ESP32 module simply plugs in; there is nothing to solder. The board powers it - no USB cable is needed in normal operation. You only plug one in to load the FA-Control firmware or to read the boot log. For the initial WLAN setup FA-Control opens its own access point on first start - see the FA-Control documentation for that.
The board has three status LEDs, wired in parallel to the LEDs of the piggy-back board. They are the fastest diagnosis without a logic analyser.
| LED | Meaning |
|---|---|
| D1 | watchdog: lights up and stays lit once the internal watchdog has timed out at least once. Dark is the normal state. |
| D2 | CPU is fetching instructions from rom - blinks slowly, a few seconds per phase depending on the game. Steady, lit or dark, means the CPU is halted or stuck. |
| D3 | the NMI timer runs - blinks at 0.48 Hz, that is a good second lit and a good second dark. This is free running hardware and does not depend on the CPU. |
Read them together:
Everything you need to get the software onto the board is described on my website, and it is kept up to date there:
You will find there the latest FPGA program for download, which programmer software you need, how to install the driver for the USB Blaster, and how to program the FPGA.
Make sure you take the AtariFA version and, if there is more than one, the one for your board variant - see chapter 12. The board variant is the leading digit of the version on the info display.
There is no SD card image for AtariFA. The game roms are part of the FPGA program.
The same design runs on three piggy-back boards. The FPGA program is not interchangeable between them - the pin assignment differs, and the third one carries an FPGA from a different family.
| Variant | Board | FPGA | Version starts with |
|---|---|---|---|
cyclone_10_pcb |
AtariFA PCB v1.x with the lisy.dev Cyclone 10 piggy-back board | Cyclone 10 LP | 0 |
cyclone_10_dev_open |
AtariFA PCB v1.x with the 'dev_open' Cyclone 10 board | Cyclone 10 LP | 1 |
cyclone_IV_dev_open |
the same 'dev_open' board, but populated with a Cyclone IV | Cyclone IV E | 2 |
The info display tells you which program is running: the first of the three version digits on player display 1 is the board number. If you loaded the wrong one, the displays will most likely stay dark or show nonsense - check that digit first.
Apart from the pin assignment all three are identical, with two small
differences on the piggy-back board itself: the dev_open
board has its reset switch and all four of its status LEDs on the
piggy-back board (the fourth is a spare and stays dark), and it brings 3
instead of 8 debug lines to the logic analyser header. The two
'dev_open' versions differ only in the FPGA fitted and in two pins that
sit elsewhere on the Cyclone IV.
Test status. Only cyclone_10_pcb has
been played on a machine so far. cyclone_10_dev_open has
been running on the bench since software 0.3.0 - boot, info display and
the MP3 player are confirmed there, everything else depends on the
wiring to the machine and is untested. cyclone_IV_dev_open
has been built but has never run on hardware.
This is on the PCB, wired, and not used by this software version. It does nothing, and it does no harm - the FPGA holds it in a safe idle state.
Switches of the 4 switch bank. Dip4 of that bank is free play and is not part of the game number.
| No | Dip1 | Dip2 | Dip3 | Game | Year |
|---|---|---|---|---|---|
| 0 | off | off | off | The Atarians | 1976 |
| 1 | on | off | off | Time 2000 | 1977 |
| 2 | off | on | off | Airborne Avenger | 1977 |
| 3 | on | on | off | Middle Earth | 1978 |
| 4 | off | off | on | Space Riders | 1978 |
| 5-7 | – | – | – | not used, falls back to Middle Earth |
All five run with free play as well (chapter 7).
The Atarians has no self test - see chapter 6.2.
The ten configuration switches
bank of 4 bank of 6
1 game select bit 0 (+1) 1 background music read at boot
2 game select bit 1 (+2) 2 reserved read at boot
3 game select bit 2 (+4) 3 sound path live
4 free play, ON = active 4 FA-Control allowed live
5 lamp dead time \ live
all four read at boot only 6 lamp dead time / live
Background music, option 1: OFF = off (standard) ·
ON = the MP3 player plays folder 02 while a ball is in play
(chapter 8.4)
Sound path, option 3: OFF = Auxiliary Board (standard) · ON = on-board amplifier
FA-Control, option 4: OFF = nobody interferes (standard) · ON = the ESP32 test tool may drive the machine (chapter 9)
Lamp dead time, options 5 and 6 together (chapter 4.2.4) — against glowing LED replacement lamps, use the smallest step that works:
| Option 5 | Option 6 | Dead time | Brightness |
|---|---|---|---|
| OFF | OFF | about 65 µs (standard) | 21.8 % |
| OFF | ON | about 250 µs | 12.8 % |
| ON | OFF | none - timing of the original MPU, LEDs glow as on the original | 24.5 % |
| ON | ON | about 400 µs, visibly dimmer | 5.5 % |
If it still glows at 400 µs, it is not the software - chapter 4.2.5.
After changing a switch that is read at boot: power off, power on.
The info display, first 5 seconds after power on
Player 1 0 3 3 version, first digit = board variant
Player 2 0 2 game select (Appendix A)
Player 3 000000 options 1..6, left to right, 1 = ON
Player 4 0 free play, 1 = active
Credit (dark)
LEDs: D1 watchdog (dark = good) · D2 CPU running (blinks slowly) · D3 NMI timer (blinks ~0.48 Hz)
No credits or scores are kept over a power cycle - as on the original Atari MPU.