Il y a quelques années, j'ai réalisé un
projet utilisant les ports de Gamecube
de la Wii pour y raccorder des manettes NES, SNES et N64. Malheureusement, les
ports de Gamecube ont été retirés des nouvelles Wii et la Wii U n'en offre
pas non plus.
Ce nouveau projet utilise donc le port d'extension de la télécommande Wii (wiimote),
exactement comme la manette classique de Nintendo. En fait, le microcontrôleur
de ce projet fait tout simplement semblant d'en être une.
Permet de jouer aux jeux virtual console avec une manette d'origine.
Fonctionne sur la Wii U et sur les Wii dépourvues de ports Gamecube.
Apparait à la Wii comme étant une manette classique.
Supporte les manettes N64[2]
Supporte les manettes SNES
Supporte les manettes Gamecube (Testé avec les manettes standard Nintendo[1] et la Wavebird)
Supporte les manettes NES
[1] Manettes DOL-008: Version originale (Gamecube), version japonaise avec câble plus long et édition Super Smash Bros. [2] Ne fonctionne pas avec « N64 reality quest glove »
Certaines version déjà assemblées de ce projet sont disponibles dans le magasin en ligne:
Lorsqu'une manette de SNES est utilisée pour des jeux SNES ou qu'une manette NES est utilisée pour des jeux NES, le mapping
est très simple. Par contre, l'utilisation d'une manette SNES pour jouer à un jeu NES n'est pas idéale si A et B contrôlent A et B du côté Wii.
Pour activer le mode NES:
Appuyez sur START+SELECT+L+R+DOWN simultanément. Dans ce mode, les boutons SNES sont mieux disposés pour les jeux VC NES.
Pour activer le mode analogique:
Appuyez sur START+SELECT+L+R+LEFT simultanément. Dans ce mode, le D-Pad contrôle le joystick analogique gauche de la manette classique. Ce mode n'est pas vraiment utile, mais battre un ami à ainsi peut s'avérer plutôt drôle.
Pour retourner au mode standard:
Appuyez sur START+SELECT+L+R+UP simultanément.
Bouton Home:
Donnez trois coups rapides (Triple-clic) sur le bouton start pour activer le bouton home.(Depuis la version 1.9.5)
Support N64
N64
Mode 0
Mode 1
Mode 2
Mode 3
Mode 4
Mode 5
Mode 6
Mode 7
Mode 8
A
A
A
A
A
A
A
A
A
B
B
B
B
B
B
B
B
B
B
Y
Start
plus
plus
plus
plus
plus
plus
plus
plus
plus
L
L
ZR
D-Down
D-Down
ZR
L
D-right
ZR
L
R
R
R
R
ZR
R
R
R
R
R
Z
ZR
L
L
L & R
L
L
L
X & Y
ZR
D-up
D-up
D-up
D-up
D-up
D-up
D-up
D-up
D-up
D-up
D-down
D-down
D-down
D-down
D-down
D-down
D-down
D-down
D-down
D-down
D-left
D-left
D-left
D-left
D-left
D-left
D-left
D-left
D-left
D-left
D-right
D-right
D-right
D-right
D-right
D-right
D-right
D-right
D-right
D-right
C-Up
C-Up
C-Up
C-Up
C-Up
N/A
C-Up
N/A
C-up
C-Up
C-down
C-down
C-down
C-down
C-down+X
N/A
C-down
X
C-down
A
C-left
C-left
C-left
C-left
C-left+Y
Y
C-left
Y
C-left
X
C-right
C-right
C-right
C-right
C-right
X
C-right
ZR
C-right
C-right
Mapping
Activation
Jeux
Disponible depuis
Mapping 0
L+R+Z+D-up
Mario 64, Kirby 64, Mario Tennis 64, Wii64*, Bomberman hero, Mario Golf, Pokemon Puzzle League
v1.0
Mapping 1
L+R+Z+D-down
Mario Kart 64, Mario Kart Wii, Mario Party 2, Cruisn' USA, Wave race 64, Custom robo v2
Aidez moi à mettre en place les mappings nécessaires pour d'autres jeux en me faisant
parvenir des
photos du manuel.
Combinaisons spéciales:
* Lorsque le mapping 0 est actif, il est possible d'envoyer la combinaison de X et Y appuyés afin d'accéder
au menu de Wii64. Il suffit d'appuyer sur les boutons suivants simultanément: Les 4 boutons C + D-Pad gauche + Z.
ZL + ZR:
Avant la version 2.1.1, ZL et ZR étaient toujours enfoncés simultanément. À présent, seul Zr est enfoncé (par exemple, avec le Mapping 0 lorsqu'on
appuie sur Z). L'ancien comportement est encore disponible. Pour alterner entre les modes Zr seul et Zr+Zl, utilisez la combinaison L+R+Z+Joystick_down.
(c'est à dire: Enfoncez et maintenez enfoncé L, R et Z, puis pointez le stick vers le haut)
Bouton Home:
Donnez trois coups rapides (Triple-clic) sur le bouton start pour activer le bouton home.(Depuis la version 1.9.5)
Conversion des valeurs du joystick:
La manette classique rapporte la position des axes sous 6 bit alors que la manette N64 retourne cette
position sous 8 bit. La sensation d'une conversion linéaire n'était pas bonne. Après plusieurs essais, j'ai
trouvé qu'en utilisant les courbes ci-dessous nous sommes bien plus près de la sensation d'origine.
Il faut noter que sous 6 bits, une valeur entre -32 et +31 peut être représentée mais qu'en pratique
la manette classique retourne des valeurs environ entre -24 et 24.
Note: La courbe est appliquée de manière symétrique au mouvement du centre vers un côté. Les valeurs de sortie sont donc 0 à 31. Notez aussi que la valeur retournée par les manettes N64 standard fabriquées par Nintendo n'atteint pas le maximum de 127.
Sélection de la courbe avec firmware v1.5:
Dans la version 1.5, deux courbes sont offertes et configurables en appuyant les combinaisons indiqués ci-dessous. l'adaptateur mémorise la dernière configuration afin de vous éviter d'avoir à refaire la combinaison à chaque branchement.
L+R+Z+A: Courbe par défaut(v1.5) L+R+Z+B: Courbe alternative (v1.4)
Sélection dans les version précédentes:
Version 1.4.1: La courbe par défaut est v1.4, la courbe alternative est v1.1.
Version 1.4 and 1.3: Aucun choix de courbe possible..
Plage de valeurs des manettes N64:
La courbe de la version 1.1 ne fonctionnait pas très bien avec certaines manettes. Le symptôme était
l'impossibilité d'atteindre l'effet maximal dans le jeu (ex: course, virage serré). En tenant compte
que les valeurs attendues du côté Wiimote se situent entre -24 et 24 et des valeurs retournées
par les manettes N64 dans la pratique, on peut facilement comprendre pourquoi. Quoi qu'il en soit,
le problème a été corrigé dans les version 1.4.1 et 1.5.
Voici un tableau démontrant le genre de différences observées:
Manette
Axe des X
Axe des Y
État du stick
Standard N64 rouge
-82 à 79
-85 à 83
Comme neuf
Standard N64 aqua
-80 à 80
-80 à 85
Comme neuf
Standard N64 grise
-75 à 75
-80 à 77
Usé
Standard N64 mauve translucide
-72 à 80
-80 à 80
Assez usé
Standard N64 jaune
-68 à 64
-69 à 80
Extrêmement usé (jugé inutilisable)
Hori pad mini
-100 à 100
-100 à 100
Comme neuf
Marque inconnue
-88 à 87
-90 à 85
Comme neuf
Marque inconnue
-128 à 127
-128 à 127
Comme neuf.
Support Gamecube
Gamecube
Mode 0
Mode 1
Mode 2
Mode 3
Mode 4
Mode 5
Start
plus
plus
plus
plus
plus
plus
A
A
B
A
ZR
B
A
B
B
Y
B
A
Y
X
X
X
A
X
B
A
R
Y
Y
X
Y
X
X
B
L
L
L
ZL
ZL
L
ZL
R
R
R
ZR
Y
R
ZR
Z
ZL & ZR
minus
R
B
ZR
minus
D-up
D-up
D-up
D-up
D-up
D-up
D-up
D-down
D-down
D-down
D-down
D-down
D-down
D-down
D-left
D-left
D-left
D-left
D-left
D-left
D-left
D-right
D-right
D-right
D-right
D-right
D-right
D-right
Main stick
Left stick
Left stick
Left stick
Left stick
Left stick
Left stick
C stick
Right stick
Right stick
Right stick
Right stick
Right stick
Right stick
Bouton Home:
Donnez trois coups rapides (Triple-clic) sur le bouton start pour activer le bouton home.(Depuis la version 1.9.5)
Appuyez simultanément sur ces boutons pour activer le bouton home: A+B+Y+X+Z+C-Bas (Version 1.7, 1.8 et 1.9 seulement)
Fonctionnalité analogique des boutons L/R:
La fonctionnalité analogique des boutons gamecube L et R n'est qu'implémentée depuis la version 1.7. Dans les version précédentes,
seul les boutons de fin de course L et R étaient fonctionnels.
Mapping
Firmware
Activation
Jeux
Mapping 0
Depuis 1.3
A+B+X+Y+Dpad-Haut
Mario Kart Wii
Mapping 1
Depuis 1.3
A+B+X+Y+Dpad-Bas
Jeux Virtual Console SNES
Mapping 2
Depuis 1.4
A+B+X+Y+Dpad-Gauche
Suggestion pour Sonic & All-Stars Racing et probablement bien d'autres jeux.
Mapping 3
Depuis 1.4
A+B+X+Y+Dpad-Droite
Suggestion pour Sonic & All-Stars Racing.
Mapping 4
Depuis 1.7
A+B+X+Y+Z+C-gauche
Pour Devolution.
Mapping 5
Depuis 1.9.5
A+B+X+Y+Z+C-droite
Super Mario 3D World.
Aidez moi à faire mieux en me faisant parvenir les mappings qu'il vous faut.
Combinaisons spéciales:
A+B+X+Y+L: Active/Déactive une option permettant d'activer les boutons L/R plus tôt en utilisant les valeurs analogiques des gâchettes L/R plutôt que d'utiliser uniquement les boutons butoirs. - Depuis la version 2.2.1
Schémas
Voici deux schémas. Un est pour un MCU en boîtier DIP (gros avec broches), l'autre en boîtier TQFP (petit, montage en surface).
Version DIP
Version TQFP
Connecteurs NES et SNES
Connecteurs N64 et GC
Connecteur Wiimote
Connecteur Wiimote
Alimentation:
L'alimentation 3.3v provenant de la Wiimote est actuellement utilisée. Les manettes standard NES et SNES,
bien que conçues pour 5 volt, fonctionnent bien. Certaines manettes fabriquées par des tiers ou encore
des manettes spéciales comme la NES Advantage ne fonctionneront pas. Les manettes N64 sont conçues pour
fonctionner à 3.3 volt alors aucun problème ici. Les manettes Gamecube utilisent normalement deux sources
d'alimentation. Dans le cas des manettes conçues par Nintendo, il semble que l'alimentation 5 volt ne
soit requise que pour la fonction vibration. Pour ce projet, simplement ne pas brancher le fil 5 volt
de la manette Gamecube.
De la durée des piles:
D'après les mesures exposées dans la section suivante, avec une manettes SNES, la durée
des piles sera semblable à celle obtenue avec la manette classique. Avec une manette N64, les piles
dureront moins longtemps, mais la durée totale devrait être plus longue que si la wii motion
plus est utilisée...
Voici une liste des pièces avec suggestion de composantes pour le montage par trous.
Ref.
Description
Suggestions
R1
1.5K resistor
Digikey S1.5KQCT-ND ou autre.
C1,C2
18pf ceramic capacitors
Digikey BC1004CT-ND
C3,C4
.1uF ceramic capacitors
Digikey BC2665CT-ND
P1
2x3 .100" pitch standard header
Digikey 609-3218-ND
Y1
Crystal 12 Mhz
Digikey CTX904-ND
U1
Atmega168a (Ou Atmega168)
Digikey ATMEGA168A-PU-ND
Note: Si un montage SNES seulement est réalisé, Y1, C1 et C2 ne sont pas requis si les Fuses sont programmés pour
utiliser l'oscillateur interne de 8 Mhz.
Voici un montage réalisé avec les pièces ci-dessus.
Consommation
La consommation électrique est en lien direct avec la durée des piles. Plus la consommation est élevée,
plus il faudra changer les piles rapidement. Comme le démontre le tableau suivant, cet adaptateur consomme
1.6mA à lui seul, mais à cela s'ajoute la consommation de la manette utilisée. J'ai également mesuré
la consommation de divers accessoires pour télécommande Wii afin d'avoir un point de référence.
Note: Toutes les mesures ont été prises à 3.3v entre la télécommande wii et l'accessoire en question à
l'aide d'une rallonge wiimote et d'un multimètre.
Accessoire
Consommation
Extenmote v1.1, Atmega168, no controller connected
1.6mA
Classic controller RVL-005
1.7mA typique, environ 3mA tout boutons enfoncés
Classic controller RVL-005(-02)
1.36mA typique, environ 3mA tout boutons enfoncés
Extenmote v1.1, Atmega168, avec manette SNES américaine standard (SNS-005)
2mA
Nunchuk RVL-004
2.3mA typique
Extenmote v1.1, Atmega168, avec manette Gamecube DOL-003 blanche (Japon)
4.4mA
Immitation de manette classique
5.5mA typique
Extenmote v1.1, Atmega168, avec manette N64 Horipad mini
5.6mA
Récepteur de Nunchuk sans fil (marque inconnue)
11.9mA typique
Extenmote v1.1, Atmega168, avec manette N64 standard NUS-005
15.4mA
Wii motion plus
22.5mA (Chute à environ 1.5mA lorsqu'un accessoire est branché)
Conclusions:
Extenmote avec une manette de N64 consomme moins que la Wii motion plus. La durée de piles sera moins bonne
qu'avec une manette Classique mais devrait dépasser la durée obtenue avec l'accessoire Wii motion plus.
Nintendo a fait du très bon travail avec la manette classique et la Nunchuk.
L'accessoire Wii motion plus consomme 22.5mA, mais dès qu'un accessoire (Manette classique, Nunchuk ou Extenmote) y est
branché, sa consommation chute à 1.5mA. L'impact de sa présence est réduit, mais pour étirer au maximum la durée de vie
des piles, il est tout de même préférable de le retirer lorsqu'il n'est pas requis.
Fait intéressant: La manette N64 Horipad mini consomme bien moins que la manette N64 standard.
L'adaptateur utilise le mode 'Extended Standby' du Atmega168. Cela réduit la consommation de l'adaptateur de 4mA à 1.6mA.
Délais
L'utilisation de l'adaptateur cause un léger délais supplémentaire. C'est inévitable. La bonne nouvelle est qu'il
est très court. (Moins de 3 millièmes de seconde)
Symbole
Paramètre
Valeur
Unités
Commentaires
A
Temps interrogation N64/Gamecube
0.4
ms
B
Délais causé par l'adaptateur
2.84
ms
Pire cas observé.
C
Délais interrogation wiimote à mise à jour N64/GC
2.35
ms
Point de départ variable.
D
Temps de communication wiimote
1.5
ms
E
Interval d'interrogation wiimote
5
ms
Note: Je définis le délais causé par l'adaptateur comme étant le temps entre le moment ou les donnés de la manette ont été complètement reçues et le moment où cesdites données ont été retransmises au complet à la wiimote.
Note 2: L'ensemble du système (manette>adaptateur>wiimote>bluetooth>wii>Jeu>Télé) comporte plusieurs autres éléments susceptibles de causer des délais. Cet adaptateur s'efforce de contribuer au délais total le moins possible.
Compatibilité
Du point de vue de la console Wii ou Wii U, l'adaptateur n'est qu'une manette classique et devrait donc fonctionner avec n'importe quel jeu supportant la manette classique. Il n'y a pas de jeu incompatible connu à ce jour.
Malgré tout, on me pose souvent la question: Est-ce que l'adaptateur est compatible avec le jeu X. Voici donc une courte liste de logiciels testés:
Menu Wii, et Wii U
Mario Kart 8 (Wii U)
Super Smash Bros Brawl (Wii)
Sonic & All Stars Racing transformed (Wii U)
Super Mario 3D World
Jeux Virtual Console SNES et NES
Jeux Virtual Console N64: Mario 64, Kirby 64, Mario Tennis 64, Wii64, Bomberman hero, Mario Golf, Pokemon Puzzle League, Mario Kart 64, Mario Party 2, Cruisn' USA, Wave race 64, Custom robo v2, Zelda Ocarina of time, Paper Mario, Super Smash Bros, Sin and punishment, Ogre Battle 64, 1080° Snowboarding, Pokemon Snap, Starfox 64, F-Zero X, Yoshi's Story
Cette liste ne se veut pas exhaustive. Si un jeu n'y figure pas, il y de très bonnes chances
qu'il fonctionne très bien avec l'adaptateur. Si vous testez un jeu non listé, veuillez m'en faire
part pour que je l'ajoute.
Circuit imprimé
Il n'y a pas encore de circuit imprimé dédié pour ce projet, et ce n'est pas nécessaire. J'utilise mon circuit à usage multiples
Multiuse PCB2 qui convient à merveille.
Des circuits déjà assemblés et programmés sont disponible dans le magasin en ligne:
Ajout d'une option pour les manette Gamecube permettant d'activer les boutons L/R plus tôt en utilisant les valeurs analogiques des gâchettes L/R plutôt que d'utiliser uniquement les boutons butoirs. La commutation de cette option se fait en appuyant sur A+B+X+Y+L. La configuration est mémorisée même si l'alimentation est coupée.
Nouveau mapping de bouton. (activé par L+R+Z+Joystick_bas)
Valeurs d'axes améliorées en mode 'haute résolution'.
N64: ZL et ZR ne sont plus liés. Par défaut, c'est désormais seulement Zr qui s'active. L'ancien comportement peut être commuté en faisant L+R+Z+Joystick_haut.
Le bouton HOME peut maintenant être activé en faisant un Triple-clic sur le bouton start (SNES/NES/GC/N64)
Prévention d'un «overflow» 8bit. Corrige le symptôme « Direction gauche ne fonctionne pas » pour certaines imitations de manettes N64 de mauvaise qualité. Notez que la qualité générale de la manette n'en n'est pas améliorée. Elle fonctionnera aussi mal que sur un N64.
Ajustement de la vitesse de communication Gamecube/N64 (Note: N'a pas d'effet sur le «lag» ou délais de réponse de l'adaptateur)
Correction d'un bug d'initialisation du EEPROM (Mapping précédent non mémorisé)
[GC/N64] Les donnés des axes des manettes N64 et GC sont maintenant concaténées à la structure de donnés standard de manette classique. Certains logiciels seront éventuellement capable de détecter cette fonctionnalité pour utiliser les axes à la pleine résolution d'origine.
[GC] Ajout d'une combinaison de bouton permettant d'activer le bouton Home.
[GC] Implémentation de la fonctionnalité analogique des leviers L et R.
[GC/N64] Maintenir Start enfoncé au branchement de la manette (ou mise sous tension) permet de déactiver les combinaisons de boutons liées au mapping. (Au cas où un jeu aurait besoin de la même combinaison).
Ajout de deux mappings N64 pour les jeux F-Zero X et Yoshi's Story.
Correction des donnés de calibration pour libOGC (permet notamment à Wii64 de fonctionner).
N64: Lorsque le mapping 0 est actif, la combinaison des quatre boutons C, D-Pad gauche et Z permet l'envoi d'un état appuyé des boutons X et Y. Utile pour accéder au menu de Wii64.
La courbe de transfert N64 par défaut (v1.5) n'était pas vraiment active par défaut. Il devait être explicitement activé avec la combinaison L+R+Z+A. (corrigé)
Inclusion d'un outil de test dans le code source. (Requiert Linux et un adaptateur wusbmote)
Deux nouveaux mappings expérimentaux pour Gamecube.
Mise à jour de la courbe de réponse du joystick N64. Fonctionne avec les manettes plus usées. (L'ancienne courbe peut être rappelée à l'aide d'une combinaison de boutons.
La configuration de l'adaptateur (Mappings, courbes) est maintenant storée en mémoire non volatile. Il n'est plus nécessaire de reconfigurer l'adaptateur à chaque branchement.
Problèmes connus:
Certaines manettes NES ne fonctionnent pas à cause du voltage d'alimentation de seulement 3.3v (ex: La NES Advantage)
La fonctionnalité analogique des 'sliders' L et R n'est pas implémentée. (Cela ne semble pas causer problème).
Lorsqu'on passe du menu principal Wii à un jeu, il faut rebrancher l'adaptateur.
Nouveau mapping rendant les jeux VC SNES plus jouables.
Implémentation du C stick.
Note: La fonctionnalité analogique des 'sliders' L et R n'est toujours pas implémentée. J'aurais besoin d'un jeu se servant de cette fonction pour tester. Auriez-vous des suggestions?
Problèmes connus:
Certaines manettes NES ne fonctionnent pas à cause du voltage d'alimentation de seulement 3.3v (ex: La NES Advantage)
Le support des manettes Gamecube n'est pas terminé.
Les manettes de N64 usées ne fonctionne pas bien avec la courbe de transfert.
Lorsqu'on passe du menu principal Wii à un jeu, il faut rebrancher l'adaptateur.
Utilisation des fichiers .hex
Les fichiers .hex sont pour programmer l'Atmega168a. Les "fuses bytes" pour ce projet
sont: extended_byte=0x01, high_byte=0xdf, low_byte=0xdf.
Pour de l'information sur la programmation d'un AVR, visitez ma page sur la
programmation d'AVR
Code source (fichiers .tar.gz):
À moins d'indications contraires, le code source est rendu publique sous la
licence GPL v3. Consulter le fichier gpl.txt inclus dans le .tar.gz pour plus d'informations.
Le projet se compile avec avr-gcc sous Linux.
Ce projet est aussi disponible sur GitHub! Pour suggérer de nouvelles fonctionnalités, signaler un problème ou contribuer au projet,
vous pouvez m'écrire ou utiliser le dépôt GitHub: https://github.com/raphnet/extenmote
Donnés brutes
Afin d'assurer sa compatibilité avec les logiciels déjà existants, mon adaptateur extenmote doit convertir les valeurs d'axes au format utilisé par la manette classique. Malheureusement, cela occasionne une diminution de précision. Par exemple, la position du stick gauche passe de 8 bits (N64/GC) à 6 bits (manette classique]). Il est donc clair que les manettes N64 et Gamecube utilisées via l'adaptateur ne fonctionnent pas au maximum de leur potentiel.
À partir de la version 1.8, l'adaptateur concatène les valeurs analogiques brutes à la structure de donnée standard d'une manette classique. Les logiciels supportant la manette classique continuent donc de fonctionner, mais les donnés brutes sont disponibles et utilisables là ou cela peut être bénéfique.
Cette fonctionnalité est documentée sur sa propre page. Un exemple utilisant une libOGC modifiée est disponible.
Photos provenant des utilisateurs
J'aime bien voir comment les autres s'y prennent pour assembler mes projets. Vous
pouvez me faire parvenir des photos de vos montages et je les afficherai ici. Veuillez
également m'indiquer si vous souhaitez que j'affiche votre nom/alias et pays. Par défaut
je ne mentionnerai que votre prénom.
J'ai reçu ces deux photos d'un utilisateur ayant assemblé le tout à même
sa manette de N64. Notez la soudure habile du MCU montage en surface:
2013-02: Alexandre me fait parvenir ces deux photos du circuit installé dans une manette de N64.
2013-02-13:
Samuel m'a envoyé ces photos du circuit installé dans une manette NES.
2013-08-12:
Santiago a fabriqué l'adaptateur dans un boîtier de Gameboy. Le branchement des manettes se fait via une
sélection de cartouches de jeu modifiées!
2015-05-04:
Jonathan au Canada a fabriqué cette paire d'adaptateurs SNES/Gamecube à Wiimote:
Mars 2016:
Jonathan a ajouté deux autres adaptaters à sa collection: N64/Gamecube à Wiimote:
Références
Les pages suivantes m'ont été d'une grande utilité pour la réalisation de ce projet.
Je ne saurais être tenu responsable pour les dommages
que l'utilisation des informations ou la mise en œuvre des instructions présentées
sur cette page pourrait causer à votre équipement,
à vous-même ou à autrui. Aussi, je ne donne aucune garantie quant
à l'exactitude des informations et à leur fonctionnement.