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.

Certaines version déjà assemblés sont disponible dans le magasin en ligne:

goto top Retour en haut


Photos

Adaptateur SNES

Adaptateur SNES

En développement

En développement

En développement

En développement

En développement

En développement

The lost levels

The lost levels

Mario Kart Wii

Mario Kart Wii



Installation dans une manette NES:


goto top 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
plus 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.

goto top Retour en haut


Support N64

N64Mode 0Mode 1Mode 2Mode 3Mode 4Mode 5Mode 6Mode 7
A A A A A A A A A
B B B B B B B B B
Start plus plus plus plus plus plus plus plus
L L ZR & ZL D-Down D-Down ZR & ZL L D-right ZL & ZR
R R R R ZR & ZL R R R R
Z ZR & ZL L L L & R L L L X & Y
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-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
C-Up C-Up C-Up C-Up C-Up N/A C-Up N/A C-up
C-down C-down C-down C-down C-down+X N/A C-down X C-down
C-left C-left C-left C-left C-left+Y Y C-left Y C-left
C-right C-right C-right C-right C-right X C-right ZL & ZR C-right
MappingActivationJeuxDisponible depuis
Mapping 0L+R+Z+D-upMario 64, Kirby 64, Mario Tennis 64, Wii64*v1.0
Mapping 1L+R+Z+D-downMario Kart 64, Mario Kart Wii, Mario Party 2v1.0
Mapping 2L+R+Z+D-leftZelda Ocarina of time, Paper Mariov1.0
Mapping 3L+R+Z+D-rightSuper Smash Brosv1.0
Mapping 4L+R+Z+C-upSin and punishmentv1.0
Mapping 5L+R+Z+C-downOgre Battle 64, 1080° Snowboarding, Pokemon Snap, Starfox 64v1.0
Mapping 6L+R+Z+C-leftF-Zero Xv1.6
Mapping 7L+R+Z+C-rightYoshi's Storyv1.6

* 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.

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:
ManetteAxe des XAxe des YÉtat du stick
Standard N64 rouge-82 à 79-85 à 83Comme neuf
Standard N64 aqua-80 à 80-80 à 85Comme neuf
Standard N64 grise-75 à 75-80 à 77Usé
Standard N64 mauve translucide-72 à 80-80 à 80Assez usé
Standard N64 jaune-68 à 64-69 à 80Extrêmement usé (jugé inutilisable)
Hori pad mini-100 à 100-100 à 100Comme neuf
Marque inconnue-88 à 87-90 à 85Comme neuf

goto top Retour en haut


Support Gamecube

GamecubeMode 0Mode 1Mode 2Mode 3Mode 4
Start plus plus plus plus plus
A A B A ZR B
B B Y B A Y
X X A X B A
Y Y X Y X X
L L L ZL ZL L
R R R ZR Y R
Z ZL & ZR minus R B Zr
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-left D-left D-left D-left D-left D-left
D-right D-right D-right D-right D-right D-right
Main stick Left stick Left stick Left stick Left stick Left stick
C stick Right stick Right stick Right stick Right stick Right stick
Bouton Home:
Appuyez simultanément sur ces boutons pour activer le bouton home: A+B+Y+X+Z+C-Bas

Fonctionalité analogique des boutons L/R:
La fonctionalité 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 était fonctionnels.

MappingFirmwareActivationJeux
Mapping 0Depuis 1.3A+B+X+Y+Dpad-HautMario Kart Wii
Mapping 1Depuis 1.3A+B+X+Y+Dpad-BasJeux Virtual Console SNES
Mapping 2Depuis 1.4A+B+X+Y+Dpad-GaucheSuggestion pour Sonic & All-Stars Racing et probablement bien d'autres jeux.
Mapping 3Depuis 1.4A+B+X+Y+Dpad-DroiteSuggestion pour Sonic & All-Stars Racing.
Mapping 4Depuis 1.7A+B+X+Y+Z+C-gauchePour Devolution.

Aidez moi à faire mieux en me faisant parvenir les mappings qu'il vous faut.

goto top 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).

Version DIP

Version DIP

Version TQFP

Version TQFP

Connecteurs NES et SNES

