Pour jouer à de bons vieux jeux avec des émulateurs, l'idéal est de le faire avec les manettes
d'origine. À une certaine époque, plusieurs consoles utilisaient des prises de type DB9. Ce
projet vise à supporter ce type de manettes sur un port USB.
Pendant plusieurs années, plusieurs personnes dont moi construisaient des adaptateurs fonctionnant
sur un port port parallèle. Malheureusement, les ports parallèles sont de plus en plus
rare car de nos jours, USB est utilisé pour presque tout. Par contre, à cause de la nature d'USB, l'adaptateur est un peu plus complexe.
J'ai donc conçu mon propre adaptateur manette DB9 à USB. Les manettes supportés sont les suivantes:
Manettes Atari et compatibles à un bouton
Manettes SMS et compatibles à deux boutons
Manettes Genesis 3 et 6 boutons (Testées: Sega modèles 1650, mk-1653 et mk-1470, Fighter Stick SG-6)
À l'origine j'ai construit mon adaptateur en utilisant le microcontrôleur Atmega8 d'Atmel, mais le
microcontrôleur équivalent plus récent, le Atmega8a fonctionne également à merveille. Ces
microcontrôleurs ne supportent pas USB nativement alors j'ai utilisé le pilote USB
logiciel-seulement codé par Objective Development.
Ce pilote permet a un microcontrôleur AVR tel que l'ATmega8 de communiquer en USB avec
un minimum de composantes externes. Grace à cela, l'adaptateur peut être construit
facilement, sans se ruiner.
Selon vos habiletés, vous pouvez construire l'adaptateur sur un 'breadboard' (En français c'est quoi?)
en utilisant des composantes standards ou la version 'montage en surface' en utilisant
le dessin de circuit-imprimé fourni. Je peux vous vendre des circuits-imprimés
pré-assemblés et des micro-controleurs (boitier DIP seulement) pré-programmés.
Au besoin, visitez mon
magasin en ligne (anglais seulement pour l'instant).
Auncun pilote requis!
Le standard USB définit certaines classes de périphériques.
Dans ce project, j'utilise la classe HID (Humain input device) qui permet de communiquer
à l'ordinateur de façon générique que le périphérique
connecté est un controleur de jeu possédant 2 axes et 2 boutons. Ceci
permet au circuit de fonctionner sous plusieurs systèmes d'exploitation automatiquement,
en autant que le système en question supporte USB et la classe HID. (J'ai
essayé et ça fonctionne sous Win98, Win2K, WinXP et Linux)
Fonctions HPD-200
Le support de cette manette un peu spéciale a
été réalisé pour un client. À sa demande, j'ai rendu possible la séparation des deux boutons (normalement,
les deux boutons sont équivalents) et j'ai également implémenté quatre modes d'opération pour permettre
de modifier le comportement de la manette pour s'adapter à différents scénarios d'utilisation.
Le mode d'opération est sélectionné en gardant certains boutons enfoncés pendant le branchement tel
qu'expliqué dans le tableau suivant.
Mode
Description
0
Le mode par défaut. Les deux boutons ne font qu'un et c'est l'axe droite-gauche qui est contrôlé.
1
Activé si le bouton rond est maintenu enfoncé lors du branchement. Les deux boutons ne font qu'un mais cette fois c'est l'axe haut-bas qui est contrôlé.
2
Activé si le bouton latéral est maintenu enfoncé lors du branchement. Dans ce mode, chaque bouton fonctionne indépendamment et c'est l'axe droite-gauche qui est contrôlé.
3
Activé si les deux boutons sont maintenus enfoncés lors du branchement. Dans ce mode, les deux boutons sont indépendants et c'est l'axa haut-bas qui est contrôlé.
Pour que les deux boutons fonctionnent séparément, il faut câbler le bouton latéral directement au circuit, de sorte
que lorsqu'appuyé, il fasse contact entre la masse (GND) et le signal PB4 du MCU. Voici, à titre d'exemple, deux
photos d'une manette convertie à USB.
Schéma
Voici la version moderne du shéma (pour firmware 1.5 et plus):
Voici l'ancienne version du shéma (pour les firmware jusqu'a version 1.4): revE-atari.png sch-revE-atari.pdf
Liste de pièces:
U2: Un microcontroleur ATmega8 ou Atmega8a. ATMEGA8-16PC, ATMEGA8-16PI, ATMEGA8-16PJ ou ATMEGA8-16PU. Ne pas utiliser un ATMEGA8L-*,
car l'horloge de 12Mhz dépasserait la limite.
R1: Résistance de 1.5k. Ordinaire au carbone 1/4 watt.
R2, R3: Résistance de 68 ohms. Ordinaire au carbone 1/4 watt.
D2, D3: 3.6 volts zener diodes.
Y1: Crystal 12 Mhz.
C2, C3: Condensateurs de 27 pf. Si votre cristal recommande une autre valeur, utilisez la.
C1: Condensateur de 10 uf. Installer près du ATmega8.
JP1, JP2: Cavaliers. Vous pouvez aussi utiliser des interrupteurs DIP, des interrupteurs ordinaires
ou des ponts de soudure.
J2: Connecteur 2x3 (6 broches), espacement 2.54mm. Pour la programmation du ATmega8.
P1: Connecteur DB9 male
Pour la connection USB, vous pouvez simplement dénuder un cable USB et souder les fils directement
sur le circuit. USB utilise des couleurs de fils standardisés:
Couleur
Description
Rouge
+5 volts
Noir
0 volts (GND)
Vert
D+
Blanc
D-
Programmation du microcontrôleur
Les microcontroleurs sont des composantes qui doivent être programmés pour
qu'elles fassent quelque chose d'utile. Voici donc le fichier .hex qu'il faut programmer
dans le microcontroleur:
La manette Famicom avec microphone est maintenant supportée. En mode NES,
relier PC1 et PC0 pour activer ce mode spécial. Le signal du micro en provenance
de la manette doit être soudé à PC2.
Mise en place de 3 configurations de boutons pour le mode Famicom.
Correction d'un bug prévenant l'affichage correct du nom du périphérique.
Le mode TGFX possède maintenant un nom spécifique et sa propre paire VID/PID USB.
La manette "Sega Paddle" HPD-200 est maintenant supportée. Auto-détectée en mode DB9. Support
des deux boutons en mode indépendant si le circuit peut être installé dans la manette.
L'interrogation des manettes est maintenant synchronisée avec la communication USB. Ceci
aide à maintenir la stabilité du rythme des impulsions lors de l'interrogation des manettes.
L'ordre des boutons pour les manettes Atari et SMS a été révisé car
les boutons 2 et 3 était utilisés. Ceci ne fonctionnait pas bien avec
certains émulateurs supportant le bouton 1 seulement.
Il est maintenant possible de forcer l'adaptateur à utiliser
le mode Genesis 6 boutons en gardant le bouton 'start' enfoncé lors
du branchement de l'adaptateur au port USB. Au cas où l'auto-détection
ne fonctionne pas...
Les manettes Genesis 3 et 6 boutons sont maintenant supportés
Tout les manettes ayant un connecteur DB9 (Genesis 3/6 boutons, SMS,
Atari 1/2 boutons et compatibles) sont reconnues automatiquement.
Le câblage du connecteur DB9 a changé pour être plus facile à effectuer
sur le circuit imprimé multiuse.
Les manettes NES sont maintenant détectées en mode SNES. Fiable avec
les manettes de marque Nintendo. Si des clones ne sont pas détectés, utilisez
le mode NES.
Les manettes de style Atari sont maintenant supportés (Atari, Commodore, etc.).
Les variations à deux boutons le sont aussi. (Par exemple, Sega Master System).
Ajout de 'padding' au 'report descriptor' en mode NES. Ceci permet au mode NES de
fonctionner correctement sous Windows. (Ce n'était pas nécéssaire avec Linux...)
Correction d'une erreur de code qui causait des
événements de boutons aléatoires lorsqu'il
n'y avait pas de manette connectée au circuit.
Le mode NES a maintenant son propre numéro de produit USB
La pin PD1 est maintenant laissée en entrée
(sans pull-up) car elle est soudée avec PD0 sur la révision
C du circuit imprimé. (Je préfère faire cela au lieu
de jeter un lot de 50 circuits à la poubelle ou faire des corrections
en coupant une trace et en soudant un fil...)
Version initiale. Support des manette NES et SNES.
Plusieurs micro-contrôleurs possèdent ce qu'on appelle 'Fuse bytes'. Dans le cas
du ATmega8, il y en a deux: Le 'high byte' et le 'low byte'. Ces deux octets servent à
configurer certains paramètres du microcontroleur. Quel type d'horloge? Crystal?
Résonateur? Oscillateur RC interne? Permettre la programmation par ISP? Il est très
important de configurer les fuse bytes avec les bonnes valeurs. L'utilisation de mauvaises valeurs
peut rendre le microcontroleur inutilisable.
Pour ce projet, voici les bonnes valeurs:
high byte = 0xc9, low byte = 0x9f
Pour de l'information sur la programmation d'un AVR,
visitez ma page sur la programmation
d'AVR
Pour ceux qui aimeraient modifier le comportement de l'adaptateur
ou supporter d'autres types de manettes, voici le code source. Depuis la
version 1.5, le code est publié sous la license GPLv2. Les version
antérieures était sous la license d'Objective Development, qui est en
fait GPL avec quelques extensions pour couvrir le matériel
(le circuit). Voir le fichier License.txt pour plus d'information.
La manette Famicom avec microphone est maintenant supportée. En mode NES,
relier PC1 et PC0 pour activer ce mode spécial. Le signal du micro en provenance
de la manette doit être soudé à PC2.
Correction d'un bug prévenant l'affichage correct du nom du périphérique.
Le mode TGFX possède maintenant un nom spécifique et sa propre paire VID/PID USB.
La manette "Sega Paddle" HPD-200 est maintenant supportée. Auto-détectée en mode DB9. Support
des deux boutons en mode indépendant si le circuit peut être installé dans la manette.
L'interrogation des manettes est maintenant synchronisée avec la communication USB. Ceci
aide à maintenir la stabilité du rythme des impulsions lors de l'interrogation des manettes.
L'ordre des boutons pour les manettes Atari et SMS a été révisé car
les boutons 2 et 3 était utilisés. Ceci ne fonctionnait pas bien avec
certains émulateurs supportant le bouton 1 seulement.
Il est maintenant possible de forcer l'adaptateur à utiliser
le mode Genesis 6 boutons en gardant le bouton 'start' enfoncé lors
du branchement de l'adaptateur au port USB. Au cas où l'auto-détection
ne fonctionne pas...
Les manettes Genesis 3 et 6 boutons sont maintenant supportées
Tout les manettes ayant un connecteur DB9 (Genesis 3/6 boutons, SMS,
Atari 1/2 boutons et compatibles) sont reconnues automatiquement.
Le câblage du connecteur DB9 a changé pour être plus facile à effectuer
sur le circuit imprimé multiuse.
Les manettes NES sont maintenant détectées en mode SNES. Fiable avec
les manettes de marque Nintendo. Si des clones ne sont pas détectés, utilisez
le mode NES.
Les manettes de style Atari sont maintenant supportés (Atari, Commodore, etc). Les
variations à deux boutons le sont aussi. (eg: Sega Master System).
Ajout de 'padding' au 'report descriptor' en mode NES. Ceci permet
au mode NES de fonctionner correctement sous Windows. (Ce n'était
pas nécéssaire avec Linux...)
Correction d'une erreur de code qui causait des
événements de boutons aléatoires lorsqu'il
n'y avait pas de manette connectée au circuit.
Le mode NES a maintenant son propre numéro de produit USB
La pin PD1 est maintenant laissée en entrée
(sans pull-up) car elle est soudée avec PD0 sur la révision
C du circuit imprimé. (Je préfère faire cela au lieu
de jeter un lot de 50 circuits à la poubelle ou faire des corrections
en coupant une trace et en soudant un fil...)
Version initiale. Support des manette NES et SNES.
Contactez moi à l'addresse
raph@raphnet.net
si vous faites des modifications intéressantes.
Modifications apportés au pilote USB d'Objective Development:
Le cavalier de sélection de mode SNES/NES affecte le contenu du
'report descriptor'. Pour que ça soit possible, j'ai modifié
le pilote USB d'Objective Development. Voici un 'diff' généré
à partir du pilote USB contenu dans HIDKeys.2006-03-14: usbdrv-diff
Combinaison Vendor ID/Product ID USB:
Veuillez ne pas réutiliser ma combinaison VID/PID pour des projets dérivés
ou autres. Obtenez-en un vous-même. J'ai acheté les miens chez
mecanique, et ça coute beaucoup
moins cher que de devenir membre du forum des implémenteurs USB (2000$ US)...
Circuit imprimé pour la version 'montage en surface'
La version montage en surface comporte plusieurs avantages:
Très petite. (environ 1"1/4 x 3/4" ou 32mm x 20mm).
Rentre dans un tuyau de PVC de 3/4". Parfait pour mettre en-ligne avec un connecteur USB.
Peut être installé directement à l'intérieur d'une manette ou joystick.
Moins de fils à souder que sur un 'breadboard'. En quelque sorte, c'est plus facile à assembler.
Apparance plus professionelle.
Vous pouvez utiliser le circuit à d'autres fins. (Après tout, vous avez
un microcontroleur reprogrammable avec USB et quelques signaux d'entrée/sortie...)
D'un autre coté, souder des composantes en montage en surface peut être plus
difficile si vous n'avez pas un équipement approprié ou si vous êtes
débutant.
Voici une vue composée de la révision C du circuit-imprimé:
Étape 1: Utilisez la vue composée,
la liste des composantes et le schéma
pour trouver l'endroit ou mettre chaque composantes. Après avoir tout soudé,
inspectez le tout soigneusement pour éviter les ponts de soudures et les soudures
froides. IMPORTANT: Faire un pont de soudure entre PD1 et PD0 (voir schéma).
Étape 2: Utilisez le schéma de gauche approprié pour savoir ou souder les fils
USB, ISP et ceux de la manette. Le cable ISP peut être construit avec un connecteur
2x3 et un morceau de cable plat. Le 'pinout' du schéma suit le standard d'atmel pour
l'ISP des AVR via 6 fils.
Étape 3: Si vous voulez utiliser une manette de NES, fermez JP1 en
faisant un pont de soudure ou en soudant un petit bout de fil. Si vous utilisez une manette
à connecteur DB9 (ex: Atari), fermez JP1 et JP2. Regardez les images à droite pour des exemples.
Étape 4: Branchez le cable ISP et le cable USB. Utilisez un programmeur
pour programmer le fichier hex dans l'ATmega8. Ensuite, configurez les 'fuses bytes'
(High byte=0xc9, low byte=0x9f) correctement.
Étape 5: Essayez l'adaptateur avec un jeu. Si tout fonctionne bien,
enlevez le cable ISP si vous ne prévoyez pas mettre à jour le code.
Maintenant pour protéger le circuit, utilisez une petite boite ou mettez
le à l'intérieur d'une gaine thermo-rétractable.
Je vous recommande aussi de mettre un peu de colle chaude par dessus les soudures
des fils, pour empêcher les fils de se briser en cet endroit.
Voici certains joysticks de style Atari que j'utilise avec cet adaptateur.
Voici la première version de mon adaptateur. Il est construit avec le circuit imprimé revision C, un DB9 male et quelques fils.
Voici à quoi ressemblait mon installation lorsque je cherchais à comprendre le fonctionnement
du multi-tap. J'ai par la suite écris ce document expliquant son
fonctionnement.
Le multi-tap apparaissant comme 4 manettes indépendantes et distinctes sous Windows XP.
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. 25 septembre 2016 (Dimanche) Filippo d'Italie a converti un joystick Alberici pour PC (DB15) à USB. Les joystick Alberici, en particuler la version avec branchement DB9 pour Commodore 64, furent très populaires en Italie à la fin des annés 80 pour leur solidité et fiabilité...
17 février 2016 (Mercredi) Filippo d'Italie a construit son projet dans une boite de tictac pour pouvoir utiliser ses manettes C=64 avec l'émulateur VICE. J'aime la petite trappe d'accès pour le connecteur ISP!
6 janvier 2015 (Mardi) Roman Sysoev de Russie a fabriqué cet adaptateur en logeant dans un boîtier de souris HP un circuit imprimé ARCAdaptor - http://adapto.rs (Russe)
24 décembre 2013 (Mardi) Slawomir Krysztowiak de Pologne m'a envoyé ces photos de l'adaptateur qu'il a fabriqué en cadeau de Noël pour son frère.
Quelqu'un de France m'a fait parvenir ces photos qui sont un bon exemple de comment monter ce circuit à l'intérieur même d'une manette de Sega Master System:
Laurent Quesnel a installé le circuit à l'intérieur d'une cartouche SMS:
JP des Pays-Bas s'est construit une manette Genesis USB::
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.