Adaptateur manette Gamecube/N64 à USB (Troisième génération)

Introduction

Adaptateur complet

Adaptateur complet

Ceci est la troisième génération de mon adaptateur manette N64/Gamecube à USB.

Pourquoi une nouvelle version? Car cela permet de grandes améliorations. Comparez:

Avant (Versions 1 et 2)Maintenant (Version 3)
  • USB low speed (1.5 Mbit/s)
  • «Latency» bas (environ 14ms max.)
  • Mise à jour du firmware impossible[1]

Ce qui permet toutes ces améliorations est le changement de la plateforme matérielle. Alors qu'avant il fallait faire avec les contraintes d'un pilote USB 100% logiciel, cette nouvelle version utilise un micro-contrôleur supportant USB nativement pour plus de performances et de possibilités.

[1] Bon bon, je parle d'impossible pour l'utilisateur moyen qui m'a acheté un adaptateur fini. Naturellement, la mise à jour a toujours été possible en coupant la gaîne le recouvrant et en soudant des fils aux bons endroits....


Caractéristiques

L'adaptateur:
  • Support des manettes N64 et Gamecube (liste)
  • Supporte la fonction vibration des manettes Gamecube et N64.
  • 100% fonctionnel sans installer de pilotes spéciaux. (Reconnu en tant que dispositif de jeu USB HID avec PID pour la vibration.)
  • Fonctionne sur Mac, Linux et Windows.
  • Fréquence d'interrogation de la manette configurable (Maximum 500Hz)
  • Faible délai de transmission par USB (interrogation à 1000Hz)
  • Mise à jour possible et facile.
  • Paramètres configurables par USB.
  • Fonctionalités pour communiquer directement avec les manettes.
  • Numéro de série unique pour chaque adaptateur.
PIlotes:
  • Utilises les pilotes standard du système d'exploitation.
Logiciel de gestion:
  • Interface graphique facile à utiliser pouvant gérer plusieurs adaptateurs.
  • Affichage de la version de l'adaptateur et fonction de mise à jour.
  • Affichage du type de manette détecté.
  • Test de vibration intégré
  • Outils pour lecture et écriture de mempak N64
  • Supporte les fichiers d'image de mempak .N64 et .MPK
  • Support du Transfer Pak N64 (écriture et lecture de sauvegardes Gameboy)




Photos

Voici un adaptateur complet:
Connecteurs Gamecube/N64

Connecteurs Gamecube/N64

L'ensemble

L'ensemble

Le câble USB est détachable

Le câble USB est détachable




Le firmware est conçu pour fonctionner sur mon circuit Multiuse PCBX. C'est d'ailleurs ce qu'il y a à l'intérieur de l'adaptateur complet ci-dessus. Toutes les composantes requises (régulateur 3.3v, résistances, etc) sont déjà sur la carte. Il suffit donc simplement de souder les fils des connecteurs de manettes.
Multiuse PCB-X

Multiuse PCB-X

Multiuse PCB-X

Multiuse PCB-X

Multiuse PCB-X

Multiuse PCB-X

Câblage

Câblage




