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

goto top Retour en haut


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

goto top Retour en haut


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


goto top Retour en haut


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 le schéma du circuit Multiuse PCB-X: SVP visiter la page de Multiuse PCB-X.

goto top Retour en haut


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
Fichier(s)DateDescription
gcn64usb-3.4.0.hex (39.9 KB)
gcn64usb-3.4.0.tar.gz (49.5 KB)
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.
gcn64usb-3.3.2.hex (39.2 KB)
gcn64usb-3.3.2.tar.gz (48.2 KB)
27 Novembre 2016 (Dimanche) Petit correctif:
  • Corrige la fonction d'affichage du type de manette connectée en mode deux joueurs.
gcn64usb-3.3.1.hex (39.1 KB)
gcn64usb-3.3.1.tar.gz (48.6 KB)
2 Novembre 2016 (Mercredi) Ajout du support deux joueurs:
  • Personnalité 2x N64
  • Personnalité 2x Gamecube
  • Accès direct multi-joueur
Versions 3.3.x: Introduction du support pour deux joueurs. Ne pas installer les version précédentes sur les adaptateurs à deux joueurs.
gcn64usb-3.2.1.hex (33.8 KB)
gcn64usb-3.2.1.tar.gz (46.7 KB)
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)
gcn64usb-3.2.0.hex (33.4 KB)
gcn64usb-3.2.0.tar.gz (46.5 KB)
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.
gcn64usb-3.1.1.hex (33.4 KB)
gcn64usb-3.1.1.tar.gz (46.3 KB)
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)
gcn64usb-3.1.0.hex (33.4 KB)
gcn64usb-3.1.0.tar.gz (46.3 KB)
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)
gcn64usb-3.0.0.hex (32.9 KB)
5 Octobre 2015 (Lundi) Première version
Ce projet est aussi disponible sur GitHub!
Pour suggérer de nouvelles fonctionalités, rapporter 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

goto top Retour en haut


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.

goto top Retour en haut


Outils en ligne de commande

Plusieurs outils en ligne de commande sont disponibles pour manipuler l'adaptateur:
Les outils sont disponibles sur la page Outils pour la 3ième génération des adaptateurs raphnet GC/N64 à USB.

goto top Retour en haut


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 Gamecube keyboard (joystick part) OK 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
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.

goto top Retour en haut


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

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

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 pourrait causer à votre équipement, à vous-même ou à autrui. Aussi, je ne donne aucune garantie quant à l'exactitude des informations et à leur fonctionnement. Notez toutefois que les procédures ci-haut ont fonctionné sans aucun problème pour moi.

goto top Retour en haut


Les marques de commerce utilisées dans ce site appartiennent à leurs propriétaires respectifs.
Copyright © 2002-2017, Raphaël Assénat
Site codé avecSite codé avec vimDernière mise à jour: 27 Novembre 2016 (Dimanche)