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....
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
L'ensemble
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
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 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
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.
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)
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
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
É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.
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:
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.
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.
Adaptateur
Vitesse USB
Intervalle manette
USB poll
Latency max.
Commentaires
raphnet gcn64usb v3 (L'adaptateur de cette page)
Full speed
5ms (par défaut)
1ms
6ms
Si 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 speed
4ms
5ms[1]
14ms
En 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 USB
Low speed
16ms
8ms
24ms[2]
bInterval = 8ms, intervalle d'interrogation manette vérifié avec un oscilloscope.
Mayflash GC (4x) to USB (en mode PC)
Full sped
8ms
1ms
9ms[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:
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.
Brancher l'adaptateur à configurer. Un seul adaptateur doit être présent lors de cette opération.
Exécuter la commande correspondant au mode souhaité.
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é)
Code
Nom
Nombre de joueurs
0
GC/N64 to USB v??
1
1
N64 to USB v??
1
2
Gamecube to USB v??
1
16
Dual GC/N64 to USB v??
2
17
Dual N64 to USB v??
2
18
Dual 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
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.