Forums » General Questions » How do I use Parallel Light output?

So I recently built a dedicated SM PC to hook up to my DDR Arcade Machine (old style machine) I'm running the latest version of Beware's mod on a Windows XP machine and I have a PCI card with dual Parallel ports. I have everything working fantastically but the lights, I just today got the last bit of parts I need to hook everything up... I had a couple of threads on the old forum bookmarked but I just realized today that it's been taken offline so now I'm missing a bunch of critical information that I need to complete my project. :-/

Here's what I need to know:

1. What do I need to do to enable parallel port light output in SM 3.9+ Redux
2. Which pins on the Parallel ports are used for which lights
3. What is the pinout of the light connectors on an old style DDR Arcade Machine?
4. I'm already got all the parts I need to build a parallel light setup but is there any way to use something like a Pac-Drive on this version of SM?

Last edited: 6 January 2014 4:54pm

Those bookmarks should still work. The old forum is still around, just locked at the moment.
I've tried them, all of my bookmarks just redirect me to a message that says this:
Hello! The current forums are overrun with spam, so we're disabling them for now. There is a new StepMania message board being beta tested. (Spambots need not apply. :p)

EDIT: here are some of the links I had bookmarked:

Last edited: 7 January 2014 5:31am

This guide is for anyone who wishes to use the parallel lights driver for Windows and/or Linux. It took quite a while to get everything figured out, but here is what I have collected throughout my time working with this. I don't know the status of parallel lights for any game mode other than 4-panel, so please don't ask me whether this works for 6-panel, Pump mode, etc.

  • Working lights for 4.0 - Lights output but mappings need to be changed
  • Guide for hooking up to an arcade cabinet - Images and demo have been posted. Guide will come in the following days.

