Archive | December, 2011

Connecting old school joysticks to the Arduino and Gameduino

30 Dec

So you’ve got some old school joystick with a DB9 connector lying around, time to connect it an Arduino board.

The pin out’s for the joystick connector (male connector) I took from the original Atari pin out, as we see later on this pin layout is the most generic one and works with joysticks from Atari, Commodore, Sega, Quickshot, …

Pin’s 1 to 4 are up/down/left/right

Pin 6 is the fire button

Pin 8 is the GND

If you need to support more button’s then there’s some bad news every manufacturer seems to did his own extra button wiring, so for simplicity I took a one button configuration. We simply need to connect these pins to the the Arduino digital pins. I choose pins 3 to 7, you can choose other configurations but for me it was more easier to choose 5 pins next to each other as I reused an old serial switch box to recuperate the DB9 male connector on it, so I simply cut the wires from it.

Next I soldered the wires comming from the male DB9 to the  pins as in the picture. Pins 7 -> 3 Up/Down/Left/Right/Fire

A soldered 1 pin to the GND wire.

Then it was time to test this setup, I used an Arduino Decimilla for the test, with a small sketch.

/*
 Joystick test Sketch

 Reads the digital direction and button state from Atari compatible joystick.
 Some code reused from the Sparkfun joystick shield test sketch.
*/
//Variables for the buttons
char buttonUp=7, buttonDown=6, buttonLeft=5, buttonRight=4, buttonFire=3;
void setup(void)
{

 pinMode(buttonUp, INPUT);
 digitalWrite(buttonUp, HIGH); //Enable the pull-up resistor
pinMode(buttonDown, INPUT);
 digitalWrite(buttonDown, HIGH); //Enable the pull-up resistor

 pinMode(buttonLeft, INPUT);
 digitalWrite(buttonLeft, HIGH); //Enable the pull-up resistor
pinMode(buttonRight, INPUT);
 digitalWrite(buttonRight, HIGH); //Enable the pull-up resistor

 pinMode(buttonFire, INPUT);
 digitalWrite(buttonFire, HIGH); //Enable the pull-up resistor 

 Serial.begin(9600); //Turn on the Serial Port at 9600 bps
}
void loop(void)
{
 Serial.print(digitalRead(buttonUp)); //Read the value of the button up and print it on the serial port.
 Serial.print(digitalRead(buttonDown)); //Read the value of the button down and print it on the serial port.
 Serial.print(digitalRead(buttonLeft)); //Read the value of the button left and print it on the serial port.
 Serial.print(digitalRead(buttonRight)); //Read the value of the button right and print it on the serial port.
 Serial.println(digitalRead(buttonFire)); //Read the value of the button fire and print it on the serial port.

 //Wait for 100 ms, then go back to the beginning of 'loop' and repeat.
 delay(100);
}

Then I did  some testing with joysticks and gamepads I had lying around:

Quickshot standard, original from my C64 works exactly like the Atari.

Atari joystick

Atari gamepad with button 1 & 2 both buttons trigger the same fire button but can be wired different to get both working.

Sega Master System gamepad, only button 1 works.

Sega Mega Drive gamepad, only button B works.

We can conclude that all support the directional buttons and fire button but the extra button’s are a different story maybe for another blog post ?

Finally I hooked the joystick up to my Uno/Gameduino setup, that’s why I didn’t used pin 2 as it’s used by the Gameduino.

I remapped the pins in the Gameduino Asteroids sketch and the whole thing runs perfectly. Although the Asteroids game doesn’t use the fire button.

Advertisements

Naugthy Dog 25 anniversary, remember Crash Bandicoot ?

24 Dec

Crash was the first game I played on my PS1 back in 1997 and still one of my favorite 3D  games.

The company behind Crash is already 25 yaers in business, an achievement in the Games sector. A nice article about the company’s history can be found here .

Andy Gavin, one of the original founders/developer has it’s  own blog where he  explains the background story of Crash Bandicoot really amazing information so check it out here.

New to my collection the Schneider CPC 464

24 Dec

The CPC was originally created by Amstrad in 1984 and later produced by Schneider Germany for European countries on the mainland, like here in Belgium.

Image

I recently picked up a CPC 464 the model with build-in tape recorder for a very decent price including  a green monitor. As a bonus almost 27 tape games where included many in excellent condition.

Amazing to see a 25 year old tape flawlessly loading, after a few minutes ‘The way of the exploding fist’ was showing on the screen.

Image

The Quickshot joystick supplied with is a model that can be used with almost all 9pin db joystick connectors used by computers of  that time: Commodore, Atari, Msx, Amstrad… Never seen this model before but nice for  a retro collector as me, one model fits all … Can be used for a 2 player game, 2 leads are supplied player selection is done with a switch on top of the joystick.

You can read more about the Amstrad/Schneider on wiki pedia  

%d bloggers like this: