Like a lot of you, I've found mapping N64 controllers to be quite frustrating. I may have found a solution; well, it has worked for me at least. I am running RecalBox 18.02.09 on an ODROID XU4. I am accessing recalbox via SSH through my Mac. I am using standard usb N64 controllers.
Several posts suggested that the file system is read only, so you first have to make it writable. To do this you must first access the recalbox command line. I did this by accessing it through 'Terminal' on my Mac. To do this, open 'Terminal' and enter the command:
ssh root@your_recalbox_ip
Find your recalbox IP by pressing 'Start' on your recalbox and scrolling down to 'Network Settings'
The password is: recalboxroot
Then enter this command to make the file system 'writable':
mount -o remount,rw /
In all honesty, I do not know if the preceding process was necessary to make the files writable, but I read on a few forum posts and figured it was for the best to do so.
If you have not yet, plug in all of your N64 USB controllers so they register in the config files. I have 4 N64 controllers attached to my ODROID XU4. Restart your system.
Next step is to open 'RECALBOX' under shared devices in Finder. (If you are using Windows there are a couple of options for using SSH, google it).
Navigate to /recalbox/share/system/configs/mupen64/
Open mupenplusn64.cfg in 'TextEdit'
Scroll down to [Input-SDL-Control#]
(# indicates the controller number, in my case I have 4-N64 controllers attached, so I have an entry for Input-SDL-Control1, Input-SDL-Control2, Input-SDL-Control3, & Input-SDL-Control4)
For each controller you will want to edit the following:
- The default controller configuration mode is 2, which is automatic. Change the controller configuration mode to 0.
It should read:
Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic
mode = 0
- Change the Digital button configuration mappings to the following:
Digital button configuration mappings
DPad R = "hat(0 Right)"
DPad L = "hat(0 Left)"
DPad D = "hat(0 Down)"
DPad U = "hat(0 Up)"
Start = "button(9)"
Z Trig = "button(7)"
B Button = "button(8)"
A Button = "button(6)"
C Button R = "button(1)"
C Button L = "button(3)"
C Button D = "button(2)"
C Button U = "button(0)"
R Trig = """button(5)”"
L Trig = "button(4)"
Mempak switch = ""
Rumblepak switch = ""
Analog axis configuration mappings
X Axis = "axis(0-,0+)"
Y Axis = "axis(1-,1+)"
I am using DragonRise Inc. Generic USB Joysticks.
This is what my configuration shows:
[Input-SDL-Control1]
Mupen64Plus SDL Input Plugin config parameter version number. Please don't change this version number.
version = 2
Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic
mode = 0
Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number
device = 0
SDL joystick name (or Keyboard)
name = "DragonRise Inc. Generic USB Joystick "
Specifies whether this controller is 'plugged in' to the simulated N64
plugged = True
Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 5=Rumble pak
plugin = 2
If True, then mouse buttons may be used with this controller
mouse = False
Scaling factor for mouse movements. For X, Y axes.
MouseSensitivity = "2.00,2.00"
The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0. For X, Y axes.
AnalogDeadzone = "4096,4096"
An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80). For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value
AnalogPeak = "32768,32768"
Digital button configuration mappings
DPad R = "hat(0 Right)"
DPad L = "hat(0 Left)"
DPad D = "hat(0 Down)"
DPad U = "hat(0 Up)"
Start = "button(9)"
Z Trig = "button(7)"
B Button = "button(8)"
A Button = "button(6)"
C Button R = "button(1)"
C Button L = "button(3)"
C Button D = "button(2)"
C Button U = "button(0)"
R Trig = """button(5)”"
L Trig = "button(4)"
Mempak switch = ""
Rumblepak switch = ""
Analog axis configuration mappings
X Axis = "axis(0-,0+)"
Y Axis = "axis(1-,1+)"