Connecteurs NES et SNES

Connecteurs N64 et GC

Connecteurs N64 et GC

Connecteur Wiimote

Connecteur Wiimote

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.DescriptionSuggestions
R11.5K resistorDigikey S1.5KQCT-ND ou autre.
C1,C218pf ceramic capacitorsDigikey BC1004CT-ND
C3,C4.1uF ceramic capacitorsDigikey BC2665CT-ND
P12x3 .100" pitch standard headerDigikey 609-3218-ND
Y1Crystal 12 MhzDigikey CTX904-ND
U1Atmega168aDigikey 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.


goto top 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 manette1.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 classique5.5mA typique
Extenmote v1.1, Atmega168, avec manette N64 Horipad mini5.6mA
Récepteur de Nunchuk sans fil (marque inconnue)11.9mA typique
Extenmote v1.1, Atmega168, avec manette N64 standard NUS-00515.4mA
Wii motion plus 22.5mA (Chute à environ 1.5mA lorsqu'un accessoire est branché)
Conclusions:

goto top 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)
SymboleParamètreValeurUnitésCommentaires
ATemps interrogation N64/Gamecube0.4ms
BDélais causé par l'adaptateur2.84msPire cas observé.
CDélais interrogation wiimote à mise à jour N64/GC2.35msPoint de départ variable.
DTemps de communication wiimote1.5ms
EInterval d'interrogation wiimote5ms
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.

goto top 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:

goto top Retour en haut


Logiciel

Fichier(s)DateDescription
extenmote-1.9.tar.gz (83.1 KB)
extenmote-1.9.hex (33.6 KB)
24 Août 2013 Améliorations de l'accès aux données brutes des manettes:
  • Les données des manettes SNES et NES sont maintenant exposées
  • Implémentation d'une mode spécial l'ID de l'extension wiimote dépends de la manette utilisée.
  • Les données brutes N64 et GC sont maintenant disponibles telles quelles et incluent donc aussi les boutons.
Détails techniques ici: http://www.raphnet.net/programmation/extenmote_raw/index.php.
extenmote-1.8.tar.gz (82.4 KB)
extenmote-1.8.hex (31.3 KB)
24 Juillet 2013
  • [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 fonctionalité pour utiliser les axes à la pleine résolution d'origine.
extenmote-1.7.tar.gz (81.4 KB)
extenmote-1.7.hex (30.8 KB)
17 Juillet 2013 Fonctionalités Gamecube:
  • [GC] Ajout d'un mapping pour Devolution
  • [GC] Ajout d'une combinaison de bouton permettant d'activer le bouton Home.
  • [GC] Implémentation de la fonctionalité 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).
extenmote-1.6.tar.gz (80.5 KB)
extenmote-1.6.hex (29.8 KB)
13 Juillet 2013 Nouveau mappings et correctifs:
  • 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)
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.

goto top Retour en haut


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 fonctionalité est documentée sur sa propre page. Un exemple utilisant une libOGC modifiée est disponible.

goto top 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.



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!



goto top Retour en haut


Références

Les pages suivantes m'ont été d'une grande utilité pour la réalisation de ce projet.

Tout d'abord, la communication avec la Wiimote a été rendue possible grâce au code du projet suivant:
DIY Drum Set Controller for the Wii made with AVR

Les pages suivantes m'ont également beaucoup aidé:
Nintendo Gamecube Controller Protocol
Yet Another Gamecube Documentation
Sci.Electronics FAQ: Super Nintendo Entertainment System: pinouts & protocol
http://www.hardwarebook.info/Wiimote_Expansion_Port
http://wiibrew.org/wiki/Wiimote/Extension_Controllers
http://wiibrew.org/wiki/Wiimote/Extension_Controllers/Classic_Controller

goto top Retour en haut


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.

goto top Retour en haut


Je ne suis d'aucune façon affilié avec Nintendo. Les marques Gamecube et Wii sont des marques de commerce appartenant à Nintendo. Toutes les autres marques appartiennent à leurs propriétaire(s) respectif(s).
Copyright © 2002-2014, Raphaël Assénat
Site codé avecSite codé avec vimDernière mise à jour: 26 Août 2013 (Lundi)