raphnet.net banner
This page is also available in English
X2Wii Convertisseur manette N64, NES ou SNES à Gamecube/Wii
Contenu: Résumé du projet | Équivalence des boutons | Shéma | Circuit imprimé | Logiciel | Code source | Photos | Videos | Photos provenant des utilisateurs | Références | Avertissement
Résumé du projet [cacher]
C'est une merveilleuse idée qu'a eu Nintendo en proposant à nouveau les jeux de Nes, Snes et N64 sur leur nouvelle console, la Wii. Du moment que j'ai appris qu'il serait possible d'y jouer avec des manettes de Gamecube, l'idée de mettre au point un circuit permettant d'utiliser d'authentiques manettes NES et SNES via les ports pour manettes Gamecube m'est venue.

Dès que j'ai eu accès à une Wii (Je n'ai toujours pas la mienne), j'ai commencé à tester le code que j'avais écris longtemps à l'avance. Peu de temps après, j'avais en main un adaptateur permettant d'utiliser une manette NES ou SNES sur une Wii à travers un port de Gamecube. Quelques mois plus tard, je me suis décidé à faire un adaptateur N64 à Wii parce qu'un ami n'arrêtait pas de me demander d'en faire un.

Le protocole des manettes de Gamecube étant assez évolué si on le compare à celui des manettes Nes et Snes, il n'était pas possible de faire un circuit simple sans utiliser de composantes programmables. J'ai donc utilisé le microcontrôleur Atmega8 d'Atmel. Cela m'a permis d'utiliser mon circuit imprimé Multiuse Tiny1. Étant donné la petite taille de ce circuit, il est possible de le loger à l'intérieur d'une même manette.

Voici quelques exemples de ce qu'il est possible de faire avec ce circuit:
Une manette SNES clone convertie à Gamecube/Wii

Une manette SNES clone convertie à Gamecube/Wii

Une manette NES convertie à Gamecube/Wii

Une manette NES convertie à Gamecube/Wii

Adaptateur N64 à Gamecube/Wii

Adaptateur N64 à Gamecube/Wii

Cable manette SNES à Gamecube/Wii

Cable manette SNES à Gamecube/Wii


(pour plus de photos, visitez la section photos)

goto top Retour en haut


Équivalence des boutons [cacher]
Manette SNES
  • Snes Start : Gamecube Start
  • Snes Select : Gamecube Z
  • Snes Haut,Bas,Droit,Gauche: Gamecube Haut,Bas,Droit,Gauche
  • Snes Y : Gamecube Y
  • Snes X : Gamecube X
  • Snes B : Gamecube B
  • Snes A : Gamecube A
  • Snes L : Gamecube L
  • Snes R : Gamecube R
  • Snes L+R+Select+left: Gamecube Cstick vers la droite (depuis version 1.1)
Manette NES:
  • NES Start : Gamecube Start
  • NES Select : Gamecube Z
  • NES Haut,Bas,Droit,Gauche: Gamecube Haut,Bas,Droit,Gauche
  • NES B : Gamecube B
  • NES A : Gamecube A
  • NES A+B+Select+left: Gamecube Cstick vers la droite (depuis version 1.1)
  • NES A+B+Select+up: Gamecube L+R (depuis version 1.1)
Manette SNES en mode NES:
  • Snes Start : Gamecube Start
  • Snes Select : Gamecube Select
  • Snes Left,Right,Up,Down : Gamecube digital Left,Right,Up,Down
  • Snes Y : Gamecube B
  • Snes B : Gamecube A
Nintendo 64:
L'adaptateur supporte plusieurs combinaisons qui sont adaptées à différents jeux. Il y a trop de possibilités pour les mettre sur cette page. Consultez plutôt ce fichier:
n64_mapping_table1.4.pdf

goto top Retour en haut


Shéma [cacher]
Voici le shéma. Cliquez pour une plus grande version:
Version Nes/Snes:Version N64:
Commentaires et explications:
Le microcontrôleur est alimenté avec 5 volts pour trois raisons:
  1. Les manettes de Nes et Snes fonctionnent avec 5 volts. Il est donc préférable de présenter un voltage de 5 volts pour un 1 logique aux signaux Latch et Clock de la manette. (Puisque je n'ai pas la spécification exacte de la manette, je ne peux pas savoir de manière certaine au dela de combien de volts la manette considère qu'un 1 logique est présent sur le fil)
  2. Le signal Data provenant de la manette est de 5 volts. Pour éviter que le microcontrôleur soit exposé à un voltage supérieur à son alimentation, il aurait fallu utiliser un diviseur de tension, ce qui augmenterait le nombre de composantes.
  3. Il ne se fait pas d'Atmega8 supportant à la fois un voltage aussi bas que 3.3 volts et une horloge supérieure à 8 mhz et j'avais besoin de vitesse pour ce projet.