Pour le développement, je travaille avec un at90usb1287 installé sur un vieux kit de développement stk525 modifié (Il faut installer un cristal de 16 MHz. Les ports de manettes sont câblés au connecteur EXPAND 0. Broches 39,40: GND, Broche 38: Data [PORTD0]. Les cavaliers sont placés pour alimenter le micro-contôleur à 5 volt. L'alimentation 3.3v pour les manettes est récupérée dans la région du régulateur. L'alimentation 5v pour la fonction vibration gamecube provient du BUS USB (VBUS).

La troisième photo montre un autre montage dont je me sers pour le développement, mais cette fois en utilisant mon circuit Multiuse PCB-X. L'interrupteur et le fil vert dans la photo sont là car je les utilise parfois en débogage. Il ne sont pas normalement requis ni utiles.
Développement sur Multiuse PCB-X

Développement sur Multiuse PCB-X

Développement sur STK525

Développement sur STK525

Développement sur STK525

Développement sur STK525





Schéma

Ce projet est conçu pour Multiuse PCB-X. Voici donc le schéma de câblage pour cette carte ainsi que des références pour les connecteurs N64 et Gamecube.
Câblage Multiuse PCB-X

Câblage Multiuse PCB-X

Brochages N64 et Gamecube

Brochages N64 et Gamecube



Pour une deuxième manette: Câblez les fils d'alimentation (3.3v, 5v, GND) de la deuxième manette comme pour la première, mais soudez le signal 'Data' à l'emplacement '1' du circuit (en dessous de '0'). (de sorte que chaque manette utilise une entrée 'Data' dédiée). Noubliez pas aussi de configurer l'adaptateur en mode deux joueurs. (Voir Personalités et modes multi-joueurs pour cette procédure)

Pour le schéma du circuit Multiuse PCB-X: SVP visiter la page de Multiuse PCB-X.



Firmwares et code source

S'il s'agit d'une mise à jour, les firmwares (fichiers .hex) suivants peuvent être programmés dans l'adaptateur via l'outil de gestion graphique, ou à l'aide des outils en ligne de commande.

Si votre circuit est neuf (jamais programmé), il faut utiliser dfu-programmer directement.
# Commandes pour programmer une carte neuve
$ dfu-programmer atmega32u2 erase
$ dfu-programmer atmega32u2 flash fichier.hex
$ dfu-programmer atmega32u2 start

Les fichiers de firmware (.hex) ainsi que le code source sont disponibles ci-dessous. Le source des outils graphiques et en ligne de commande sont également inclus. La license est GPLv3.

Flux RSS pour cette table
Version 3.6.1
5 mars 2021 (Vendredi)
  • Modifications de chrono pour permettre au brawler64 version sans fils de fonctionner. Il faudra configurer l'intervalle d'interrogation à une valeur >= 2ms sur les adaptateurs à un port, et >= 4ms sur les adaptateurs à deux ports.
  • Nouvelle fonction permettant d'échanger le stick principal et le pavé directionnel.
  • Économie de mémoire vive dans usb.c (pas de changements visibles pour l'usager)
  • Correction de l'adresse d'entrée du bootloader (réduit peut-être les chances d'échec de mise à jour)
Fichier(s):
gcn64usb-3.6.1.hex (44.3 KB)
gcn64usb-3.6.1.tar.gz (55.9 KB)
Afficher les versions précédentes
Version 3.6.0
6 octobre 2018 (Samedi)
  • Ajout de support pour le clavier Gamecube
Fichier(s):
gcn64usb-3.6.0.hex (43.3 KB)
gcn64usb-3.6.0.tar.gz (54.6 KB)
Version 3.5.1
10 avril 2018 (Mardi)
  • Corrige un problème où la vibration ne s'arrêtait jamais (Dolphin)
Fichier(s):
gcn64usb-3.5.1.hex (38.9 KB)
gcn64usb-3.5.1.tar.gz (51.2 KB)
Version 3.5.0
25 novembre 2017 (Samedi)
Nouveautés et correctifs:
  • Ajout d'une option triggers as buttons (gâchettes analogiques fonctionnant comme des boutons) pour manettes Gamecube
  • Ajout d'une option disable analog triggers (Déactive les gâchettes analogiques) pour manettes Gamecube
  • Modifications internes pour éviter ce qui semble être un bug dans Windows (confusion de joystick ID menant à des erreurs dans le gestionnaire de manettes de jeu et/ou un non-fonctionnement du deuxième port)
  • Implémentation d'une fonction permettant au gestionnaire d'interroger l'adaptateur pour connaîtres les fonctions disponibles
Fichier(s):
gcn64usb-3.5.0.hex (41.4 KB)
gcn64usb-3.5.0.tar.gz (50.6 KB)
Version 3.4.0
8 janvier 2017 (Dimanche)
Augmentation de performance:
  • Nouvelle requête de communication pour un latency encore plus bas lorsque utilisé avec les plugins raphnetraw.
  • Utilisation plus efficace de la mémoire.
Fichier(s):
gcn64usb-3.4.0.hex (39.9 KB)
gcn64usb-3.4.0.tar.gz (49.5 KB)
Version 3.3.2
27 novembre 2016 (Dimanche)
Petit correctif:
  • Corrige la fonction d'affichage du type de manette connectée en mode deux joueurs.
Fichier(s):
gcn64usb-3.3.2.hex (39.2 KB)
gcn64usb-3.3.2.tar.gz (48.2 KB)
Version 3.3.1
2 novembre 2016 (Mercredi)
Ajout du support deux joueurs:
  • Personnalité 2x N64
  • Personnalité 2x Gamecube
  • Accès direct multi-joueur
Fichier(s):
gcn64usb-3.3.1.hex (39.1 KB)
gcn64usb-3.3.1.tar.gz (48.6 KB)
Version 3.3.0
Versions 3.3.x: Introduction du support pour deux joueurs. Ne pas installer les version précédentes sur les adaptateurs à deux joueurs.
Fichier(s):
Version 3.2.1
22 septembre 2016 (Jeudi)
Implémentation de personnalités N64-seulement et Gamecube-seulement (Le product ID USB et le nom du produit sont différents)
Fichier(s):
gcn64usb-3.2.1.hex (33.8 KB)
gcn64usb-3.2.1.tar.gz (46.7 KB)
Version 3.2.0
28 mai 2016 (Samedi)
  • Correction d'un problème de reconnection en boucle sous MacOS X
  • Changement d'usage HID pour une des gâchettes gamecube (Slider changé pour Z). Fonctionne maintenant correctement avec openEMU.
  • Nom du produit et version changés.
  • Product ID USB mis à jour.
Fichier(s):
gcn64usb-3.2.0.hex (33.4 KB)
gcn64usb-3.2.0.tar.gz (46.5 KB)
Version 3.1.1
29 février 2016 (Lundi)
Correctif: Corrige le code de vibration pour fonctionner avec x360ce (La vibration démarrait mais ne s'arrêtait jamais)
Fichier(s):
gcn64usb-3.1.1.hex (33.4 KB)
gcn64usb-3.1.1.tar.gz (46.3 KB)
Version 3.1.0
24 février 2016 (Mercredi)
Nouvelles fonctionalités et corrections:
  • Ajout d'une commande de contrôle de vibration (pour le test de vibration dans l'interface graphique, or pour un contrôle simple de la vibration)
  • Ajustement du «timing» de la communication N64/Gamecube (Corrige un problème avec une manette Mad Catz)
  • Auto-centrage des axes Gamecube lors du branchement
  • Corrige la détection de la manette Wavebird
  • Fiabilité augmentée (corrige un buffer overflow possible en cas de réception de donnés erronée)
Fichier(s):
gcn64usb-3.1.0.hex (33.4 KB)
gcn64usb-3.1.0.tar.gz (46.3 KB)
Version 3.0.0
5 octobre 2015 (Lundi)
Première version
Fichier(s):
gcn64usb-3.0.0.hex (32.9 KB)
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/gc_n64_usb-v3



Logiciel de gestion

Le logiciel de gestion n'est pas requis pour utiliser l'adaptateur, mais permet de tester la vibration, de faire la mise à jour de l'adaptateur et la lecture/écriture de mempak N64. L'éditeur de mempak intégré supporte les formats .N64 et .MPK. Il est donc possible de télécharger des « cheats » de gamefaqs.org pour certains jeux pour ensuite les utiliser sur un vrai système N64! Le gestionnaire permet également d'exporter et d'importer des sauvegardes («notes») à l'unité.
Écran principal

Écran principal

Éditeur de mempak

Éditeur de mempak



Le processus de mise à jour vous demande de choisir le fichier .hex et fait quelques vérifications pour éviter les erreurs (ex: Mettre un firmware incompatible). Une fois le fichier choisi, il n'y a qu'à appuyer sur "Start update". Si tout se passe bien (surtout ne débranchez rien!) après quelques moments la fenêtre de succès (Update successful) confirmera la mise à jour.
Avant

Avant

Pendant

Pendant

Après

Après


Téléchargement:
Disponible depuis la page Outils pour la 3ième génération des adaptateurs raphnet GC/N64 à USB.


Outils en ligne de commande

Plusieurs outils en ligne de commande sont disponibles pour manipuler l'adaptateur:
  • gcn64ctl: Configuration, accès au cartes mémoires et plus
  • mempak_ls, mempak_rm, mempak_format, mempak_insert_note: Manipulation d'images de mempak N64.
Les outils sont disponibles sur la page Outils pour la 3ième génération des adaptateurs raphnet GC/N64 à USB.


Manettes supportées

Voici une liste de manettes/adaptateurs testés:
Type Marque/FabricantModèle Status Testé par
Gamecube Nintendo Standard (DOL-003) OK raphnet.net
Gamecube Nintendo Édition Super Smash Bros (DOL-003) OK raphnet.net
Gamecube Nintendo Standard (Importée du Japon, câble long) OK raphnet.net
Gamecube Nintendo Wavebird OK raphnet.net
Gamecube Ascii Clavier Gamecube (Partie joystick) OK raphnet.net
Gamecube Ascii Clavier Gamecube (Partie clavier) OK depuis firmware 3.6.0 raphnet.net
Gamecube Intec Wireless OK raphnet.net
Gamecube Mad Catz Microcon (item no. 5636) OK raphnet.net
Gamecube ? Playstation to Gamecube adapter OK raphnet.net
Gamecube Hori Hori digital pad for GameCube OK Utilisateur
Gamecube Nyko Adaptateur manette PS2 à Gamecube Ne fonctionne pas Utilisateur
N64 Nintendo Standard OK raphnet.net
N64 Hori Minipad mini 64 OK raphnet.net
N64 TTX ? OK raphnet.net
N64 Ascii Ascii Pad 64 OK Utilisateur
N64 Retro Fighters Brawler 64 OK Utilisateur
Notez qu'il y a de fortes chances pour que tout modèle non énuméré ci-dessus fonctionne parfaitement bien. Tenez-moi au courant de toute manette non listée que vous auriez eu la chance de tester.


Explication du « Latency »

Pour le meilleur contrôle possible du jeu, le délais de transit («latency») qu'introduit l'adaptateur doit être le plus petit possible. Voyons pourquoi les adaptateurs introduisent du latency, et examinons comment il est possible de s'en sortir.

En quelques mots, un adaptateur fonctionne ainsi:
  • À intervalles fixes, l'adaptateur interroge la manette pour détecter les changements (boutons, axes, etc)
  • Lorsqu'il y a un changement, un événement est envoyé au PC pour l'en aviser.
  • Mais comme les périphériques USB sont interrogés par le PC à intervalle fixe, l'événement doit attendre le prochain poll USB pour sortir.
Les deux principales causes de latency sont donc les suivantes:
  1. L'intervalle d'interrogation de la manette: Fréquemment cela se fait aux 16ms. Cela corresponds à la réalité des jeux sur console qui lisent souvent l'état de la manette une fois par trame vidéo. Mais dans le contexte de l'adaptateur, cela veut dire que si nous appuyons sur un bouton juste un peu trop tard (ex: 1ms après le poll), l'adaptateur ne s'en rendra compte qu'au prochain cycle, 15 ms plus tard.
  2. L'intervalle de poll USB: Dans le cas d'un périphérique USB low speed, l'intervalle minimum est 10ms. Selon le timing, si l'adaptateur découvre le changement d'état alors que le poll USB vient juste d'avoir lieu, la transmission de l'événement doit attendre le prochain poll.
Voici une représentation visuelle de tout cela:

Le diagramme ci-dessus montre clairement:
  • Première cause de délais: Lorsqu'on enfonce un bouton, l'adaptateur ne s'en rends compte que plus tard lorsqu'il interroge la manette.
  • Deuxième casue de délais: Une fois que l'adaptateur a détecté le changement d'état du bouton, ce n'est qu'au prochain poll USB que le PC peut l'apprendre.

Réduire le latency

Les explications donnés ci-dessus suggèrent très naturellement la solution suivante: Les polls de la manette et d'USB doivent avoir lieu le plus souvent possible. Voyons pour chacun:
  • Polls USB: Il suffit simplement d'assigner une valeur basse au champs bInterval du descripteur d'endpoint USB. Pour les périphériques Low speed, ce sera un minimum de 10ms. Pour les périphériques Full speed, 1ms. Cet adaptateur étant USB Full speed, une valeur de 1ms est donc utilisée.
  • Polls de la manette: Par défaut, cet adaptateur interroge la manette aux 5ms. Mais une valeur plus petit peut être configurée via l'outil de gestion. L'utilisation d'une valeur très basse ne cause pas de difficultés avec les manettes standard, mais on peut penser qu'il puisse y avoir des complications avec certaines manettes ou adaptateurs fabriqués par des tiers.
Il faut noter qu'une autre approche pour diminuer le latency causé par les polls USB consiste à synchroniser l'interogation de la manette de sorte que la lecture se termine toujours immédiatement avant le prochain poll USB.

AdaptateurVitesse USBIntervalle manetteUSB pollLatency max.Commentaires
raphnet gcn64usb v3 (L'adaptateur de cette page)Full speed5ms (par défaut)1ms6msSi l'adaptateur est configuré pour interroger la manettes aux 2ms (minimum), le latency maximal ne sera que de 3ms.
raphnet gc/n64 usb v2 (prédécesseur)Low speed4ms5ms[1]14msEn raison de la taille des donnés transmises, deux polls USB sont requis, ce qui explique le 14ms ici plutot que 9ms
Adaptateurs non-raphnet (pour comparer)
Mayflash dual N64 to USBLow speed16ms8ms24ms[2]bInterval = 8ms, intervalle d'interrogation manette vérifié avec un oscilloscope.
Mayflash GC (4x) to USB (en mode PC)Full sped8ms1ms9ms[2]bInterval = 1ms, intervalle d'interrogation manette vérifié avec un oscilloscope.
[1] Bien que l'intervalle minimum officiel pour l'interrogation USB des périphériques dits « Low speed » soit de 10ms, il est possible de tricher et d'utiliser une valeur plus petite. Cela fonctionne.
[2] Le Latency max. affiché pour les adaptateurs non-raphnet prennent pour acquis qu'aucune stratégie de synchronisation des polls de manettes n'est en place. Si c'était le cas, il faudrait soustraire l'intervalle de poll USB (ou une fraction, selon les marges du design) du latency maximal.


Personalités et modes multi-joueurs

Depuis le firmware version 3.2.1, il existe plusieurs modes (ou personalités) qui permettent à un adaptateur de s'identifier plus précisément (par exemple, si vous n'avez qu'une manette N64, l'adaptateur portera le nom "N64 to USB", plutôt que "GC/N64 to USB").

Depuis le firmware version 3.3.1, il existe également des modes à deux joueurs.

La configuration de la personalité et/ou du mode deux joueurs doit être faite avec l'outil en ligne de commande gcn64ctl.

Instructions:
  1. Installer au préalable l'outil de gestion d'adaptateur. Il s'agit d'une interface graphique, mais des outils en ligne de commande seront également installés. Il y aura un raccourci dans le menu démarrer (ou l'équivalent) permettant d'ouvrir un terminal dans le répertoire des outils.
  2. Brancher l'adaptateur à configurer. Un seul adaptateur doit être présent lors de cette opération.
  3. Exécuter la commande correspondant au mode souhaité.
  4. Utiliser la commande --reset ou débrancher et rebrancher l'adaptateur pour démarrer le nouveau mode.
# Syntaxe pour la configuration d'un adaptateur
gcn64ctl -f --set_mode xx

# Redémarrer l'adaptateur
gcn64ctl -f --reset

(où xx sera remplacé par le code numérique approprié)
CodeNomNombre de joueurs
0GC/N64 to USB v??1
1N64 to USB v??1
2Gamecube to USB v??1
16Dual GC/N64 to USB v??2
17Dual N64 to USB v??2
18Dual Gamecube to USB v??2



Support du claiver

Depuis le firmware version 3.6.0, l'adaptateur supporte également le clavier pour Gamecube.

raphnet ADAP-2XGC-USB-V and ASCII ASC-1901PO

raphnet ADAP-2XGC-USB-V and ASCII ASC-1901PO





Configuration

Afin que le clavier soit reconnu et que l'adaptateur apparaisse comme un clavier USB côté PC, il faut d'abord activer le mode clavier à l'aide du gestionnaire d'adaptateur.


Le mode en cours est enregistré dans l'adapatateur et activé automatiquement lors de la mise sous tension.

Adaptateur mono-joueur

Puisqu'il ne comporte qu'un seul port, les adaptateurs mono-joueur ne supportent que la partie clavier, ou que la partie joystick, mais pas les deux en même temps, à moins d'utiliser deux adaptateurs.

Lorsque l'adaptateur est en mode clavier, il faut l'y brancher le câble clavier (blanc). Brancher le câble joystick (mauve) ou une manette Gamecube ne fonctionnera pas lorsque l'adaptateur est en mode clavier.

Adaptateur pour deux joueurs

Raccordez le câble joystick (mauve) au port 1 et le câble clavier (blanc) au port 2. L'adaptateur se présentera tel un Clavier et un Joystick côté PC.



Sous Windows 10, un adaptateur deux-joueurs en mode clavier apparaitrera en tant que composite device dans Devices and Printers.



Le menu contextuel (accessible par un clic du bouton droit) affiche des options pour clavier et pour contrôleur de jeu:




Avertissement

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.