AtariFA

Atari Generation 1 MPU, based on FPGA

Hardware version v1.x

Software Version 0.3.3

user manual

ralf@lisy.dev

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.

Table of contents

Important remark

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!

1. Introduction

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:

2. Quickstart

  1. Download the latest FPGA program for AtariFA from lisy.dev

  2. Program the FPGA (chapter 11)

  3. Set 'game select' according to your pinball (Appendix A)

  4. 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

  5. Replace your original Atari MPU with AtariFA

  6. Switch the game ON

  7. Watch the info display for about 5 seconds and check that game select and version are what you expect (chapter 5.2)

  8. Enjoy

There is no 'first boot' procedure and nothing to initialise - the board has no non volatile memory that would need it.

3. Installation

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.

3.1. What AtariFA replaces and what it does not

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.

3.2. The box connectors

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.

3.3. Fuses

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.

4. Dip Switch Settings

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.

4.1. The 4 switch bank: game select and free play

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.

4.2. The 6 switch bank: options

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

4.2.1. Option 3 -> where the sound comes out

This switch may be changed while the game is running - it is read continuously. The sound moves over immediately.

4.2.2. Option 4 -> let FA-Control take over

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.

4.2.3. Option 1 -> background music, option 2 reserved

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.

4.2.4. Options 5 and 6 -> dead time for the lamp columns

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:

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).

4.2.5. If the glow stays

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').

4.3. Six of the ten DIPs are read once, at boot

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.

5. Boot sequence

5.1. Phase 1: reading the DIP switches

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.

5.2. Phase 2: the info display

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.

5.3. Phase 3: program execution

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.

6. Game settings and self test

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.

6.1. The programming DIP banks and the replay switch

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.

6.2. The self test

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.

6.3. Credits and high scores are not kept

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.

7. Free play

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.

8. Sound

8.1. What is rebuilt

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.

8.2. The two audio paths

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.

8.3. The boot announcement

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.

8.4. Background music from the MP3 player

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.

9. The FA-Control interface (ESP32)

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.

9.1. The permission: option 4

A test tool must not be able to interfere with a running game unasked. So two things have to come together:

  1. The ESP32 module actively asks ("I would like to take over").
  2. Option DIP 4 is ON.

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.

9.2. What happens while it has control

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.

9.3. How control is handed back

Three ways, and all three make every output drop and the game restart immediately:

9.4. What the web interface learns from the board

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.)

9.5. Connecting it

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.

10. The status LEDs

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:

11. Programming the FPGA

Everything you need to get the software onto the board is described on my website, and it is kept up to date there:

https://lisy.dev/documentation-01.html

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.

12. Board variants

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.

13. Not implemented yet

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.

Appendix A 'game select'

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.

Appendix B Quick reference

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.