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