/sfc-jamma

SNES/SFC Controller Support for JAMMA Arcade Cabinets

Primary LanguageC++BSD 2-Clause "Simplified" LicenseBSD-2-Clause

sfc-jamma

TLDR: SNES/SFC controller support on arcade machines!

Click here for a demo video of a Capcom CP Solder used to play Street Fighter Zero 3

This repository contains the Eagle CAD files as well as the Arduino Nano source code to interface a Super Famicom (SFC) or Super Nintendo (SNES) controller with an Arcade Cabinet JAMMA interface via a 40-pin ribbon cable.

The 40-pin ribbon cable pinout is based on the pinout used by the EZ Switchers by RiddledTV. The EZ 4-way Switcher and EZ 8-way Switcher provide both a JAMMA edge and 40-pin output connectors with the intent of having two cabinets wired into the same arcade board for head-to-head gameplay. I abused this fact to instead use the 40-pin cable for a secondary set of user input controls.

Because the wiring on the JAMMA interface and 40-pin interface are tied directly together, the Arduino Nano can also read input from the arcade's input panel, and then forward this information over the Arduino Nano's USB interface back to a PC, such as using it for gamepad emulation. This can be useful for running a PC through an arcade cabinet, and forwarding the input controls from the cabinet back into the PC.

Button Mappings

On Player 1, hold SELECT + START for two seconds to toggle TEST / SETTINGS button. This is set as a toggle rather than a momentary press because some games like Soul Edge require the button to remain held while in the settings menu.

On Player 2, hold SELECT + START for two seconds to toggle TILT button. P1 and P2 Arduino Nanos run on the same code, which is why this is also a held toggle function.

Press SELECT + UP to select Profile 1 Press SELECT + DOWN to select Profile 2

SNES NES Profile 1 Profile 2
SELECT SELECT Insert Coin Insert Coin
START START Player Start Player Start
A Button 5 (MK) Button 6 (HK)
B A Button 4 (LK) Button 4 (LK)
X Button 2 (MP) Button 3 (HP)
Y B Button 1 (LP) Button 1 (LP)
L Button 3 (HP) Button 2 (MP)
R Button 6 (HK) Button 5 (MK)

Tested SNES Controllers

  • Nintendo Super NES Controller: SNS-005
  • Nintendo Super Famicom Controller: SHVC-005
  • Nintendo Super NES Score Master: SNSP-026
  • NTT Data Key Pad: NDK10 (1)
  • Brook Gaming Wingman SNES Converter: ZPP005Q
  • 8BitDo Retro Receiver for SNES
  • Capcom CP Soldier: CP-S01CAN
  • HORI Fatal Fury 2 Commander Controller: HSG-07
  • HORI Fighting Commander: HSJ-14
  • Hudson Soft Super Joycard: HC-691
  • Asciiware AsciiPad: AS-131-SP
  • Asciiware Super Advantage: 4910
  • Asciiware Fight Stick: AS-9981-SF
  • STD SN ProPad: SV-334
  • STD SN ProgramPad: SV-337
  • Triax Turbo Touch 360
  • Tyco Super NES Power Plug: 1286
  • Konami Hissatsu Command Controller: RU-009
  • High Frequency Clear Turbo Controller for SNES
  • FC2 Slim
  • Hyperkin Retron 2 Controller: M05932

(1) The NTT Data Key Pad will always have bit 14 pressed (outside of the normal buttons). The four high bits are used to identify the type of device plugged into a controller port, with value 0h being a normal controller. This has a value of 2h, and it most likely used by the accompanying hardware to identify itself and tell the software to do extra querying on the controller to read its additional buttons.

Tested NES Controllers

  • Nintendo Controller: NES-004
  • Nintendo NES MAX: NES-027
  • 8BitDo N30 2.4g Wireless Gamepad: 81BC
  • Brook Gaming Wingman SNES Converter: ZPP005Q

Images

SFC to JAMMA PCB

SFC to JAMMA Board Layout

SFC to JAMMA Schematic

vJoy IBUS PC Access

To use this board with a PC, allowing SNES/SFC or JAMMA input as a PC gamepad, you'll need a couple of utilities installed and configured on your PC.

vJoy Configuration

  • Download and install vJoy
  • Make sure that "Enable vJoy" is selected
  • Uncheck all but "X" and "Y" from Axes
  • Set the number of buttons to 16
  • Set "POVs" to "0" in the "POV Hat Switch" panel
  • Unchecked "Enable Effects" in the "Force Feedback" panel
  • Click the "Apply" button

vJoySerialFeeder Configuration

  • Download and run vJoySerialFeeder
  • Set "Virtual Joystick" to "vJoy.1"
  • Set "Protocol" to "IBUS"
  • Click the "Setup" button next to "IBUS" and enable "Use 16-bit channels (Arduino)"
  • Set "Port" to the COM port your Arduino Nano is registering to on your PC
  • Click "Add Bit-mapped Button" once and "Add Axis" twice to add the three channels this board provides
  • Set the "Bits" channel to "1", and configure the individual buttons as: 1, 3, 7, 8, nc, nc, nc, nc, 2, 4, 5, 6, nc, nc, nc, nc
  • Set the axis channels to 2 for X, and 3 for Y
  • In each axis channel, click their "Setup" button and set: Minimum=0, Center=32768, Maximum=65535
  • Once everything is configured click on the "Connect" button to activate the interface

vJoy configuration screen

vJoySerialFeeder configuration screen

vJoySerialFeeder IBUS configuration screen

vJoySerialFeeder bit-mapped button configuration screen

vJoySerialFeeder axis configuration screen