Extenmote: Manettes NES, SNES, N64 ou Gamecube sur Wii ou Wii U via la télécommande.
Résumé du projet
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
- Supporte les manettes SNES
- Supporte les manettes Gamecube (Testé avec les manettes standard Nintendo et la Wavebird)
- Supporte les manettes NES
Certaines version déjà assemblés sont disponible dans le magasin en ligne:
Retour en haut
Photos
Installation dans une manette NES:
Retour en haut
Support NES et SNES
| Bouton Classique Wii | Manette SNES | Manette SNES (mode NES) | Manette SNES mode analogique | Manette NES |
| D-Pad | D-Pad | D-Pad | D-Pad | D-Pad |
| plustd> | Start | Start | Start | Start |
| moins | Select | Select | Select | Select |
| A | A | B | A | A |
| B | B | Y | B | B |
| X | X | | X | |
| Y | Y | | Y | |
| L | L | | L | |
| R | R | | R | |
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.
Retour en haut
Support N64
| N64 | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 |
|---|
| A |
A |
A |
A |
A |
A |
A |
| B |
B |
B |
B |
B |
B |
B |
| Start |
plus |
plus |
plus |
plus |
plus |
plus |
| L |
L |
ZR & ZL |
D-Down |
D-Down |
ZR & ZL |
L |
| R |
R |
R |
R |
ZR & ZL |
R |
R |
| Z |
ZR & ZL |
L |
L |
L & R |
L |
L |
| 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 |
| C-Up |
C-Up |
C-Up |
C-Up |
C-Up |
N/A |
C-Up |
| C-down |
C-down |
C-down |
C-down |
C-down+X |
N/A |
C-down |
| C-left |
C-left |
C-left |
C-left |
C-left+Y |
Y |
C-left |
| C-right |
C-right |
C-right |
C-right |
C-down |
X |
C-right |
| Mapping | Activation | Jeux |
|---|
| Mapping 0 | L+R+Z+D-up | Mario 64, Kirby 64, Mario Tennis 64 |
| Mapping 1 | L+R+Z+D-down | Mario Kart 64, Mario Kart Wii, Mario Party 2 |
| Mapping 2 | L+R+Z+D-left | Zelda Ocarina of time, Paper Mario |
| Mapping 3 | L+R+Z+D-right | Super Smash Bros |
| Mapping 4 | L+R+Z+C-up | Sin and punishment |
| Mapping 5 | L+R+Z+C-down | Ogre Battle 64, 1080° Snowboarding, Pokemon Snap, Starfox 64 |
| (à faire) | ? | F-Zero X |
| (à faire) | ? | Yoshi's Story |
Aidez moi à mettre en place les mappings nécessaires pour d'autres jeux en me faisant
parvenir des
photos du manuel.
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 |
Retour en haut
Support Gamecube
| Gamecube | Mode 0 | Mode 1 | Mode 2 | Mode 3 |
|---|
| Start |
plus |
plus |
plus |
plus |
| A |
A |
B |
A |
ZR |
| B |
B |
Y |
B |
A |
| X |
X |
A |
X |
B |
| Y |
Y |
X |
Y |
X |
| L |
L |
L |
ZL |
ZL |
| R |
R |
R |
ZR |
Y |
| Z |
ZL & ZR |
minus |
R |
B |
| D-up |
D-up |
D-up |
D-up |
D-up |
| D-down |
D-down |
D-down |
D-down |
D-down |
| D-left |
D-left |
D-left |
D-left |
D-left |
| D-right |
D-right |
D-right |
D-right |
D-right |
| Main stick |
Left stick |
Left stick |
Left stick |
Left stick |
| C stick |
Right stick |
Right stick |
Right stick |
Right stick |
IMPORTANT:
La fonctionalité analogique des boutons gamecube L et R n'est pas implémentée. I me faudrait un jeu utilisant cette fonctionalité pour tester. Est-ce que vous auriez des suggestions?
| 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 | À l'essais dans 1.4 | A+B+X+Y+Dpad-Gauche | Suggestion pour Sonic & All-Stars Racing et probablement bien d'autres jeux. |
| Mapping 3 | À l'essais dans 1.4 | A+B+X+Y+Dpad-Droite | Suggestion pour Sonic & All-Stars Racing. |
Aidez moi à faire mieux en me faisant parvenir les mappings qu'il vous faut.
Retour en haut
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).
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 | Digikey ATMEGA168A-PU-ND selon votre préférence de boîtier |
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.
Retour en haut
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, sans manette | 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.
Retour en haut
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 suceptibles de causer des délais. Cet adaptateur s'efforce de contribuer au délais total le moins possible.
Retour en haut
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:
Retour en haut
Logiciel
| Fichier(s) | Date | Description |
extenmote-1.5.tar.gz (77.2 KB)
extenmote-1.5.hex (29.1 KB)
| 30 Janvier 2013 |
Nouvelle version contenant des correctifs importants!- Nouvelle courbe de transfert dans v1.5. (Bien meilleur pour Zelda)
- Correctif: Il n'est plus nécessaire de rebrancher l'adaptateur lorsqu'on bascule entre le menu Wii et un jeu.
- Correctif: Le problème de défilement continue qui survenait uniquement (à ma connaissance) dans le menu principal de la Wii U a été corrigé.
|
extenmote-1.4.1.tar.gz (61.6 KB)
extenmote-1.4.1.hex (28.2 KB)
| 23 Janvier 2013 |
Nouveau:- 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 fonctionalité 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.
|
extenmote-1.3.tar.gz (35.3 KB)
extenmote-1.3.hex (26.8 KB)
| 6 Janvier 2013 |
Du progrès sur le support Gamecube:- Nouveau mapping rendant les jeux VC SNES plus jouables.
- Implémentation du C stick.
- Note: La fonctionalité 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.
|
extenmote-1.2.tar.gz (34.6 KB)
extenmote-1.2.hex (26.3 KB)
| 1 Janvier 2013 |
Correction spécifique au circuit multiuse PCB2 permettant de réduire la consommation électrique. |
extenmote-1.1.tar.gz (34.5 KB)
extenmote-1.1.hex (26.3 KB)
| 25 Décembre 2012 |
Première publication.
Supporté:- Manette N64, 6 mappings disponibles.
- Manette SNES, 3 mappings disponibles. Testé: Manette américaine SNS-005
- Support des manettes NES: Testé avec la manette Standard (NES-004), la NES MAX (NES-027)
- Projet testé avec plusieurs jeux Virtual Console NES, SNES et N64. Mario Kart Wii fonctionne aussi.
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é.
|
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.
Retour en haut
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.
Retour en haut
Références
Avertissement
Je ne saurais être tenu responsable pour les dommages
que la mise en œuvre des instructions présentées
sur cette page pourraient causer à votre équipement
ou à vous-même. Aussi, je ne donne aucune garantie quant
à l'exactitude des informations et à leur fonctionnement.
Notez toutefois que les procédures ci-haut ont fonctionnées
sans aucun problème pour moi.
Retour en haut