La signal Data du coté Gamecube/wii est maintenu à 3.43 volts par une résistance à l'intérieur de la Gamecube. Lorsque quelqu'un souhaite que le signal data soit à zéro, il doit tirer ce signal vers le ground. Sinon, il doit le laisser tel quel. J'accompli cela en alternant la configuration du signal PD2 entre 'Direction sortie transmettant un 0' et 'Direction entrée sans pull-up'.

Il ne faut jamais activer la résistance de pull-up interne de PD2 ni transmettre un 1 en mode sortie car cela injecterait du 5 volts dans le signal Data. Comment savoir si cela ne risque pas d'endommager le port de la Gamecube/Wii? (En fait, j'ai une manette sans fils ne valant pas grand chose qui fonctionne normalement sans rien briser, malgré le fait qu'elle réponde avec du 5 volts!).

La version Nintendo 64 de l'adaptateur utilise le même principe que décrit ci-haut pour contrôler le signal Data. La seule différence est que c'est nous qui devons fournir une résistance de pull-up à 3.43 volts. (Du point de vu de la manette, notre circuit est la console).

goto top Retour en haut


Circuit imprimé [cacher]
Comme je mentionne dans l'introduction, j'ai utilisé mon circuit imprimé Multiuse tiny1. Référez-vous à la page du Multiuse tiny1 pour plus d'informations. Si vous préférez ne pas le construire vous-même, j'en vends des pré-assemblés et pré-programmés dans mon magasin en ligne.

Circuit imprimé miniature

Circuit imprimé miniature

Shéma de câblage (S)NES

Shéma de câblage (S)NES

Shéma de câblage pour N64

Shéma de câblage pour N64



Voici la liste des composantes nécéssaires pour assembler ce projet sur un circuit Multiuse Tiny1. Il y a aussi les numéros d'items Digikey que je suggère d'utiliser.
Référence Description Commentaires # Digikey
C1 Condensateur 10uf 1uf est suffisant. Aussi, avec cette valeur, les condensateurs sont bien plus minces.490-1835-1-ND
C2,C3 Condensateur 18pf Choisir selon le crystal 311-1102-1-ND
Y1 Crystal 16mhz Le numéro digikey est pour un crystal montage en surface. Se soude facilement sur l'empreinte 'thru-hole'. 644-1037-1-ND
R3,R5,R6 Résistances 0 ohms Il est aussi possible de faire un pont de soudure. N/A
U2 Microcontrôleur Atmega8 Il est important d'utiliser la famille supportant 16mhz. Les Atmega8L-* ne vont pas plus vite que 8mhz. ATMEGA8-16AU-ND

goto top Retour en haut


Logiciel [cacher]
L'Atmega8 doit être programmé avec l'un des fichiers suivants:
Type de manettesVersionFichierCommentaires
Nes/Snes1.1snes2wii-1.1.hex Nouveau dans cette version:
  • Le mode manette NES peut être activé de force en maintenant la touche Start enfoncée lorsque le circuit commence à être alimenté. Sans ce mode, il est très difficile de jouer à un Jeu de NES avec une manette SNES.
  • Des combinaisons de touches permettent maintenant d'influencer l'état des boutons et joysticks non présents sur les manettes NES et SNES. Par exemple, transmettre comme quoi les touches L et R sont appuyés avec une manette NES, ou encore, pencher le joystick C (C Stick) vers la droite. Tout cela est très utile pour faire apparaître le menu d'un émulateur.
  • Certaines commandes Gamecube n'étaient pas implémentées. Les manettes sont maintenant compatibles avec GCLinux.
Nes/Snes1.0snes2wii-1.0.hex Ceci était la première version. Mode NES/Snes sélectionné avec par un cavalier (jumper).
Nintendo 641.4n64_to_wii-1.4.hex Nouveau dans la version 1.4:
  • Ajout de 4 nouveaux "mappings" (équivalence des boutons), chacun étant accessible en gardant un des boutons 'C' appuyé lors du branchement. Ces "mappings" sont rapportés comme étant utiles pour Super Smash Bros Mélée et Brawl.
  • Creation d'un fichier PDF résumant les différent"mappings" supportés
  • .
