I’ve always wanted a re-programmable Atari 2600 cart for some time now. There are already some on the market, including the Harmony Cartridge and the older Cuttle Cart, however these are expensive and overly complex. Plus building is more fun than buying.
Here’s are my goals for the ideal cart:
- Holds only a single game at a time (avoiding the “tyranny of choice” created by a multicart).
- Re-programmable via USB.
- Supports all popular bankswitching methods.
- Fabricated to a custom board.
Traditionally these carts use SRAM or flash chips in place of the mask ROM, however I wanted evaluate weather an Arduino could be used to emulate the mask ROM and associated logic. I testing how fast the pins could iterate bytes from an array, measuring the cycles from a Duemilanove board with a logic analyser (see below image).
Arduino’s DigitalWrite() is SLOOOOOW. However, going lower level in AVR C I could read from PROGMEM (flash memory) and write directly to the ports with a more reasonable speed. Yet, this still didn’t satisfy my calculation for a cycle speed based on the 2600’s clock speed.
I’m now waiting on an order of a Maple Mini clone (STM32 based development board) that runs at 72Mhz (compared to Arduino Duemilanove’s 18Mhz). Whilst the STM32 has a different architecture to the AVR series, I have good confidence it will be fast enough as I believe it’s the same chip family as that powering the Harmony Cart (ARM 7).
To help me breadboard the build I sent a breakout board for the 2600’s cartridge port to fabrication at OSH Park. You can find the project here: https://oshpark.com/shared_projects/mh5CIxMW
This is my first PCB so am excited to see how it turns out. Setting up the edge connector and PCB edge cut to fit a standard Atari 2600 cart case was painful to get accurate, especially as I was learning KiCAD as I went, but I think I got it right.
Next steps: Analyse the data response speed on real hardware (not just theoretical speeds) to get a clear target for the build, then build a simple emulation of Combat on STM32.