Monday, 19 October 2015

Supergun Updates

Received new batch of the latest Superguns. Only a minor update to the PCB and a few firmware tweaks this time round.
Probably the last batch of these that I'm going to making as well, time to move onto other stuff I think.

Lots of soldering to be done...

Monday, 5 October 2015

NegCon & JogCon Supergun support

Recently picked up a Namco Jogcon and a Namco Negcon controller for the Playstation. Both are somewhat unique in that they're designed for driving/racing games only, more details on both of them in the Wiki links.

The Negcon is pretty good to use, the twist mechanism works well as do the long travel analogue buttons. The Jogcon is a different matter, the jog wheel while being intuitive to use is in practice horrible due to the force feedback in play.
  
Anyhows, I decided to the add support for these to my supergun firmware, figuring they'd make an interesting control scheme for the various overhead arcade racers like Trash Rally, Neo Drift Out etc. 

I already have support for regular Playstation controllers so hoping adding these would be simple enough.

Negcon


So taking a few traces of the controller in action show us the info we need. The relevant details for this controller are:
  • Byte 1 - The controller device ID in this case 0x23 
  • Byte 6 - Holds the value of the 'twist', ranges from 0x00 to 0xFF with 0x7F being the neutral resting point. A forward twist increases this value and conversely a backward twist reduces it. 
  • Byte 7 - Analogue button 'I', ranges from 0x00 to 0xFF with 0x00 being the released value and 0xFF being fully pressed.
  • Byte 8 - Analogue button 'II', ranges from 0x00 to 0xFF
  • Byte 9 - Analogue shoulder button 'L', ranges from 0x00 to 0xFF 
All the other buttons & D-Pad report back their status in the same bytes as a regular controller.

Given that the Supergun Jamma controls are digital only and we're dealing with analogue inputs here I'm just triggering the output based on hitting a defined threshold above and below the neutral point.

0x20 seems to work ok as a decent threshold value, it gives us a sufficient dead zone that a definite twist is required without have to twist the controller the full way.

Similarly with the analogue buttons, anything above 0x20 is considered a positive press.

Overall this controller works very well with those style of arcade racers and the D-Pad is always there as a fallback if needed.


NegCon Controller at rest

NegCon Controller with a little forward twist


JogCon



The JogCon device ID s 0xE3 and only has a single analogue input - the jog wheel, this value is returned in Byte 5 and all the rest of the (digital) inputs are as per a regular Playstation controller.

Took a few traces with the jog wheel at different wall clock positions:
  • 12 O'Clock  Byte 5 = 0x7F
  • 3 O'Clock    Byte 5 = 0xFF
  • 6 O'Clock    Byte 5 = 0x00
  • 9 O'Clock    Byte 5 = 0x3F
So basically any reading between 0x00 and 0x7F would be Left turn and 0x7F to 0xFF would be Right turn, again with a sufficient dead zone.

Feedback is disabled as there is no way of tying it into the Jamma game inany logical fashion, I guess I could have implemented it in such a way to resist the turning motion of the wheel but since I'm not supplying power for the feedback motor from the Supergun its a moot point :)







It has been an interesting experiment but pretty useless given that the standard Dual Shock is a better all-round controller to use.
The NegCon is definitely something I'll use again but the JogCon is unlikely to see much action ever again.