logo

Cette page a au moins 16 ans !
This page is at least 16 years old !

L'adaptation de joypads pour les slots MVS consolisés est souvent un problème.
Les plus simples à trouver sont ceux de la Megadrive, ils ont 3 boutons, certains 6, et toujours un start. Ceux de la SNES conviendraient aussi, mais ils sont moins courants et surement plus chers.
Le standard JAMMA est conçu pour recevoir les infos des joypads en parallèle. Certains décident de se débrouiller en sacrifiant un joypad, en reliant recâblant tous les contacts des boutons directement sur le slot.
Ceci rend bien sur le joypad fonctionnel que sur le slot, à moins de laisser le câble DB9 d'origine. Cela reste la solution la plus simple et plus courament employée.

Une autre solution, qui consiste à y passer plus de temps, mais qui ne modifie en rien les joypads, est de rendre le slot compatible avec.
Tout d'abord, voici pourquoi les joypads DB9 ne transmettent simplement pas les données en parallèle: Sega ont toujours fait leur possible pour garder une compatibilité entre les pads Atari, Master System, et les derniers 3/6 boutons.
A l'origine le cablâge était fait pour passer Haut, Bas, Gauche, Droite, et A. Le B a été rajouté ensuite mais le tout était encore en parallèle.
Pour ajouter le C et le Start, Sega ont ajouté un multiplexeur (74LS157) qui permet à la console de demander quels boutons lire.

Connecteur DB9 Megadrive venant du joypad (femelle):

Brochage pour un pad 3 boutons:

Broche
Select = 0v
Select = +5v
1
Haut
Haut
2
Bas
Bas
3
0v
Gauche
4
0v
Droite
5
+5v
+5v
6
A
B
7
Select
Select
8
Masse
Masse
9
Start
C

Il faut absolument alimenter le pad sur les broches 5 et 8. La broche 7 permet de choisir la colonne.
Vous pouvez vérifier en observant Select quand un jeu tourne sur Megadrive, le signal devrait descendre toutes les 20ms (50Hz).

Voici le schéma de ces joypads, notez qu'il y a également une résistance de tirage sur Select:
Tout est en anglais pour faciliter la tâche aux éventuels enfoirés qui viendraient pomper les images.

 

Deux solutions sont possibles, soit l'adaptation est faite au niveau logiciel par un microcontroleur, soit par des circuits logiques courants.

 

Première solution:
Avantages: petite taille, simplicité, possiblité d'amélioration sans devoir tout refaire.
Inconvénients: prix, disponibilité et la nécéssité d'avoir un programmateur.

Pour un seul joueur, le schéma se résume simplement à ceci:

Il n'y a qu'un seul composant, le microcontroleur utilise son horloge interne et permet de faire la convertion sans problème. Il faudra exactement la même chose pour le deuxième joypad.
Voici le firmware (source et binaire) pour AtMega8 (A venir).

Le programme pourra être porté vers un AVR moins puissant mais aura toujours besoin de 12 broches d'E/S. (Mega48, Tiny2313, Tiny26 ?)
Il faut programmer LFUSE pour selectionner l'horloge 8Mhz interne. Il est tout à fait possible que le tout marche aussi à des fréquences inférieures.
Le routage peut se faire facilement sur de la plaque bakélite.

Liste de composants: A venir...

Explications:
Le programme est très simple, il met Select à l'état bas, lit A et Start, puis le met à l'état haut et lit Gauche, Droite, B et C. Il reconstitue un octet complet pour le transmettre sur le PORTD.
Ce cycle se repète environ toutes les 5ms (200Hz). L'important est d'avoir au moins un cycle toutes les ~15ms (>50Hz), pour ne pas "traîner" derrière le slot, qui lui lit les données à cette fréquence.
Les délais de 1ms entre chaque étape peut être réduit mais ne changera pas grand chose. Il a été choisi pour être sur que le 74LS175 du joypad ait le temps de réagir.

 

Deuxième solution:
Avantages: composants courants, peu couteux, pas besoin de programmateur.
Inconvénients: circuit plus conséquent et plus long à réaliser.

Le premier élément du circuit est un oscillateur à base de portes logiques NAND (CMOS 4011) qui fournira un signal carré d'environ 2.2/C1*R10 = 2.2KHz appelé CLKA.
Si cet oscillateur ne fonctionne pas comme prévu, 100nF pour C1 devrait aider (220Hz).

Ce type d'oscillateur a été choisi car les deux autres portes NAND du 4011 sont utilisées dans le reste du circuit.
Pour un seul joueur le schéma est le suivant (testé et fonctionne):

Pour deux joueurs, le montage varie peu. Il est donc vivement conseillé de réaliser celui-ci, plutôt que deux fois celui ci-dessus:

Note: Les 74LS171 des deux montages peuvent être remplacés par des 74LS175 (à ne pas confondre avec le 74LS157 qui lui est dans le joypad, c'est les mêmes chiffres mais pas de le même ordre!).

Je n'ai pas encore fait le routage sur bakélite au propre, mais une plaque 200x100 en bandes suffira amplement. La place prise dépendra de la stratégie...

Liste de composants: A venir...

Explications:
CLKA permet de donner la fréquence de rafraîchissement des données, elle sera en réalité divisée par deux à cause des deux états sur Select.
Dans les montages un joueur ou deux joueurs, U3, U6 et U1 ont le même rôle. U3 est remplacé par U6 dans le second montage parce qu'il convenait parfaitement et économisait un "deuxième U3".
Cest circuits sont également des bascules D dont l'entrée d'horloge est commune, elles servent à diriger et fixer les sorties sans qu'elles "clignotent" à cause du changement de Select.

Le 74LS74 est une double bascule D mais seule une moitié ne servira (U5:A), elle permet de diviser CLKA par deux pour donner CLKB.
C'est CLKB qui sera donné aux lignes Select des joypads.
Les sorties inverseuse et non-inverseuse de cette bascule servent à diriger CLKA vers le premier (U3/U6) ou le deuxième (U1) latch grâce aux deux portes NAND (U4:A et U4:B).
Quand CLKB est bas, seul le deuxième latch reçoit CLKA, il est par conséquent mis à jour (A et Start).
Quand CLKB est haut, seul le premier latch reçoit CLKA, il est alors mis à jour à son tour (Gauche, Droite, B et C).
Ceci permet d'orienter les données selon l'état de Select, le tout dans des temps raisonables.

Les fronts descendants de CLKA servent à la mise à jour des latches (CLK1 et CLK2) qui eux, réagissent au front montant créé par les portes NAND.
Les latches sont toujours mis à jour quand CLKB est fixe (d'où la nécéssite d'avoir CLKA deux fois plus rapide que CLKB).
Il aurait pu se poser des problèmes de synchronisation si les latches recevaient leur clk juste quand Select changeait de niveau.

footer
symbol symbol symbol symbol symbol