N.B. this guide has been tested with the Raspberry PI model B+, Raspberry PI 2 only.
When starting this build I wanted to keep the exact dimensions of the original Atari VCS 2600 but after a lot of fiddling the dimensions went out of the window and I just ended up modifying Michael Zenner’s Raspberry PI Atari case which I downloaded from Thingiverse.
To achieve emulation, I used the brilliant Stella emulator software which is very easy to install using the ‘sudo apt-get install stella‘ command from the terminal in Raspian.
As with all consoles, a power and reset switch is required, I knew it was possible to use python to script a simple power/reset button using the PI’s GPIO pins so I decided to use that approach here.
I found the following useful although there are lots of links online regarding adding these types of buttons to Raspberry PIs.
To try and stay in line with the Atari VCS 2600 look and feel I needed something that was similar if not the same as those distinctive, silver sliding switches that were unique to the console and after a little thought and a bit of ebaying I found these momentary flick switches which, whilst not perfect looked as close as I thought I was going to get to the original and they could be used to turn the unit on or off and also for a few of the other console functions.
Anyone who’s ever played one of the first Atari VCS 2600 consoles will be aware that it had six silver switches but later on through its life it was redesigned to have only four, which suited my needs and the case design perfectly. I was able to use two switches for on/off and console reset and the other two switches for game select and game reset. To do so I modified another python script to accommodate the game select and game reset functions and had them start at boot up in much the same way as the on/off and reset scripts. For this I found the following useful.
My soldering is pretty poor but to get all the scripts to run the switches had to be wired to the GPIO pins on the Raspberry PI and then soldered to the switch connects, so I soldered a ground wire to the middle connect of one of the switches and another wire on the end connect of the same switch and repeated this process so I had 3 switches like this. On the fourth switch I soldered 2 wires to the middle connect and 1 on the end connect. The wires that were soldered to the end pin on the switches would be connected to the individual GPIO pins on the PI (the switch with 2 wires on the middle pin would later be used to connect 1 of the wires to the ground on the Raspberry PI (pin 39) and the other wire to connect to the ground wire (the wires soldered to the middle connect) on the next switch and then the next, and the next and so on). once all the soldering was done I went over the connects with some hot glue so that the wires wouldn’t break from the switch connects.
Because the PI is completely enclosed by the case I had to find a way of relocating the USB ports so that the user is able to plug the joysticks in. Originally I wanted to move the ports so they would be on either side of the back of the case (behind the console dash board) but this would have meant resizing the depth of the dash board to accommodate both switches and USB ports occupying the same space which would have made the case quite a bit bigger than it currently is so I opted for the much easier option of having both ports at the bottom right rear of the case.
Then, as you do, I ordered a right angle female Type A dual USB connector, two single male Type A USB connectors and some male to male jumper wires.
With a little bit of cunning I was able to attach the jumper wires to the dual USB by snapping off the pins from one end of the wires so that the remaining part of the metal pin was still enclosed by the plastic surround and then wedged the pins coming out of the dual USB connector between the plastic surround and the remaining piece of metal within.
With the male USB connector I was able to bend the pins so they were almost straight and slide the jumper wire pin into the hole above the USB pin so that the USB pin slid into the plastic casing on the jumper wire which made a solid connection unlike those on the dual USB. I then went over all the connections with my trusty glue gun to hold them in place so there was thankfully no soldering necessary here.
As many older consoles used to, the Atari VCS 2600 runs games on cartridges and to emulate this I opted for the approach used on Daft Mike’s mini NES. I used NFC tags (13.56MHZ RFID MIFARE Classic 1K Coin Tag 25mm with an adhesive back) to store the name of the game ROM to be played and enclosed them in an imitation 3D printed cartridge.
To get this to work I installed LibNFC got a friend to write some source code to read from and write to the tags and connected A PN532 NFC read/writer to the Raspberry PI GPIO pins (1, 6, 8 and 10) which would then be used to read the tag and then call the command to run the required game (there are a few tutorials on how to do this online – see the links page).
N.B. The jumper switches on the reader were set as below because I used the UART connection.
I was using Stella for emulation instead of the excellent Retropie software so I wanted some way of making the console boot up in its own unique way but still make it obvious that it was powered by a Raspberry PI. I found this thread to suppress most of the scrolling boot up text that normally appears and created a custom boot-up screen using a character from the Invaders from Space font set which I felt captured the feel of the old school Atari platform.
After printing all the parts of the case and having acquired all the necessary electronics, the front panel was then super glued into the groove at the front of the base. I recommend doing your glueing on the inside so that it cannot be seen when it’s all been assembled.
Then the PI’s power, HDMI and earphone sockets can be lined up with the holes in the base model and seated in the base by pushing it down into the case. The plastic retainer clip can now be used to secure the PI in place.
once the PI is in place the assembled USB ports can be connected by slotting the single male USBs into the Raspberry PI USB ports and positioning the dual female USB connector into the space at the back of the case. I had to trim the excess hot glue from the dual USB connector so that it would fit nice and snug.
To connect the switches to the PI I used GPIO pin numbers 5, 7, 11 And 40 for the power, reset, game select and game reset switches and lined them up from left to right in the holes in the dashboard removing all the supplied nuts and washers from the switches and mounting them securely using just one of the nuts. Once the switches are in place and individually tested they can then be connected in a daisy chain fashion by their ground wires (the ones on the middle connects of the switches) GPIO pin 39 was used as the ground to all the switches starting with the switch with 2 ground wires.
Now the cartridge tray can be super glued in below the slot for the card reader.
Then the card reader can be connected to the Raspberry PI via the UART using the GPIO pins 8, 10, 1 And 6 To connect to the PN532s RXD, TXD, VCC and Ground Pins respectively.
One of the longer edged ends of the reader should then be slotted in the small grooves at the top of the cartridge slot in the dashboard (I would advise having the side with the circuitry facing upwards so it doesn’t obstruct the cartridge being inserted later on)
The other end can be sat on top of the ridge at the back of the base just above the HDMI, headphone and power holes (highlighted by the red arrow in the picture below) so the reader is secure when the dashboard is put into place.
Once the glue has dried the dashboard can be clipped onto the base and the rib cage can be put into place.
Finally the dashboard front panel can be glued (if you like) into place over the switches so that it keeps the cartridge tray secure.
Now the case is complete the cartridges can be printed, these come in two parts and are super glued together to enclose the NFC tags from where the game is launched. Peel off the 3M film and stick or glue your blank tag into the round recess inside the cartridge and then glue the other side of the cartridge in place lining up both pieces with the guide holes.
To write game cartridges I had to create a boot cartridge so that I could power up the system into X Windows then I was able to disarm the custom boot screen and access the command line. The steps are as follows:
N.B. If you know the IP address of your PItari VCS you can SSH in and start at step 5 below.
1. Plug a keyboard into one of the USB ports, insert the boot cartridge and power up the PItari VCS, wait for X Windows to launch (about 1 min on a model B+ PI).
2. Once X Windows is running, open a terminal window and run the addcart.sh script from the /home/pi/ directory.
3. Then reboot the PItari VCS using the reboot flick switch or the sudo reboot command.
4. Next time the PItari VCS boots up it boots into command line mode. After the second ‘GPIO.setup(5, GPIO.IN, pullp_down = GPIO.PUD_UP)’ message is displayed press enter to get the command prompt
5. Type the following command from the /home/pi/ directory.
nfcwrite stella GAMENAME.EXT
Where GAMENAME.EXT is the name of the ROM and it’s extension (e.g. nfcwrite stella Combat.bin)
6. Hit enter and the following message should be displayed showing the status of the write operation which is hopefully a success.
Wrote to block 1 successfully
Wrote to block 2 successfully
7. Once the cartridge is written run the cartadded.sh script from the /home/pi/ directory.
8. Any ROM images should now be copied or FTP’d into the /home/pi/ directory.
I cannot provide any ROM images or supply any information about where to obtain them and must point out that it is illegal to use ROM images without owning the original ROM chips (usually in cartridge form for the Atari VCS 2600).
However, there are several ways to create ROM images that can be used with the PItari VCS from the original cartridges but when doing so please ensure you name your ROMs with names that are under 15 characters because the nfcwrite command will not write commands any longer than that.
Now you are ready to play your Pitari VCS. Plug the HDMI cable into the PI and insert a joypad, keyboard or joystick into the USB at the rear and insert the new cartridge into the cartridge slot. Boot up the console by plugging the power cable in, you will see the Raspberry logo in the top left of the screen and a few lines of log information after a few seconds the splash screen will appear for a short while and disappear, the screen will remain black for up to 25 seconds (on a PI model B) and then the inserted game should boot up. If the game does not boot try taking the cartridge out, turning it 180 degrees and re-inserting it. Once the game boots up the game select switch (on my console this is switch on the right) will cycle through the different modes of game play and the game reset switch (the second switch from the right on my console) will start the selected game mode.
Why not have a look at the PItari VCS in action – check out the video clips below:
- PItari VCS Cartridge swap (no reboot required)
- Using the PItari VCS game select and game start switches
- Rebooting the PItari VCS
- Shutting down the PItari VCS