Hacking Nintendont Controller-Configurations

Cyan

GBATemp's lurking knight
Former Staff
Joined
Oct 27, 2002
Messages
23,626
Trophies
2
Age
44
Location
Engine room, learning
XP
15,126
Country
France
Thanks, if not by you I couldn't get it work, so, if HIDTest says a Letter, I need to put a 0? Thank you so much fur reply!!!
You need to put the difference with the "normal" state, as it act like a mask, in binary mode.
You don't need to put the value you see, but give the "bit" which change its state.

each buttons are coded on 8 bits
0000 0000

which means that 1 "part" of the HID can hold 8 different Digital buttons (1 button per bit).
1000 0000 A
0100 0000 B
0010 0000 X
0001 0000 Y
0000 1000 L
0000 0100 R
0000 0010 Start
0000 0001 Select

If you press two buttons at the same time, you will have two bit at "1" at the same time
0010 1000 X + L
1001 0000 A+Y
etc.


Your controller seems to code buttons only on 4 bits instead of 8, the default value was 0F, and when you press A if became 4F
0F = 0000 1111
4F = 0100 1111

which means the "mask" which trigger the A button is the second* bit state in the first 4 bits (not the second's 4 bit part at the end)
0100 0000 is the mask you need to put in the controller.ini, which is 40
(*second in human reading order, left to right, not endian)

in controller.ini
A=40 means that Nintendont will check the second* bit state only
A=4F means that Nintendont will check 5 different bits, and all 5 need to be at 1 to send A command to the game.


40 AND 4F are fine, as long as whatever combination of button you push, it never affects the "1111" part.
if the "1111" are affected in some way, you need to find each possible state of your 5th group and find their binary values.
using "40" ensure that only 1 bit is checked at a time.

If special buttons (turbo, slowmo, etc.) affects these 1111, you could have "0100 1101" and it would make your "4F" not working anymore.
 
  • Like
Reactions: Goku Junior

Goku Junior

Well-Known Member
Member
Joined
Dec 27, 2013
Messages
951
Trophies
0
Age
22
Location
Buenos Aires, Argentina
XP
471
Country
Argentina
You need to put the difference with the "normal" state, as it act like a mask, in binary mode.
You don't need to put the value you see, but give the "bit" which change its state.

each buttons are coded on 8 bits
0000 0000

which means that 1 "part" of the HID can hold 8 different Digital buttons (1 button per bit).
1000 0000 A
0100 0000 B
0010 0000 X
0001 0000 Y
0000 1000 L
0000 0100 R
0000 0010 Start
0000 0001 Select

If you press two buttons at the same time, you will have two bit at "1" at the same time
0010 1000 X + L
1001 0000 A+Y
etc.


Your controller seems to code buttons only on 4 bits instead of 8, the default value was 0F, and when you press A if became 4F
0F = 0000 1111
4F = 0100 1111

which means the "mask" which trigger the A button is the second* bit state in the first 4 bits (not the second's 4 bit part at the end)
0100 0000 is the mask you need to put in the controller.ini, which is 40
(*second in human reading order, left to right, not endian)

in controller.ini
A=40 means that Nintendont will check the second* bit state only
A=4F means that Nintendont will check 5 different bits, and all 5 need to be at 1 to send A command to the game.


40 AND 4F are fine, as long as whatever combination of button you push, it never affects the "1111" part.
if the "1111" are affected in some way, you need to find each possible state of your 5th group and find their binary values.
using "40" ensure that only 1 bit is checked at a time.

If special buttons (turbo, slowmo, etc.) affects these 1111, you could have "0100 1101" and it would make your "4F" not working anymore.

My gamepad have a Turbo and a clear button, but the computer doesn't recognize those buttons, so, Turbo and Clear don't work. So It isn't wrong put 4F instead 40? you says that my controller code buttons in 4 bits, not 8 bits right? so 1111 should not be touched, but if some button modify 1111, it won't work?
I'm a little confused because I'm a newbie to this, I don't know what is a mask, but a bit it would 00 right? Nintendon't show
7F 7F 8B 7F 7F 0F 00 C0 when I'm not pressing nothing at all, so the bits would be:
7F7F8B7F7F0F00C0?

Excuse me for being so bad for this but I have no experience...
Thanks for reply!
 
  • Like
Reactions: Metoroid0

Cyan

GBATemp's lurking knight
Former Staff
Joined
Oct 27, 2002
Messages
23,626
Trophies
2
Age
44
Location
Engine room, learning
XP
15,126
Country
France
a bit is the minimum state you can code, 1 or 0, ON/OFF, power/no power, etc.
a byte is 8 bits. 0x00 is a byte written in hexadecimal, 00000000 is a byte written in binary.


Buttons are in fact coded in 1 bit (On or OFF), I said the controller uses only 4 bits because there seems to be 4 unassigned bits. but it's not "coded on 4 bits".
Only 12 buttons are assigned, as it doesn't require more buttons it just doesn't map the 4 remaining bits : 9ABCxxxx 12345678 (yeah, the order seems strange, but there are different methods of coding bit's order)

0F 00 (hexadecimal) converts to:
00001111 00000000 (binary).
Note: you can use Windows's calculator in advanced mode to convert Hexadecimal to binary.

each button press change one of the twelve 0 to 1.

for your config, here is the Group 5:
1F Y (Triangle button) = 0001 1111
2F B (O button) ......... = 0010 1111
4F A (X button) ..........= 0100 1111
8F X (Square button) .= 1000 1111

Group 6
01 ..................................... = 0000 0001 (L1 ?)
02 Z (R1 button) ................= 0000 0010
04 Left Trigger (L2 Button) = 0000 0100
08 R trigger (R2 button) ....= 0000 1000
10 .................................... = 0001 0000 (Select?)
20 Start Button .................= 0010 0000


If you don't understand binary logic, a mask means "check if the controller status has a 1 at the same position than the mask".
So, in order to create a "mask" you need to find which 0 turns to 1 when you press the button. 1234 5678?

You want your Cross button to be GameCube A button.
When you press Cross, you see the 5th group 0F (0000 1111) changed into 4F (0100 1111). So you know that the second position correspond to the Cross button.

To create your mask, write 8 zeros in binary in the windows calculator : 0000 0000, except at the position where your Cross button is located : 0100 0000
convert it to hexadecimal -> 40

In the controller.ini you can write A=5,40
which means A button is when the 5th group has the "2nd" bit at 1

Nintendon't will check in reverse order :
load the mask 40 -> 01000000 -> the second position is a 1 -> read the 5th group and see if the 2nd position is ALSO at 1. If it's at 1, then it means you currently press Cross on your pad, Nintendont will send A to the game.



Now, if you write A=5,4F
Nintendont load the mask -> 01001111 -> the second position is 1 AND the 5 to 8 is 1 too -> read the 5th group and see if position 2 5 6 7 and 8 are also at 1. If ALL of them are 1, nintendont send A to the game.
if your controller change the "1111" group at any given time, then Nintendont will not send A anymore because it doesn't have all the expected position set to 1.


Conclusion : 40 and 4F both work, but 40 will always work. The less bit you tell nintendont to check, the better it is for compatibility.

You can also create combo now.
Power=6,3F
Can you find which buttons you need to press to shutdown the console?
 

Goku Junior

Well-Known Member
Member
Joined
Dec 27, 2013
Messages
951
Trophies
0
Age
22
Location
Buenos Aires, Argentina
XP
471
Country
Argentina
a bit is the minimum state you can code, 1 or 0, ON/OFF, power/no power, etc.
a byte is 8 bits. 0x00 is a byte written in hexadecimal, 00000000 is a byte written in binary.

don't quote everything :P
Conclusion : 40 and 4F both work, but 40 will always work. The less bit you tell nintendont to check, the better it is for compatibility.

You can also create combo now.
Power=6,3F
Can you find which buttons you need to press to shutdown the console?


So, correct me if I'm wrong, 8 bits is 0000 0000 but in my game pad is 4 bits so is 0000 1111, 4F is 0100 1111, converting to hexadecimal says 40, so is this the method I have to realize?.Thanks for reply again! This issue is complicated but you help me so much! Thank you very much!

PD:I convert 3F to binary to search the power button but it says 111111, there are 6 bits, so I'm not sure how I can put this to hexadecimal.
 

Cyan

GBATemp's lurking knight
Former Staff
Joined
Oct 27, 2002
Messages
23,626
Trophies
2
Age
44
Location
Engine room, learning
XP
15,126
Country
France
there are zeros in front : 0011 1111
(I separate them by group of 4 bits, to be easier to read)

it's like saying 004$ or 0000004$, it's always 4$, you can put as many 0 you want in front of it.

3 = 0011
F = 1111
3F = 00111111

You are on the good track to find the solution!
You are not a newby at making controller.ini anymore ;)


0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010 = 10
B 1011 = 11
C 1100 = 12
D 1101 = 13
E 1110 = 14
F 1111 = 15
 
  • Like
Reactions: Goku Junior

Goku Junior

Well-Known Member
Member
Joined
Dec 27, 2013
Messages
951
Trophies
0
Age
22
Location
Buenos Aires, Argentina
XP
471
Country
Argentina
there are zeros in front : 0011 1111
(I separate them by group of 4 bits, to be easier to read)

it's like saying 004$ or 0000004$, it's always 4$, you can put as many 0 you want in front of it.

3 = 0011
F = 1111
3F = 00111111

I'm not sure, but I think It's 30 because the calculator don't let me put 0011 so I think 0011=3 F=1111 I'ts 30 because to put in hexadecimal it need to have a 8 zeros 0000 0000 3 is 0011 and the rest it's 0000, I'm wrong?

Yes, I'm slow to reply because I'm thinking what I have to do.
 

Cyan

GBATemp's lurking knight
Former Staff
Joined
Oct 27, 2002
Messages
23,626
Trophies
2
Age
44
Location
Engine room, learning
XP
15,126
Country
France
no. not good.

you did great the first time.
3F --> converted to 111111 (or in 8bit: 00111111) (or in 16bit 0000000000111111).
You don't need 16bit, but it's only to illustrate where to put the zeros, and how many.

It means that nintendont will check 6 bits at the same time (6 buttons pressed at the same time) to trigger the Shutdown command.
To find which buttons it is, you need to see which group I used: Power=6,3F

look at my post #43 to see which button correspond to all the "1" in group 6 using this mask: 0011111111
 
  • Like
Reactions: Goku Junior

Goku Junior

Well-Known Member
Member
Joined
Dec 27, 2013
Messages
951
Trophies
0
Age
22
Location
Buenos Aires, Argentina
XP
471
Country
Argentina
you did great the first time.
3F --> converted to 111111 (or in 8bit: 00111111)

It means that nintendont will check 6 bits at the same time (6 buttons pressed at the same time) to trigger the Shutdown command.
To find which buttons it is, you need to see which group I used: Power=6,3F

look at my post #43 to see which button correspond to all the "1" in 0011111111

Thank you very much, I will check the config tomorrow, now I having a year-end party, even I have a poor english you understand me very well,thanks for helping me.

Happy New Year!
 
  • Like
Reactions: Cyan

vgtre

New Member
Newbie
Joined
Feb 12, 2006
Messages
1
Trophies
0
Age
32
Location
Germany, Hessen
Website
Visit site
XP
208
Country
Gambia, The
Hey, i tried to make a controller.ini for an PS2/N64 to USB Converter i use to own since god knows when. It's this one, except the sticker is black :
145016636.jpg


PSX+N64 USB Converter - XK-PC2004

Thanx to the little TUT in this convo it went very good. In HID Test my controller.ini responds just fine.
but it does nothing when i start the game =(
I use the ntsc-j version of the game.
this is my config:

https://www.dropbox.com/s/iob465u93zsrblu/controller.ini

maybe you guys can tell me whats wrong?
I use the PS2 Controller obviously!
Thx in advance! vgtre
PS: i also tried the settings for HID devices in Nintendont.
 

Farowe

Well-Known Member
Member
Joined
Feb 16, 2014
Messages
115
Trophies
0
Location
Mexico City, Mexico
XP
431
Country
Mexico
Here, i made a configuration for the ps4 dualshock 4; its fully working

Just for the record: I mapped the POWER button into the SHARE button; other than that, the mapping is similar to that of the ps3 and ps2 dualshock configurations
 

Attachments

  • PS4DualShock.ini.zip
    828 bytes · Views: 456

Gewku

Member
Newcomer
Joined
Mar 1, 2014
Messages
8
Trophies
0
Age
27
XP
86
Country
Canada
someone PLEASE help me! I am new to this stuff! i have everything working the game works and everything is fine but my problem is the controller.I have the Strike FX PS3/PC Controller by SpeedLink:
Will it work? and how can it work?can anyone help me? i really want to play all these awesome GCN Games!
 

MassiveRican

GBATemp's Unofficial Vigilante
Member
Joined
Aug 2, 2011
Messages
2,453
Trophies
0
Location
Creeping in the Shadows
XP
1,165
Country
Gewku Bro first and foremost please, read the OP and use HIDTest to find out if your controller is compatible. If HIDTest recognizes the inputs follow the instructions on post #5. It shows how to propery map and configure your controller.ini ;)
 

hobblinharry

Member
Newcomer
Joined
Mar 27, 2014
Messages
12
Trophies
0
Age
36
XP
87
Country
United States
So I'm having an uphill battle with trying to get Nintendont to work. For the record I'm on a Wii U (vWii) and using the SD version of Nintendont. Getting the app on my SD card was fine, it loads on HBC fine, and I can navigate through the settings menu and my GameCube ISOs just fine. The problem starts when I try to launch a game, it hangs on something like "patching kernal... 4." I posted this problem in the main Nintendont thread and I was told I was getting that error because I wasn't using a USB controller. That was true, I was trying to play with Wiimote with Classic Controller attatchment. Apparently that doesn't work though as Nintendont is programmed to ONLY work with USB controllers.

So, this is where I am here with this thread: I thought to myself, so the Wii U Pro controller has a USB cable. I tried plugging it into my Wii U instead of using it wireless, and tried to launch a game in Nintendont, however this time instead of the console freezing, it reboots itself to the main Wii U menu. Odd... tried it again without plugging it in and freezes on patching kernal like normal. Plugged it back in, console resets itself. So, it does know I have something plugged into USB. So then I think to myself "maybe its because I dont have a controller.ini" set up. edit: Noticed that when I have my Wii U Pro plugged in with USB cable, instead of it hanging on 4, it does reset, but it counts down to -3 and then resets (yes thats negative 3)

So then, I downloaded the HIDTest app for HBC and it loaded, but when I tried to press anything on the Pro controller while plugged into USB, nothing registered. Also, my Wiimote wasn't responding to exit the app. This made me think that the app doesnt support the new Wii MotionPlus controllers that came out in Nov. 2011 which if this is the case, then like all Wii homebrew apps that don't support this Wiimote, the app will lockup-so I'm not sure if it didn't detect the Pro controller because it locked up or because what I'm trying to do just straight up wont work.

To verify if the Pro controller was HID compliant, I plugged it into my PC and it showed up in Device Manager as a HID compliant device. However when I tried to view it as a gamepad in "Devices and Printers" it shows up as "USB Charger" (this is probably because there is not a proper driver but w/e, it shows up and shows it is HID compliant). So, there HAS to be some sort of way to get this to work with Nintendont.

So I thought, well maybe if I can figure out the values on my computer for what needs to go in controller.ini, I can just throw that on my SD card, and try Nintendont again. Problem is, after extensive googling, I can't find any program that will allow me to troubleshoot my Pro controller and grab the values I need to setup a .ini file.

This is why I am posting this and I am asking for help. Any feedback would be awesome! If we can get this working then it would be a great breakthrough for Wii U owners like me who can just use their Pro controller for this. Of course I still wan't to know why Nintendont wont work with regular Wiimote support, but alas, thats a different problem alltogther.
 

turnandpull

Member
Newcomer
Joined
Apr 3, 2014
Messages
13
Trophies
0
Age
52
XP
76
Country
United States
I have a Logitech Dual Action controller; I've created a controller.ini using HIDtest that looks like this:

[Dual Shock]
VID=046D
PID=C216
Polltype=1
DPAD=1
A=4,20
B=4,10
X=4,40
Y=4,80
Z=5,03
L=5,04
R=5,08
Power=5,10
S=5,20
Left=4,06
Down=4,04
Right=4,02
Up=4,00
RightUp=4,01
DownRight=4,03
DownLeft=4,05
UpLeft=4,07
StickX=0
StickY=1
CStickX=2
CStickY=3
LAnalog=1
RAnalog=1

HIDtest seems to think it's ok as it does not throw the 'your controller.ini isn't for your controller' message. But when loading the newest Nintendont it resets the console at the HID initiation. Anyone have a working controller.ini for this gamepad? Or see something in my controller.ini that would cause it to pass HIDtest but fail in Nintendont? Thanks.
 

Cyan

GBATemp's lurking knight
Former Staff
Joined
Oct 27, 2002
Messages
23,626
Trophies
2
Age
44
Location
Engine room, learning
XP
15,126
Country
France
L/R analogs are using the same offset than CtickY, are you sure they are using the same one?

some of the values seems to trigger two buttons at the same time.
usually, button mapping are 1 2 4 8 10 20 40 80
if Z is set to 3, it means you have button 1 and 2 pressed at the same time to trigger Z. (maybe you chose to do it like that)
but some of the values seems wrong, especially for DPad.

I don't have that controller to test, but maybe we can help you to create the controller.ini.
give the default (no button pressed) values you see on screen.
then for each button, give the full values again.
based on what changes, we can create the correct values to put into the ini file.
 

turnandpull

Member
Newcomer
Joined
Apr 3, 2014
Messages
13
Trophies
0
Age
52
XP
76
Country
United States
Ok thanks Cyan, here goes...

Default:
80 7F 80 80 08 00 44 FD

DPAD L
80 7F 80 80 06 00 44 FD
DPAD R
80 7F 80 80 02 00 44 FD
DPAD U
80 7F 80 80 00 00 44 FD
DPAD D
80 7F 80 80 04 00 44 FD

Power
80 7F 80 80 08 10 44 FD
Start
80 7F 80 80 08 20 44 FD
A
80 7F 80 80 28 00 44 FD
B
80 7F 80 80 18 00 44 FD
X
80 7F 80 80 48 00 44 FD
Y
80 7F 80 80 88 00 44 FD

LeftStick X = Offset "0"
LeftStick Y = Offset "1"

RightStick X = Offset "2"
Rightstick Y = Offset "3"

All the front "triggers" are Digital (no analog like on the GC controller), I'll list them using the WiiU button names as I'm not sure how to put them in the .ini...

Left
80 7F 80 80 08 01 44 FD
Right ("Z" I think)
80 7F 80 80 08 02 44 FD

ZL
80 7F 80 80 08 04 44 FD
ZR
80 7F 80 80 08 08 44 FD

Other info from HID Test

VID 046D PID C216 HIDvers 3 IntClass 0 SubintClass 0 DeviceID 1 HIDversion 40001 bendpointaddress: 81 wMaxPacketSize: 8

I think that's everything. Thanks for any help.

turnandpull
 

Cyan

GBATemp's lurking knight
Former Staff
Joined
Oct 27, 2002
Messages
23,626
Trophies
2
Age
44
Location
Engine room, learning
XP
15,126
Country
France
I find the values not very logical, but someone else did a controller.ini for that controller.
It's exactly the same as yours, except for L/R triggers.
So I guess you correctly created it.

Code:
[Logitech Dual Action]
VID=046D
PID=C216
Polltype=1
DigitalLR=1
DPAD=1
A=4,20
B=4,10
X=4,40
Y=4,80
Z=5,03
L=5,04
R=5,08
Power=5,10
S=5,20
Left=4,06
Down=4,04
Right=4,02
Up=4,00
RightUp=4,01
DownRight=4,03
DownLeft=4,05
UpLeft=4,07
StickX=0
StickY=1
CStickX=2
CStickY=3
LAnalog=0
RAnalog=0

As your controller doesn't have Analog buttons, LAnalog and RAnalog are not used at all. Instead you put DigitalLR=1 to tell nintendont to treat them as digital buttons instead. (pressing L = pressing L Trigger fully)

I don't know why it reset when loading HID.
Did you try older version of nintendont? (I added DigitalLR option in r20)
 
General chit-chat
Help Users
  • No one is chatting at the moment.
    The Real Jdbye @ The Real Jdbye: ass tastes like ass