What's a guy gotta do to convince you to buy him The Epyx Bundle from Steam with no strings attached?
#steam #epyx #atarilynx #commodore64 #DOS #NES #segamastersystem #segagenesis #atari2600 #zxspectrum #cpc #retrogaming #videogames
What's a guy gotta do to convince you to buy him The Epyx Bundle from Steam with no strings attached?
#steam #epyx #atarilynx #commodore64 #DOS #NES #segamastersystem #segagenesis #atari2600 #zxspectrum #cpc #retrogaming #videogames
Room Raider, work in progress game for #Atari2600 console https://youtu.be/MnyajnP-Y6A #atari #retrogames
Updated version of Dead Planets and new Oh No! More Dead Planets, two games for #Atari2600 console https://forums.atariage.com/topic/381972-dead-planets-v11-oh-no-more-dead-planets/ #atari #retrogames
Frontiers, batariBasic work in progress game for #Atari2600 console https://forums.atariage.com/topic/381959-frontiers-game-style-vanguard-river-raid-1942-and-other-classics/ #atari #retrogames
A simple breakout to add (some) Atari 2600 style controllers to an Arduino Uno.
Note: Doesn't really do paddle controllers though...
https://diyelectromusic.com/2025/05/22/atari-2600-controller-shield-pcb-design/
Atari 2600 Controller Shield PCB Build Guide
Here are the build notes for my Atari 2600 Controller Shield PCB Design.
Recall from my design notes that this version doesn’t deal with paddles very well.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to Arduino, see the Getting Started pages.
Bill of Materials
The above photo shows the 9-pin D-type connectors from various angles. The spacings are as follows:
Build Steps
It doesn’t matter much whether the pin headers or D-type connectors are soldered first.
However, if using header sockets as shown in the photo above, then it makes more sense to fix these first as they need to be soldered on the same side as the D-types, but aren’t as tall.
Testing
I recommend performing the general tests described here: PCBs.
A simple digital and analog read sketch can be used to quickly check the functionality.
For joysticks:
#define PINS 10
int p[PINS] = {2,3,4,5,6,8,9,10,11,12};
void setup() {
for (int i=0; i<PINS; i++) {
pinMode (p[i], INPUT_PULLUP);
}
Serial.begin(9600);
}
void loop() {
for (int i=0; i<PINS; i++) {
Serial.print(digitalRead(p[i]));
Serial.print("\t");
}
Serial.print("\n");
delay(200);
}
For paddles:
Note: this will require an additional resistor to GND from the corresponding analog input, for all paddles used. If a 1M resistor is used there is a more linear response, but the readings will only vary between 512 and 1023 (or thereabouts) corresponding to a read voltage of between 2.5V and 5V.
void setup() {
Serial.begin(9600);
}
void loop() {
for (int i=0; i<4; i++) {
int aval = analogRead(A0+i);
Serial.print(aval);
Serial.print("\t");
}
Serial.print("\n");
delay(100);
}
For keypads:
Note: this requires the keypad library which should be available by default with the Arduino environment.
#include <Keypad.h>
const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char hexaKeys[ROWS][COLS] = {
{'3','2','1'},
{'6','5','4'},
{'9','8','7'},
{'#','0','*'}
};
// Port 1
byte rowPins[ROWS] = {11,10,9,8};
byte colPins[COLS] = {12,A0,A1};
// Port 2
//byte rowPins[ROWS] = {6,5,4,3};
//byte colPins[COLS] = {2,A2,A3};
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
Serial.begin(9600);
}
void loop(){
char customKey = customKeypad.getKey();
if (customKey){
Serial.println(customKey);
}
}
PCB Errata
There are the following issues with this PCB:
Enhancements:
Closing Thoughts
As is becoming customary, it appears I can’t produce a PCB without at least one annoying issue. Even one as simple as this I managed to get the wrong sense for the connector for v0.1 and didn’t notice until the signals weren’t working!
The paddle issue was really just my misunderstanding (misreading) of the documented paddle circuit!
But pleasingly the Arduino built-in Keypad library “just works” with the keypad controllers and this simple version of the Arduino shield
Kevin
Atari 2600 Controller Shield PCB Design
This is an Arduino Uno shield format PCB for hooking up two Atari 2600 style controllers to an Arduino.
Note: this iteration of the design doesn’t really do the paddles very well, but it works fine for joysticks and keypad controllers.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to Arduino, see the Getting Started pages.
The Circuit
This is a fairly straight-forward mapping of an Atari controller’s pins to Arduino IO pins.
The most comprehensive description I’ve found of what the 9 pins on the D-type connector are is the following. And there are a few other useful references too:
On driving them with an Arduino, the following are relevant:
Standard Joysticks
The buttons are pulled high, connected low when the button is pressed. This makes reading the joystick and paddle buttons relatively straight forward.
Paddles
The analog paddle inputs are a little more complicated. On first inspection, I thought they were effectively potentiometers across 5V and GND, but actually it turns out they are 1M variable resistors across 5V and the wiper. This means that reading them is a little more complex.
To read them using a simple ADC method, it is possible to include a second resistor between the controller pin and GND, creating a voltage divider that can then be read via the ADC. The smaller the second resistor, the more of the voltage range will be covered.
But it isn’t a typical voltage divider. As R1 changes, the percentage of R2 changes too, so whilst a small R2 gives more of the voltage range (closer to 0V up to 5V), the change is less linear.
Here are some graphs showing the output voltage profile for different R2 values.
So 1M (which of course matches the resistance already in the paddle controller pot) gives the most linear response, but it has the following properties:
The actual Atari circuit appears to have a 1.8K resistor into the microcontroller pin with a 68nF capacitor to GND (follow the circuit from pins 5 and 9 here). From some of the above links for using paddles with an Arduino it appears the basic algorithm for reading the paddles is to time the charging and discharging of the capacitor.
There is no facility on this version of the board to allow for the addition of a capacitor and a resistor. It is possible to include a resistor to GND in some cases, but really the use of this board with paddles is quite sub-optimal!
Keypads
When used with a keypad, the four direction buttons are mapped to rows, and the two paddle inputs (pulled up in the controller to 5V) and trigger is used for the columns.
Arduino GPIO
From all this, we can derive the following table and map that over to Arduino IO pins. I’ve added two 9-pin connectors, so they are mapping onto two sets of Arduino pins.
Atari PinJoyStickPaddlesKeypadArduino port 1Arduino port 21UPROW11162DOWNROW21053LEFTTRIGGER AROW3944RIGHTTRIGGER BROW4835PADDLE BCOL1A1A36TRIGGERCOL312275V5V5V8GNDGNDGND9PADDLE ACOL2A0A2As A0-A3 can be used as either digital or analog inputs this makes decoding the controllers particularly easy (paddles not withstanding) once it is known what kind of controller is attached.
PCB Design
The PCB design is quiet straight forward. The IO pins have been chosen for easy routing. I’ve used footprints for the two controller connectors that matched the PCB-mount connectors I’ve been able to pick up fairly cheaply.
All unused Arduino IO pins have been labelled on the board for ease of use. The following are all available:
This leaves options for UART, I2C, digital and analog IO.
As already mentioned, no provision has been included for sensible decoding of the paddles. That will have to come in a future version.
Closing Thoughts
In the first iteration of this board, although it is a pretty straight forward board, I’d managed to use the footprints for the socket version of the 9-pin connectors and not the pins version.
This meant that when I got the boards back, the pins were all back to front!
I had a quick re-spin of the board, including swapping the pins associated with UDLR over so that routing remained fairly trivial.
If I’d looked at the 3D version of the board prior to sending it off, I might have noticed. Oh well.
The whole thing with the paddles was because I’d mis-read the schematic for the controllers and made the assumption that they were wired between 5V and GND in a common potential divider format.
It wasn’t until the boards came back and the paddles weren’t working that I looked a bit deeper and spotted the misunderstanding. Oh well.
Kevin
@rc2014 They work :)
Now to do something properly with them!
Although I might just have to fire up Atari Basic just for the experience of how bad it is...
Treats to Cats, work in progress game for #Atari2600 console. Cats are Atari and Sid, guest stars of ZeroPage Homebrew streams https://forums.atariage.com/topic/381727-treats-to-cats/ #atari #retrogames
Contractors, new Contra inspired work in progress game for #Atari2600 console. Early demo: https://forums.atariage.com/topic/381850-contractors-contra-atari-2600-wip/ #atari #retrogames
Spice Harvester, new #Atari2600 Dune inspired game: https://idiotboxgames.bigcartel.com/product/spice-harvester Gameplay https://youtu.be/6_bgx3uAIMQ #atari #retrogames #dune
[RETRO V.G. ADS] (US) Star Wars - The Empire Strikes Back (1985) (Atari 2600)
YT : https://www.youtube.com/@johnnygameover/shorts
#advertisingvideogame #starwars #empirestrikesback #atari2600 #videogame #retrogaming #adstv #ads #cm #games #gaming #atarigames #us #1985
Kennt jemand ein Programm / eine App mit der man Spiele für den Atari 2600 / Atari 7800 usw vernünftig verwalten kann? #Atari2600 #Atari7800
Batman Returns, batariBasic game for #Atari2600 console https://forums.atariage.com/topic/381782-batman-returns-for-atari-2600-game-in-development/ #atari #retrogames
Now available Murple for #Atari2600 console. Download: https://jcuga.github.io/murple/ Gameplay: https://www.youtube.com/watch?v=blbiH17-Ecc #atari #retrogames
Sea Control First Attack, new #Atari2600 console game. Gameplay: https://youtu.be/o32V1uLZ57Y Download: https://artefacto.itch.io/sea-control-first-attack #atari #retrogames
Heute morgen Runde #digdug und #spaceinvaders für #atari2600 mit 2 Kindern. Superfun einfach immer noch. Ich liebs, dass diese Spiele 10 Min gehen und man dann sagen kann: jo, danke. Oder tagelang darin versacken. Der Original-Joystick heißt bei meinen Kindern nur noch "Gräulstick", der ist echt schwerfällig. Bevor das Schulprojekt startet, brauch ich n moderneren. #retrogaming
video.thepolarbear.co.uk/w/shNTFvra7JaowLRJSStPZc
ICYMI this is the VOD of the short stream I did earlier. You can skip the first section as it is mostly me moaning about my dental surgery and IRL.
The rest of the video though is about PCBs for the #ZXSpectrum #AtariST and #Atari2600 and upcoming projects.
#Retro #Electronics
¿Recuerdas Demon Attack para la #Atari2600 #Intellivision y #Videopac?
Este juego de disparos de 1982 de Imagic, fue muy popular en su época.
En él, los jugadores deben defender su planeta de una invasión de demonios. ¿Lo jugaste? #DemonAttack #Atari2600 #VideojuegosClásicos