Changes

Jump to navigation Jump to search
no edit summary
Line 1: Line 1: −
The Classic Controller is identified by the 16-bit constant 0x0101 (0xFDFD encrypted) at register address 0xa400fe. It provides 15 buttons, two of which are analog triggers and provide both "clicked" status and a distance pressed measurement, and two X-Y analog sticks.
+
The Classic Controller is identified by the 16-bit constant 0x01 (0xFD encrypted) at register address 0x(4)A400FF. It provides 15 buttons, two of which are analog triggers and provide both "clicked" status and a distance pressed measurement, and two X-Y analog sticks.
 
== Data Format ==
 
== Data Format ==
The Classic Controller reports its information as 6 bytes of data, readable at 0xa40008 and streamable using Data Reporting Modes that include Extension bytes (unused bytes are filled with 0x00). The data is packed into the six bytes as follows ('''after decryption'''):
+
Classic Controller supports three versions of data format: 0x01, 0x02 and 0x03 (register at address 0x(4)A400FE). This register is writable, so you can select data format. The default data format code is 0x01.
 +
 
 +
=== Data Format 0x01 ===
 +
The Classic Controller reports its information as 6 bytes of data, readable at 0x(4)A40008 and streamable using Data Reporting Modes that include Extension bytes (unused bytes are filled with 0x00). The data is packed into the six bytes as follows ('''after decryption'''):
    
{| style="border-collapse: collapse; padding: 0.2em 0.2em 0.2em 0.2em; text-align: center;"
 
{| style="border-collapse: collapse; padding: 0.2em 0.2em 0.2em 0.2em; text-align: center;"
Line 58: Line 61:     
BD{L,R,U,D} are the D-Pad direction buttons. B{ZR,ZL,A,B,X,Y,+,H,-} are the discrete buttons. B{LT,RT} are the digital button click of LT and RT. All buttons are 0 when pressed.
 
BD{L,R,U,D} are the D-Pad direction buttons. B{ZR,ZL,A,B,X,Y,+,H,-} are the discrete buttons. B{LT,RT} are the digital button click of LT and RT. All buttons are 0 when pressed.
 +
 +
=== Data Format 0x02 ===
 +
The main difference from the data format 0x01 is that the Analog Sticks and Triggers have much higher precision: 8 bits (0-255). The Classic Controller reports its information as 9 bytes of data, readable at 0x(4)A40008 ('''after decryption'''):
 +
{| style="border-collapse: collapse; padding: 0.2em 0.2em 0.2em 0.2em; text-align: center;"
 +
|- style="background-color: #ddd;"
 +
| style="background-color: #fff;" |  
 +
| style="border: 1px solid #ccc; padding: 0.2em; text-align: center;" colspan="8"| '''Bit'''
 +
|- style="background-color: #cdc;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | '''Byte'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''7'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''6'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''5'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''4'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''3'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''2'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''1'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''0'''
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 0
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''LX'''<span style="color: #777;">&lt;<span style="color: #c00;">7:0</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 1
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''RX'''<span style="color: #777;">&lt;<span style="color: #c00;">7:0</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 2
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''LY'''<span style="color: #777;">&lt;<span style="color: #c00;">7:0</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 3
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''RY'''<span style="color: #777;">&lt;<span style="color: #c00;">7:0</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 4
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''Unknown'''<span style="color: #777;"></span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 5
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''LT'''<span style="color: #777;">&lt;<span style="color: #c00;">7:0</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 6
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''RT'''<span style="color: #777;">&lt;<span style="color: #c00;">7:0</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 7
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">DR</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">DD</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">LT</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">-</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">H</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">+</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">RT</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd; color: #888;" | 1
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 8
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">ZL</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">B</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">Y</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">A</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">X</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">ZR</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">DL</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">DU</span>
 +
|}
 +
LX,LY are the left Analog Stick X and Y (0-255), RX and RY are the right Analog Stick X and Y (0-255), and LT and RT are the Left and Right Triggers (0-255).
 +
 +
BD{L,R,U,D} are the D-Pad direction buttons. B{ZR,ZL,A,B,X,Y,+,H,-} are the discrete buttons. B{LT,RT} are the digital button click of LT and RT. All buttons are 0 when pressed.
 +
 +
=== Data Format 0x03 ===
 +
Data format 0x03 is the same as 0x02 but there is no unknown value byte. So, the Classic Controller reports its information as 8 bytes of data, readable at 0x(4)A40008 ('''after decryption'''):
 +
{| style="border-collapse: collapse; padding: 0.2em 0.2em 0.2em 0.2em; text-align: center;"
 +
|- style="background-color: #ddd;"
 +
| style="background-color: #fff;" | &nbsp;
 +
| style="border: 1px solid #ccc; padding: 0.2em; text-align: center;" colspan="8"| '''Bit'''
 +
|- style="background-color: #cdc;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | '''Byte'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''7'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''6'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''5'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''4'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''3'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''2'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''1'''
 +
| style="border: 1px solid #ccc; padding: 0.2em; width:3.3em;" | '''0'''
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 0
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''LX'''<span style="color: #777;">&lt;<span style="color: #c00;">7:0</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 1
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''RX'''<span style="color: #777;">&lt;<span style="color: #c00;">7:0</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 2
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''LY'''<span style="color: #777;">&lt;<span style="color: #c00;">7:0</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 3
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''RY'''<span style="color: #777;">&lt;<span style="color: #c00;">7:0</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 4
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''LT'''<span style="color: #777;">&lt;<span style="color: #c00;">7:0</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 5
 +
| style="border: 1px solid #ccc; padding: 0.2em;" colspan="8" | '''RT'''<span style="color: #777;">&lt;<span style="color: #c00;">7:0</span>&gt;</span>
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 6
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">DR</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">DD</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">LT</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">-</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">H</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">+</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">RT</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd; color: #888;" | 1
 +
|- style="background-color: #ded;"
 +
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #eee;" | 7
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">ZL</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">B</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">Y</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">A</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">X</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">ZR</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">DL</span>
 +
| style="border: 1px solid #ccc; padding: 0.2em;" | '''B'''<span style="color: #c00;">DU</span>
 +
|}
 +
LX,LY are the left Analog Stick X and Y (0-255), RX and RY are the right Analog Stick X and Y (0-255), and LT and RT are the Left and Right Triggers (0-255).
 +
 +
BD{L,R,U,D} are the D-Pad direction buttons. B{ZR,ZL,A,B,X,Y,+,H,-} are the discrete buttons. B{LT,RT} are the digital button click of LT and RT. All buttons are 0 when pressed.
 +
 +
=== Calibration ===
    
Nintendo games calibrate the center position of the Analog Sticks upon power-up or insertion of the Classic Controller.
 
Nintendo games calibrate the center position of the Analog Sticks upon power-up or insertion of the Classic Controller.
9

edits

Navigation menu