Category Archives: Stepmania

Repairing a DDRGame Dance Pad

Filed under Arcade, Stepmania

A long time ago, I built a MAME arcade machine. I call it the No18 Arqadium Engine. Head on over to to see it and a ton of other great arcade machine builds.

Over the years, it’s been extended, upgraded, and enhanced in a lot of different ways for a lot of different games.

Some time ago, I picked up a couple of these soft foam Psyclone Essentials Dance Pad controllers:


I couldn’t find the company anymore, so I doubt they’re still in business, but I did find a number of single and dual mat offering on on so if you’re inclined, I’d head that way.

In my case, my intent was always to build my own actual pads and just use the controller boards from the Psyclone mats for the electrical bits.

Years go by

Well, one thing led to another, and we played the soft mats quite a bit but I never got the time to build up the hardcore Dance Dance Revolution arcade-style pads I’d intended on.

And then the dance game craze kind of faded, and my daughter moved off to college, etc, etc.

CraigsList strikes

And then one day recently, I stumbled upon a great deal on a Cobalt Flux dance pad on my local CraigsList.

It included a controller, and… drumroll… it worked flawlessly when I connected it up to the Arqadium!

Upgraded the copy of StepMania I had installed and pullled some newer tracks from the interwebs, and we were hooked again on DDR style gaming!

No Competition

But after all that, I was still missing the DDR style-competition side-by-side danceoffs on dual dance mats.

So I hit CraigsList again and within a few weeks turned up a DDRGame pad complete with a handlebar and PS2/USB controller hardware. Perfect!


No so fast

Got it home, hooked it up and… Nothing. The Select and Start buttons on the actual controller box worked, but nothing on the pad. However, the LEDs did light up when I stepped on an arrow, so I knew it was at least connected and getting power.

I played with it off and on for a few weeks. Connected to other computers, Tried other PS2 to USB adapters plus the one that came with the DDRGame unit but I couldn’t get anything to properly send the mat presses.

Deep Dive

At this point, I wasn’t sure whether the mat itself or the controller board was the issue.

The mat itself connects to the controller using a standard high density 15 pin DSUB connector (the old style VGA connector).

So, a couple safety pins and a Digital multimeter later, and I’d verified that all the buttons on the mat did, in fact, work. At least, when pressed, they completed a circuit from ground (the outer shell of the DSUB connector) to a pin.

Perfect. Standard basic buttons. Nothing fancy in the pad itself.

At this point, it’s time to start cracking heads.

First up, the DDRGame controller board


The RED pins are the arrows and X and O buttons on the mat itself. These markings on the controller board lined up with what I’d determined experimentally using the multimeter, so I knew I was on the right track.

The YELLOW squares highlight the SELECT and START buttons, which are actually on the controller box itself.

This lead to a pinout of the 15 pin DSUB as follows.

Pin 1
Pin 2 X or Up Left
Pin 3
Pin 4 O or Up Right
Pin 5 Ground
Pin 6
Pin 7
Pin 8
Pin 9
Pin 10
Pin 11 Right
Pin 12 Left
Pin 13 Down
Pin 14 Up
Pin 15 Ground

Keep in mind that 15 pin High density DSUBs are numbered in 3 rows starting with one, as shown here:

Pan Pacific DHS-15S 15 Pin Hi-Density D-Sub Female Solder Type Connector

Notice that Pin 1 is at Top Right. Pin 6 is right below it and Pin 11 is Bottom Right.

Next up, opening the Psyclone controller.


I didn’t grab a photo of this board within it’s own housing. Here. it’s pictured already installed in the DDRGame controller housing.

Note the START and SELECT buttons (YELLOW), and the contact pads for the various buttons (labeled J1-J9 in RED) plus a large center pad (GROUND) and one peculiar pad, 4th from the right (LIGHT BLUE) that should be J7, but instead isn’t numbered at all.

After some experimenting, I was able to get the pin out here as:











START button 10

UpRight button 2


DownRight button 4



DownLeft button B1


UpLeft button B3

SELECT button B9

At this point, it was just a matter a digging up a 16pin male DSUB connector, and soldering wires from the DSUB to the contact pads on the controller.


