Made rapid fire adapter for Atari 2600

Granted, not many games will benefit from this as some have software rapid fire built in like Astroblast, or can only fire one at a time. But a few games like Defender, Empire Strikes Back, Gyruss, etc can actually benefit from rapid fire adapter that fires faster than your thumbs can move.

I wanted to build an adapter with switches to: turn off the adapter, to make rapid fire on button, and for hands free rapid fire. And a variable resistor to adjust the speed, and LED to show the fire rate. And finally, as small as I can make em!

Last year I made ATTiny10 ISP shield for Arduino because I wanted a way to program the tiny chip without soldering and desoldering, and I didn't want to include programming header on the PCB to shrink the PCB a bit. It got left on the backburner after I finished assembling and testing it. (note I don't have any blank PCB left, but you can download Eagle or gerber files and get some PCB made.)

EDIT: the code and board file for ATTiny10 does not work on Arduino IDE 1.8.10 or .12, I have to use 1.8.9 at the oldest to use ATTiny10 board file.

After a while, I finally decided to get back to the original reason I made the shield: to make Atari 2600 rapid fire adapter. I am sure the same could be done with a 555 timer IC but I looked at the required part list and total cost, ATTiny10 is slightly cheaper since it'd need one less capacitor, and thus slightly less crowded PCB.


I used OSHPark and the board is After Dark version rather than the usual purple. I've already made a few revisions since the board was produced.

kapton tape protects exposed connector pins and LED from the metal box of variable resistor.

all the SMD part except for LED is on the bottom.

Unfortunately I forgot one issue: the common 9 pin connectors I used has ears and they won't fit the console! Controller plugs didn't use ears with thumbscrews. I tried to cut the ears off but the female plug fell apart completely, it was 2 plastic pieces holding 9 pins and without the metal shroud I'd need to super glue the plastics together or find a solderable 9 pin female connector without ears.

PS this is probably about the limit of how small I can work with, any smaller and I'd have to get someone to do SMD assembly or get a reflow oven and stencil. Tiny board with tiny pieces don't play nice with standard sized vise.

Ah code would help too!

void setup() {
  // D0 = fire input, pulse when low
  // D1 = fire output
  // D2 = analog input from variable resistor
  // D3 = not used (it's a reset pin, connected to VCC for normal operation)
  pinMode (0, INPUT);           // fire button input from controller
  digitalWrite (1, HIGH);       // the output from controller fire button to 2600
  pinMode (1, OUTPUT);          // set high for fire button up (not firing)
  pinMode (A2, INPUT);          // pot input
}

void loop() {
  if (!digitalRead(0)) {        // if (not high) then fire button is down
    int cycle = analogRead(A2); // check current pot position
    cycle = (cycle << 1);       // 30 fire per second to 2 fire per second (estimate)
    digitalWrite(1, LOW);       // pin is set LOW, output will pull fire line to LOW to trigger
    delay(50);                  // how long 2600 needs to detect fire button press
    digitalWrite(1, HIGH);      // button up
    delay(cycle);               // wait this long before next fire
  }
}

I probably screwed up math for fire rate somehow. ATTiny10 uses 8 bit ADC and would read 0 to 256. Bitshift once gets me 1 to 512 which should get me at highest 1/2 seconds pulse (2 fire per second) but the lower end would be impossibly fast. 50ms delay + entire loop code at the fastest is probably like 75ms total, maybe about 15 fire per second?

Schematic:

As one can see from schematic, if one switch is in the off position, fire line from controller bypasses the rapid fire circuit for normal operation. If it's on, and second switch is fire on press, it'll pulse only when you press the fire button. If the switch is hands free, it's same as holding the button down for continuous firing.

Capacitor is just for ATTiny10.