Nintendo 641.3n64_to_wii-1.3.hex Nouveau dans la version 1.3:
  • Il est maintenant possible de désactiver l'inversion des boutons L et Z en gardant le bouton L enfoncé lors du branchement de l'adaptateur la console.
  • Si le bouton R est gardé enfoncé lors du branchement dans la console, les boutons N64 C gauche et C droit correspondent aux boutons Gamecube Y et X. Ceci permet de jouer au jeu Virtual Console Sin and Punishment.
  • La sensibilité du joystick peut être accrue en gardant le bouton de direction droite enfoncé au démarrage.
  • La sensibilité du joystick peut être diminuée en gardant le bouton de direction gauche enfoncé au démarrage.
Nintendo 641.2n64_to_wii-1.2.hex La version N64 1.1 n'était pas fiable avec certaines manettes. Le symptôme était que le joystick analogue semblait se recalibrer à tout les 2 à 15 secondes. Ce problème est corrigé dans la version 1.2.

Les fuses pour ce projet sont: high_byte=0xc9 low_byte=0x9f.

Pour de l'information sur la programmation d'un AVR, visitez ma page sur la programmation d'AVR

goto top Retour en haut


Code source [cacher]
Pour ceux que ça intéresse, voici le code source qui est disponible sous la license GPL.
Version Nes et Snes 1.1: snes2wii-1.1.tar.gz
Version Nes et Snes 1.0: snes2wii-1.0.tar.gz
Version Nintendo64 1.2: n64_to_wii-1.2.tar.gz
Version Nintendo64 1.3: n64_to_wii-1.3.tar.gz
Version Nintendo64 1.4: n64_to_wii-1.4.tar.gz

Le code est en assembleur et est compilé avec avr-as. Un makefile est fourni. Pourquoi en assembleur? Principalement pour la vitesse et le contrôle total du timing. La plus petite unité de temps du protocole de communication de la Gamecube est d'une microseconde. À 16 mhz, ceci corresponds à 16 cycles du CPU. En assembleur, il est facile de faire certaines optimisation intéressantes.

goto top Retour en haut


Photos [cacher]
Installation à l'intérieur d'une manette NES: (Attention, méfiez vous des manettes non officielles qui utilisent des couleurs de fils différentes)
À l'intérieur d'une manette NES officielle

À l'intérieur d'une manette NES officielle

Résultat

Résultat

À coté de la Wii

À coté de la Wii

Super mario bros

Super mario bros


Installation à l'intérieur d'une manette SNES: (Attention, méfiez vous des manettes non officielles qui utilisent des couleurs de fils différentes)
à l'intérieur d'une manette SNES non-officielle

à l'intérieur d'une manette SNES non-officielle

Résultat

Résultat

À coté de la Wii

À coté de la Wii

Super mario world

Super mario world


Version Nintendo 64:




Photos prisent pendant le développement et déboguage:
Le développement du logiciel s'est fait chez un ami possédant une Wii...

Le développement du logiciel s'est fait chez un ami possédant une Wii...

Analyse du protocole à l'aide d'un outil maison

Analyse du protocole à l'aide d'un outil maison

Reprogrammation du convertisseur

Reprogrammation du convertisseur

Ca fonctionne presque, la manette est reconnue par la Wii!

Ca fonctionne presque, la manette est reconnue par la Wii!



Photos prisent durant les essais, une fois que tout fonctionnait:


Le prototype:
Vue d'ensemble

Vue d'ensemble

Vue un peu rapprochée

Vue un peu rapprochée


goto top Retour en haut


Videos [cacher]
Voici quelques videos de démonstration:

Version Nintendo 64:

Version Snes:

Version NES:

goto top Retour en haut


Photos provenant des utilisateurs [cacher]
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.

Andrew Jalics a mis sur son site web des photos de la boîte NES à Wii qu'il a fabriqué avec mon circuit:

Declan Williams, d'Autralie, a construit la version Nes/Snes et N64. Il s'est servi de puces ATmega8 préprogrammés provenant de mon magasin qu'il a installé sur son propre circuit imprimé. Il a aussi trouvé une bonne façon de créer un connecteur de style Snes (Des détails sont visibiles sur ces photos du project 4nes4snes):


goto top Retour en haut


Références [cacher]
Ce document explique clairement comment la communication fonctionne au niveau matériel:
Nintendo Gamecube Controller Protocol

Le chapitre 9 de ce document contiens de l'information sur la significations des bits en réponse à certaines commandes:
Yet Another Gamecube Documentation

Cette page contiens de la documentation sur le 'protocole' des manettes Snes:
Sci.Electronics FAQ: Super Nintendo Entertainment System: pinouts & protocol

goto top Retour en haut


Avertissement [cacher]
Je ne saurais être tenu responsable pour les dommages que la mise en oeuvre 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


Copyright © 2002-2008, Raphaël Assénat
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).
Site codé avecSite codé avec vimDernière mise à jour: 16 Mars 2008