So two minor things came up in the process.

First, I discovered that whatever the contact pads were coated with, solder did not stick to it. No amount of flux, resin etc worked, so I ended up gently scraping the pads down to the bare copper foil and then soldering.

Second, after I’d gotten it all soldered and together I plugged it in to try and nothing worked, at least the arrows didn’t.

Turns out, the mat itself uses the DSUB shell as a ground. I suspected as much and using a quick alligator jumper wire between the shell and a ground pin confirmed it.

So, another quick solder of a jumper wire between the shell and one of the ground pins, and presto! We were in business!

Now we have side by side metal dance pads and lots of DDR competition!

PhaseShift and Frets On Fire X Song Packs

Filed under Arcade, AutoHotKey, Frets On Fire, Games, Guitar, Stepmania

PhaseShift is an excellent freeware (not open source yet, as far as I can tell, but here’s hoping) version of the RockBand genre of games. It’s even more interesting in that it can interoperate with guitar controllers, game drum kits, vocals, keyboards, MIDI, and even step pads (for Dance Dance Revolution style games, all at the same time!).

Very cool stuff.

What’s even better is that it can read both Frets on Fire songs as well as Stepmania format songs.


There are a ton of great song packs available out on the web, and most that I’ve found work seamlessly with PhaseShift. However, I’ve run into a bunch that do not.

The problem appears to be with the NOTES.MID file (the file that contains all the midi notes that is used by the game to show the onscreen “notes”).

After some digging using a hex editor (my favorite right now is Tiny Hexer), I discovered that in all the cases that failed, the NOTES.MID file appears to contain extranous junk. In many cases, it was a string of keyboard key names, in others it was code snippets. I’m guessing that whatever MIDI editor was used to generate those MID files didn’t properly clear garbage out or compact memory.

At any rate, FoFix appears to ignore the extra junk but PhaseShift does not.

Enter EOF

EOF is a song editor for “fretting” songs for use with rhythm games like Frets On Fire and PhaseShift. The latest version even has specific features to take advantage of elements of PhaseShift that don’t exist in Frets On Fire.

I found that simply using FILE – IMPORT MIDI and importing the NOTES.MID file into EOF, then immediately SAVING the file (and clicking YES to the prompt of “The file hasn’t changed, Save Anyway?”), fixed the problem for every single song I tried it on.

It worked so good in fact, that I wrote up a simple script in AutoHotKey to just run through all the files in a directory and perform those magic steps on them

Convert songs via EOF


loop, 1 {
    ;match anywhere in title
    SetTitleMatchMode, 2
    IfWinExist \Songs\
        msgbox No Window

    ;Copy full path name
    sleep 500
    SendPlay ^+C
    sleep 500
    SendPlay ^+C
    ;msgbox %clipboard%

    ;Over to EOF
    IfWinExist EOF -
        msgbox No EOF

    sleep 500
    SendInput {F6}{F6}
    sleep 500
    SendInput %clipboard%{enter}
    sleep 1000
    Send ^s
    sleep 500
    Send ^s!FS
    sleep 200
    SendInput Y
    sleep 200
    SendInput Y

    ;Back to DirOpus
    IfWinExist \Songs\

    sleep 500
    SendPlay {down}


Change the loop value from 1 to some count if you want to run it through more than one song at a time.

To explain:

The F12 key I’ve mapped to a reload just to make editing this script easier. It’s not necessary for actually running the script.

The F11 key hooks to the secret sauce.

I used the SEARCH feature in Directory Opus to list only the NOTES.MID files from all songs in all subdirectories of a folder I was targeting. If you don’t have DirOpus, you’ll need to recode the script to accommodate some other logic for getting the list of full pathnames to process.

The script starts by activating the DirOpus window and copying the full path to the selected NOTES.MID file.

Then it switches to EOF, (which needs to already be loaded), and performs the FILE – IMPORT function, pasting in the filename of NOTES.MID.

It then immediately does a FILE – SAVE (and supplies a few Y keypresses to answer the “save anyway” prompt.

And finally, it switches back to DirOpen and moves down to the next file.

It’s a hack to be sure. But it worked a treat for me.

Rock on!