So... I've been on an old games kick for some time now. As part of that, I recently purchased a Namco neGcon Playstation controller. I'm not going to dig out a copy of Wipeout... I want to support it in some of the demo programs I write for the graphics programming class I teach... because I can. :)

A tiny bit of background for people too lazy to click the Wikipedia link... This is an old Playstation controller. It came out long before even the Dual Analog (April 1997, according to the Wikipedia article. I couldn't find a firm release date, but I remember seeing adds for it around the launch time of the Playstation. I could find some rec.games.video.sony posts from March 1996 about importing it from Japan. What makes it special are the quirky analog inputs. The left trigger and the two red buttons are analog. The real kicker is twisting it in the middle is also an analog input.

I hooked it up to my laptop with a generic Playstation-to-USB converter, and hacked up a demo program in SDL to see how this thing reports itself. The first disappointing thing is the name. SDL just reports it as "USB Gamepad " (yes, with a space at the end). I'm sure that's a quirk of the adapter. Since I have several controllers that I use, I use the name to set default button mappings. My Logitech DualShock look-a-like reports as "Logitech Logitech Dual Action" (yes, Logitech twice), and my PS3 Sixaxis reports as "Sony PLAYSTATION(R)3 Controller".

It shows up as 5 axes, 12 buttons, and a hat. Let's look at the mapping to see it get crazy:

  • Twisting: axis 0
  • Buttons I and II (the red ones): axis 1. Yes, the two jolly, red, candy-like analog buttons show up, together, as axis 1. Button I gets the negative values, and button II gets the positive values.
  • Button A: button 1
  • Button B: button 0
  • Left trigger: axis 3
  • Right trigger: button 7
  • Start: button 9
  • D-pad: Hat 0. I hate controllers that advertise the d-pad as a hat. My Logitech controller does that, but the Sixaxis just shows them as buttons.

All of this begs the question, "WTF?" It also begs a couple follow-up questions. Is all of this madness caused by the adapter, or is it endemic to the controller itself? I suspect it shows up as 12 buttons because of the DualShock. The DualShock actually has 13 buttons (the "Analog" selector), but I don't think that gets sent over the protocol. I think that just changes the function of the controller itself. My Logitech has a similar "mode" button, and that doesn't go over the protocol.

Did anyone ever use a neGcon with a parallel port adpater? How did it show up? It looks like the Linux kernel has supported it for ages, so someone must have done it...

You might take a look at http://retrousb.com/ for more USB controller adapters for original console controllers. Most of their adapters show up with more sensible button and axis mappings.
Comment by Anonymous Tue Apr 16 19:33:45 2013

Quick background on how PSX controllers work: the host (PSX/adapter) connects to its controllers with a proprietary serial interface. The host can request the controller's device ID (digital, analog, mouse, etc.) or the controller data in the form of a binary report. The device ID tells the host how to interpret the report: i.e., which button or axis belongs to which bit(s) in the report.

If you're curious, http://pinouts.ru/Game/playstation_9_pinout.shtml has a handy breakdown of the controller's pinout and serial protocol.

What's probably happening here is the USB adapter has a microcontroller that bit-bangs the PSX controller's interface on one end and converts the result into USB HID reports on the other end. Your adapter's firmware either doesn't recognize the neGcon ID, or just flat-out assumes everything is an analog controller, and parses the neGcon's report as if it were an analog controller. The neGcon's report is close enough to an analog controller that you'll get mostly sensible data, only with a wacky button mapping.

Buying a different USB adapter may or may not help, since these things are churned out on the cheap and a lot of them probably use the same firmware. Even if you happen to get one with a different firmware, testing for neGcon compatibility probably wasn't high on the programmer's to-do list.

If you go with the DIY parallel port adapter, all the bit-banging and conversion is done on your PC in the kernel. The kernel won't necessarily do a better job with button mapping out-of-the-box, but if you're comfortable doing minor kernel hacking (or can buy a beer for someone who is) then you can at least tweak the driver's button mapping to your liking.

Likewise the Retro Adapter (http://retro.world3.net/) has an open-source firmware that wouldn't be too hard to tweak for someone with ATmega programming experience.

Comment by Anonymous Sun Apr 21 12:38:42 2013

Old post, but I couldn't help but notice it seems to make some things the same way that my Playstation controller adapter does with a regular PS2 dual shock... There, Triangle and Square get interpreted as buttons 0 and 1, matching your mapping here. Also, R1 is button 7, and Start is button 9, which also match.

Paired with the fact that according to Wikipedia, this thing could play regular PSX games, it seems that the neGcon devs left all the regular button mappings unchanged from normal Playstation controllers. And that we apparently have the same (or similar) Playstation controller USB adapters.

Comment by DaVince Tue Mar 4 15:24:54 2014