As of 2/25/2009, here are the versions I have tested before altering anything in their respective source code, complete with notes for each:
3.9 Final (
Windows - Disabled due to the parallel_lights_io.dll having conflicts with the GPL license. Can be enabled by uncommenting line 14 in the 3.9 Final source code 'src/arch/lights/LightsDriver.cpp' and recompiling.
Linux - LightsDriver=LinuxParallel. Only outputs to cabinet lights. Pad lights are not implemented.

3.9 Plus Redux (
Windows - Works with LightsDriver=parallel in StepMania.ini and parallel_lights_io.dll in Program folder. All cabinet lights work and outputs to port 0x378. P1 and P2 pad lights output to port 0x278, however the down arrow does not light up on either side, the other 3 on each do.
Linux - Latest version is only 3.9 Plus RC1 - Works with LightsDriver=LinuxParallel in StepMania.ini. All cabinet lights work and outputs to port 0x378. P1 pad lights output to port 0x278 and all 4 arrows work. P2 pad lights do not work.

OpenITG (
Windows - Same as 3.9+, LightsDriver=parallel and parallel_lights_io.dll, 0x378 for cabinet lights, 0x278 for P1 and P2 pad lights with down not working on neither side.
Linux - Same as 3.9+ except for LightsDriver=LinuxParallel and no .dll, 0x378 for cabinet lights, 0x278 for P1 pad lights, P2 side not working.

4.0 SVN r27871 (
Windows & Linux - Does NOT work period! So much has been changed in the source compared to 3.9 & 3.95 that although the code compiles, it does not interface anything to the parallel port. The drivers will initialize based on what the log puts out, but the program does not touch the parallel port at all. I don't have this level of programming knowledge to be able to fix it.

Those are the outcomes you would expect to get with the default binaries. Now, with some fiddling around in the source code, you will be able to make lights work for any of the above listed versions besides 4.0.

Here are some basic requirements to get lights working:
- For Windows: Visual C++ .NET 2003, DirectX SDK, and Windows Platform SDK. I have not had any luck with VC++ 2005 or 2008 as it returns various compiling errors that 2003 does not.
- For Linux: All the necessary libraries to compile Stepmania. :P
- Source code for the version you want to use (3.9, 3.9+, or OpenITG).
- If you only want cabinet lights, 1 parallel port is enough. Otherwise, you will need 2, the 2nd being for P1 and P2 pad lights. This can be accomplished by buying a 1 or 2-port PCI parallel port card depending on if your motherboard already has one or not and whether you want to use it.
- inpout32.dll which can be found here. This will be used instead of the parallel_lights_io.dll 1) because the source is available and not proprietary like parallel_lights_io.dll and 2) you are going to need this if you are using PCI parallel ports.
- A lights board, can be as simple as using LEDs or larger scale like an actual arcade cabinet.

-------UPDATE 9/27-------
A final revision lights board for an arcade DDR cabinet has been completed as of 9/26 and so far is working 100% flawlessly. Images of the lights board can be found [url=""]here[/url]. A video of an earlier but a bit buggier revision of the lights board in action can be found [url=""]here[/url]. I will write up a guide on how I made the final revision board in the coming days after this update. Stay tuned!

From here on I will be using cabinet lights and LPT1 interchangeably as well as pad lights and LPT2. For people who are able to make your own lights board, here are the pins you will need to know about.

PIN 2 - Marquee upper-left
PIN 3 - Marquee upper-right
PIN 4 - Marquee lower-left
PIN 5 - Marquee lower right
PIN 6 - P1 Selection buttons
PIN 7 - P2 Selection buttons
PIN 8 - Bass left
PIN 9 - Bass right
PINS 18-25 - Ground

PIN 2 - P1 left
PIN 3 - P1 right
PIN 4 - P1 up
PIN 5 - P1 down
PIN 6 - P2 left
PIN 7 - P2 right
PIN 8 - P2 up
PIN 9 - P2 down
PINS 18-25 - Ground

Download the included zip attachment and extract them to 'src/arch/Lights' of your version's source. Overwrite the existing files.

Now we will find out the address(es) for your parallel port(s).
Windows - Right-click My Computer > Properties > Hardware > Device Manager. Expand the entry for Ports (COM & LPT) and for every port you want to use, double-click on it to open the properties window. Click on the Resources tab and look at the first listed I/O Range (there may be more than one I/O Range listed, but only the first one is important). This is the address for that specific parallel port.

In my example, my computer has 3 parallel ports, 1 on the motherboard and 2 on a PCI card. I am only using the 2 ports on the PCI card and leaving the motherboard port alone. The address for my first port is 0xBC00. This is the port I will use for cabinet lights. My other port (not pictured) has an address of 0xBE00 which I will be using for the pad lights. Your port addresses will most likely be different than mine.
Linux - Use 'dmesg | grep parport' to find your port address(es). If running that command does not give you anything, your kernel does not have parallel port support enabled. Enable it in the kernel config menu and recompile.

IMPORTANT!! If you are using PCI parallel ports, please be sure to double-check your addresses everytime you remove/reinsert your PCI card or you reinstall your OS! As far as I know, most if not all PCI parallel ports automatically assign their own addresses, they may change if you do 1 of the 2 things mentioned earlier, and they will never be assigned to the motherboard LPT addresses 0x378, 0x278, or 0x3BC. If the addresses change and you don't recompile the source with the new ones, you may crash your system when Stepmania opens!

Now we are ready to copy the port addresses into the source code.

For LightsDriver_Win32Parallel.cpp - change the value on Line 16 to your first port's address. In my case it was 0xBC00. Don't forget the 0x as it denotes it as a hex value. This is for the cabinet lights. Change Line 17 to your second port's address. In my case it was 0xBE00. This is for the pad lights. Leave the 3rd value alone (should be 0x3BC).

For LightsDriver_LinuxParallel.cpp - same procedure as above except they're located on Lines 13 and 14 for LPT1 and LPT2 respectively.

Build and compile. Replace the program executable with the new one you compiled. Make sure inpout32.dll is in the Program folder for Windows users. Make sure you have LightsDriver=parallel (or LightsDriver=LinuxParallel for Linux). Run Stepmania. If everything was done correctly you should now have lights working. Enjoy your light show!

A notice on the parallel_lights_io.dll driver. It's bad, don't use it. Whoever wrote the code for it only took in mind the motherboard parallel ports, and thought nothing of PCI parallel ports. It only outputs data up to address 0x7FFF, anything past that and it will crash your system. PCI parallel ports more often than not assign addresses past 0x7FFF, in my case they were 0xBC00 and 0xBE00. Inpout32.dll was better coded and outputs up to address 0xFFFF. I'm fairly sure no PCI parallel card goes past that yet but if it does, at least the source is available so that we can adapt to it.

The files in the archive seem to be things that are already in the repos, I don't think it applies to recent builds. I'll rehost them if actually needed.

(Also, quoting is a little broken. I need to look into that...)

Last edited: 11 January 2014 1:22pm

awesome, thank you!

any chance of getting the file that was attached to that post? as it seems to be a necessary piece to making it work.
Uploaded a mirror here:
awesome, thanks!
so I've been chipping away at this. I finally got all of my parts in to build my PCB but to start I've got the cabinet lights connectors mapped out:

Here are pin numbers wire colors and function of each wire... the only wires I'm unsure of are the brown wires on the P1 and P2 connectors...

DDR Connectors:
Player 1 Platform Lights (10-pin White Connector)
1 black logical ground
2 green-red player 1 up arrow lights
3 blue-red player 1 down arrow lights
4 purple-red player 1 left arrow lights
5 gray-red player 1 right arrow lights
6 white enable pad (tie to logical ground)
7 brown (unknown)
8 N/C
9 N/C
10 N/C

Player 2 Platform Lights (10-pin Orange Connector)
1 black logical ground
2 green-red player 2 up arrow lights
3 blue-red player 2 down arrow lights
4 purple-red player 2 left arrow lights
5 gray-red player 2 right arrow lights
6 white enable pad (tie to logical ground)
7 brown (unknown)
8 N/C
9 N/C
10 N/C

Cabinet Lights (10-pin Red Connector)
1 black logical ground
2 N/C
3 N/C
4 purple-brown player 1 button lights
5 gray-brown player 2 button lights
6 green marquee lower right floodlight
7 blue marquee upper right floodlight
8 purple-red marque lower left floodlight
9 gray-red marquee upper left floodlight
10 green/yellow earth ground

Sub Woofer Lights (6-pin White Connector)
1 black logical ground
2 gray subwoofer lights (both)
3 N/C
4 N/C
5 N/C
6 N/C

For reference here are the parallel port pinouts for stepmania 3.9

SM Parallel Light Output
Parallel Port 1 (LPT1):
1 N/C
2 marquee upper left floodlight
3 marquee upper right floodlight
4 marquee lower left floodlight
5 marquee lower right floodlight
6 player 1 button lights
7 player 2 button lights
8 subwoofer light left
9 subwoofer light right
10-17 N/C
18-25 logical ground

Parallel Port 2 (LPT2):
1 N/C
2 player 1 left arrow lights
3 player 1 right arrow lights
4 player 1 up arrow lights
5 player 1 down arrow lights
6 player 2 left arrow lights
7 player 2 right arrow lights
8 player 2 up arrow lights
9 player 2 down arrow lights
10-17 N/C
18-25 logical ground

I'm also opting to go with 36-pin Centronics connectors on my light board so that I can use off-the-shelf printer cables... for reference here is how the DB-25 (parallel port) connector maps to a Centronics-36:

The Centroincs 36-pin connector ends up being mapped out like this:
Output pins (same numbers as DB-25): 2-9
Ground pins: 16-17, 19-30, 33
Pins with No Connection: 1, 10-15, 18, 31-32, 34-36

Last edited: 24 January 2014 6:36am