[PRJ-ABOUTI] Adapter un volant + manette PC sur MD.
Modérateur : Politburo
[PRJ-ABOUTI] Adapter un volant + manette PC sur MD.
Yop.
J'ai récupéré un volant "Formula 1 Race Master II" de www.trust.com, et je suis en train de l'adapter sur mégadrive
6 Modes de configuration permettrons de jouer à 6 jeux différents dont je dispose (vi je n'en ai pas plus comme jeux de voiture).
Un appui sur le poussoir permet de sélectionner un mode parmi 6 (des fois faut configurer le jeu par ses options).
Je vais rajouter un mode d'étalonnage du joystick lors de l'appui sur le BP à la mise sous tension.
Un joystick PC de déplacement renvoie (en théorie) 2,5V s'il ne bouge pas, 0V s'il bouge dans un sens, et +5V dans l'autre sens, ce qui, d'après mes mesures n'est pas le cas, d'où l'intérêt de l'étalonnage.
A terme le but étant de pouvoir adapter n'importe quel joystick PC sur MD.
Ou bien un joystick Atari (encore plus simple à faire).
Le but ultime étant tout de même d'adapter mon maxi super joystick TOP GUN pour PS2 (PS1 même combat) au standard JAMMA.
Soft un peu plus délicat que pour ce système là, les joystick playstation étant "pseudo" intelligent et nécessitant un protocole de communication.
Mais bon, je finis ce projet là, et je passerai au suivant.
A+
J'ai récupéré un volant "Formula 1 Race Master II" de www.trust.com, et je suis en train de l'adapter sur mégadrive
6 Modes de configuration permettrons de jouer à 6 jeux différents dont je dispose (vi je n'en ai pas plus comme jeux de voiture).
Un appui sur le poussoir permet de sélectionner un mode parmi 6 (des fois faut configurer le jeu par ses options).
Je vais rajouter un mode d'étalonnage du joystick lors de l'appui sur le BP à la mise sous tension.
Un joystick PC de déplacement renvoie (en théorie) 2,5V s'il ne bouge pas, 0V s'il bouge dans un sens, et +5V dans l'autre sens, ce qui, d'après mes mesures n'est pas le cas, d'où l'intérêt de l'étalonnage.
A terme le but étant de pouvoir adapter n'importe quel joystick PC sur MD.
Ou bien un joystick Atari (encore plus simple à faire).
Le but ultime étant tout de même d'adapter mon maxi super joystick TOP GUN pour PS2 (PS1 même combat) au standard JAMMA.
Soft un peu plus délicat que pour ce système là, les joystick playstation étant "pseudo" intelligent et nécessitant un protocole de communication.
Mais bon, je finis ce projet là, et je passerai au suivant.
A+
Modifié en dernier par MG le 20 nov. 2006 07:55, modifié 2 fois.
Mon pseudo est directement lié aux prénoms de mes enfants : Nadine, Christine et Nicolas.
Etat du projet :
1/ L'alim MD ne fournit pas suffisament pour alimenter le tout...
Donc faut prévoir une alim externe (Bloc secteur suivit d'un pont de diodes et d'un régulateur +5V)
2/ Tous les niveaux de sortie (qui commandent la MD) sont actifs au niveau "0".
A l'init du système les sorties sur le bus doivent être à "1" (tous les boutons relâchés).
4/ Le front TH est de l'ordre de 30µs, à l'état bas, il fait 3ms* (compte tenu de ce qui me sert d'oscillo).
Ce qui veut dire que : le soft doit détecter le front haut, positionner les datas correspondantes sur le bus, attendre la fin du front (de l'ordre de 150 cycles en gros), positionner la suite des datas, et seulement ensuite vaquer à ses autres occupations.
Edit 1 :
* En fait le temps de l'état bas est variable, je suppose que, comme la scrutation de l'état du joystick est liée au code programme, ce temps là est plus ou moins variable...
Des fois 20 ms (une trame en 50Hz), ou bien plus... suivant l'animation effectuée à l'écran.
Ce que je prends pour acqui est le temps lié à l'état haut, donc 30µs, donc je me base là dessus, ce sera le temps "crucial" impératif.
5/ Il faut puller à la masse les sorties joystick XX' et YY' du joysticj PC.
Les boutons du même joystick sont à puller au +5V par contre.
Edit 2 :
Remarques :
A vide les entrées joystick sont à "1", il n'y a pas de résistances de rappel, donc le µc qui gère les I/Os sur la MD doit avoir des résistances internes de rappel.
Par contre, le PIC reset si on connecte la MD sous tension avec le système sous tension lui aussi, il faut donc des résistances de 220 ohms en série sur les I/Os (à tester).
PS : J'ai crâmé les I/Os d'une MD gasp... m'en reste plus que 9 en état de marche... arf
C'est là où j'en suis.
N'ayant pas le soft at home, la suite la semaine prochaine.
A+
1/ L'alim MD ne fournit pas suffisament pour alimenter le tout...
Donc faut prévoir une alim externe (Bloc secteur suivit d'un pont de diodes et d'un régulateur +5V)
2/ Tous les niveaux de sortie (qui commandent la MD) sont actifs au niveau "0".
A l'init du système les sorties sur le bus doivent être à "1" (tous les boutons relâchés).
4/ Le front TH est de l'ordre de 30µs, à l'état bas, il fait 3ms* (compte tenu de ce qui me sert d'oscillo).
Ce qui veut dire que : le soft doit détecter le front haut, positionner les datas correspondantes sur le bus, attendre la fin du front (de l'ordre de 150 cycles en gros), positionner la suite des datas, et seulement ensuite vaquer à ses autres occupations.
Edit 1 :
* En fait le temps de l'état bas est variable, je suppose que, comme la scrutation de l'état du joystick est liée au code programme, ce temps là est plus ou moins variable...
Des fois 20 ms (une trame en 50Hz), ou bien plus... suivant l'animation effectuée à l'écran.
Ce que je prends pour acqui est le temps lié à l'état haut, donc 30µs, donc je me base là dessus, ce sera le temps "crucial" impératif.
5/ Il faut puller à la masse les sorties joystick XX' et YY' du joysticj PC.
Les boutons du même joystick sont à puller au +5V par contre.
Edit 2 :
Remarques :
A vide les entrées joystick sont à "1", il n'y a pas de résistances de rappel, donc le µc qui gère les I/Os sur la MD doit avoir des résistances internes de rappel.
Par contre, le PIC reset si on connecte la MD sous tension avec le système sous tension lui aussi, il faut donc des résistances de 220 ohms en série sur les I/Os (à tester).
PS : J'ai crâmé les I/Os d'une MD gasp... m'en reste plus que 9 en état de marche... arf
C'est là où j'en suis.
N'ayant pas le soft at home, la suite la semaine prochaine.
A+
Modifié en dernier par MG le 11 nov. 2006 11:51, modifié 1 fois.
Mon pseudo est directement lié aux prénoms de mes enfants : Nadine, Christine et Nicolas.
Yop !
Alors les dernières news sont que :
Effectivement on ne peut pas se fier au signal TH, celui-ci est lié au code, donc les temps ne peuvent pas être pris en compte.
De même que les niveaux !
Parfois le niveau bas dure 30µs, parfois c'est le niveau haut etc etc...
Comme le chip dans les manettes MD est une tte bête bascule, la lecture des boutons est laissée à la charge du programmeur.
Alors suivant les cas, il laisse le niveau haut ou bas etc etc...
Bref, il faut utiliser l'interruption sur le Port B du PIC pour pouvoir à tout instant donner l'état des boutons, et ce quelquesoit le niveau de TH qui demande cet état (0 ou 1).
L'interruption sera aussi générée lors de l'appui sur BP1, mais cela ne devrait pas poser de pb outre mesure.
Ce soir j'essaie de nouveau.
Le schéma de principe n'est plus à jour.
J'ai rajouté des résistances en série sur les lignes reliées à la MD car le PIC faisait des resets intempestifs.
Brefle, cela reste encore du domaine de : "l'affaire à suivre..."
A+
Alors les dernières news sont que :
Effectivement on ne peut pas se fier au signal TH, celui-ci est lié au code, donc les temps ne peuvent pas être pris en compte.
De même que les niveaux !
Parfois le niveau bas dure 30µs, parfois c'est le niveau haut etc etc...
Comme le chip dans les manettes MD est une tte bête bascule, la lecture des boutons est laissée à la charge du programmeur.
Alors suivant les cas, il laisse le niveau haut ou bas etc etc...
Bref, il faut utiliser l'interruption sur le Port B du PIC pour pouvoir à tout instant donner l'état des boutons, et ce quelquesoit le niveau de TH qui demande cet état (0 ou 1).
L'interruption sera aussi générée lors de l'appui sur BP1, mais cela ne devrait pas poser de pb outre mesure.
Ce soir j'essaie de nouveau.
Le schéma de principe n'est plus à jour.
J'ai rajouté des résistances en série sur les lignes reliées à la MD car le PIC faisait des resets intempestifs.
Brefle, cela reste encore du domaine de : "l'affaire à suivre..."
A+
Mon pseudo est directement lié aux prénoms de mes enfants : Nadine, Christine et Nicolas.
Yop !
News :
Alors, après des déboires avec les pédales de mon superbe joystick de récup (câbles coupés), j'arrive à jouer à STREET RACER, et ... ALADIN (vi, celui-ci me permet de tester les boutons A, B, C, START et les directions), sinon les autres jeux font n'importe quoi...
Cela veut dire quoi ?
Tout simplement que ma routine d'interruption... n'est pas assez rapide !
Si si !
Pourquoi ?
Et bien la commande de la lecture du joystick de la MD s'effectue par ce bout de code :
porta:
move.b #$40,$a10003 ; TH (PD6) <-- "1".
nop ; tempo <MEGA IMPORTANTE>
nop ;
move.b $a10003,d1 ; D1 <-- Lecture joystick 1.
andi.b #$3f,d1 ; D1 <-- D1 & 0x3F ==> D1 <-- ¦ PD5 RW) TR (C)
; ¦ PD4 (RW) TL (B)
; ¦ PD3 (RW) RIGHT
; ¦ PD2 (RW) LEFT
; ¦ PD1 (RW) DOWN
; ¦ PDO (RW) UP
move.b #$00,$a10003 ; TH (PD6) <-- "0".
nop ; tempo <RE-MEGA IMPORTANTE>
nop ;
move.b $a10003,d0 ; Lecture second octet data.
andi.b #$30,d0 ; D0 <-- D0 & 0x30 ==> D1 <-- ¦ PD5 (RW) TR (START)
; ¦ PD4 (RW) TL (A)
; ¦ -
; ¦ -
; ¦ -
; ¦ -
lsl.b #2,d0 ; Bits 5 et 4 deviennent 6 et 7.
or.b d1,d0 ; D0 <-- D0 ¦ D1 (START, A, C, B, RIGHT, LEFT, DOWN, UP)
not.b d0 ; Complémenté car les niveaux logiques sont actifs au "0".
rts
Bien sûr, ce n'est qu'un exemple, chaque programmeur ayant ses habitudes, les artistes du code de jeux sur MD ont fait comme ils ont voulus, en augmentant ou diminuant le temps (dans l'exemple diminuer le temps ne doit pas être simple ) de lecture du port joystick, en inversant la lecture (TH à "0" au départ plutôt qu'à "1") etc etc...[/b]
Solution :
Revenir à la base et mettre un 74HC157 entre la SUBD9 mâle et le PIC, refaire une manette classique.
Cela permettra au PIC de positionner l'état des boutons en permanence sur 8 bits et la MD lira à sa vitesse le multiplexage des boutons.
Ce que je vais faire auj.
Il faut revoir le hard et le soft du PIC.
A suivre...
News :
Alors, après des déboires avec les pédales de mon superbe joystick de récup (câbles coupés), j'arrive à jouer à STREET RACER, et ... ALADIN (vi, celui-ci me permet de tester les boutons A, B, C, START et les directions), sinon les autres jeux font n'importe quoi...
Cela veut dire quoi ?
Tout simplement que ma routine d'interruption... n'est pas assez rapide !
Si si !
Pourquoi ?
Et bien la commande de la lecture du joystick de la MD s'effectue par ce bout de code :
porta:
move.b #$40,$a10003 ; TH (PD6) <-- "1".
nop ; tempo <MEGA IMPORTANTE>
nop ;
move.b $a10003,d1 ; D1 <-- Lecture joystick 1.
andi.b #$3f,d1 ; D1 <-- D1 & 0x3F ==> D1 <-- ¦ PD5 RW) TR (C)
; ¦ PD4 (RW) TL (B)
; ¦ PD3 (RW) RIGHT
; ¦ PD2 (RW) LEFT
; ¦ PD1 (RW) DOWN
; ¦ PDO (RW) UP
move.b #$00,$a10003 ; TH (PD6) <-- "0".
nop ; tempo <RE-MEGA IMPORTANTE>
nop ;
move.b $a10003,d0 ; Lecture second octet data.
andi.b #$30,d0 ; D0 <-- D0 & 0x30 ==> D1 <-- ¦ PD5 (RW) TR (START)
; ¦ PD4 (RW) TL (A)
; ¦ -
; ¦ -
; ¦ -
; ¦ -
lsl.b #2,d0 ; Bits 5 et 4 deviennent 6 et 7.
or.b d1,d0 ; D0 <-- D0 ¦ D1 (START, A, C, B, RIGHT, LEFT, DOWN, UP)
not.b d0 ; Complémenté car les niveaux logiques sont actifs au "0".
rts
Bien sûr, ce n'est qu'un exemple, chaque programmeur ayant ses habitudes, les artistes du code de jeux sur MD ont fait comme ils ont voulus, en augmentant ou diminuant le temps (dans l'exemple diminuer le temps ne doit pas être simple ) de lecture du port joystick, en inversant la lecture (TH à "0" au départ plutôt qu'à "1") etc etc...[/b]
Solution :
Revenir à la base et mettre un 74HC157 entre la SUBD9 mâle et le PIC, refaire une manette classique.
Cela permettra au PIC de positionner l'état des boutons en permanence sur 8 bits et la MD lira à sa vitesse le multiplexage des boutons.
Ce que je vais faire auj.
Il faut revoir le hard et le soft du PIC.
A suivre...
Mon pseudo est directement lié aux prénoms de mes enfants : Nadine, Christine et Nicolas.
Infos sur le hard et soft MD :
; Contributions :
; ===============
; http://cgfm2.emuviews.com/gen.php
; Schéma de principe de la GENESIS, docs etc etc... une mine d'infos.
; http://www.gamesx.com/controldata/gencont.htm
; Schéma du pad GENESIS.
; http://www.classicgaming.com/epr/genesis
; Infos soft et hard, une mine d'infos aussi.
; Contributions :
; ===============
; http://cgfm2.emuviews.com/gen.php
; Schéma de principe de la GENESIS, docs etc etc... une mine d'infos.
; http://www.gamesx.com/controldata/gencont.htm
; Schéma du pad GENESIS.
; http://www.classicgaming.com/epr/genesis
; Infos soft et hard, une mine d'infos aussi.
Mon pseudo est directement lié aux prénoms de mes enfants : Nadine, Christine et Nicolas.
News :
Bon et bien c'était la bonne solution.
Il ne me reste plus qu'à faire un nouveau prototype, régler qqs pbs de parasite liés aux pédales, ajuster un peu le soft et ce sera une petite carte sympa.
Il faut effectivement un multiplexeur comme sur la manette de la MD.
Je ferai une page certainement (avec un peu de temps), je mettrai le lien ici, il y aura le schéma, la carte implant et circuit imprimé et le soft en téléchargement pour ceux que ça intéresse.
Par la suite, j'adapte le joystick de PS1 selon le même principe.
Là, ce sera un tantinet plus marrant (je parle du gameplay, car avec ou sans volant je suis toujours aussi nul sur les courses de voitures).
Voilà, A+
Edit :
J'ai mis le schéma à jour en haut du topic
Edit 2 :
Page plus ou moins bien détaillée sur cette bidouille :
http://blatter.perso.cegetel.net/bidouilles/joy_pc.html
Bon et bien c'était la bonne solution.
Il ne me reste plus qu'à faire un nouveau prototype, régler qqs pbs de parasite liés aux pédales, ajuster un peu le soft et ce sera une petite carte sympa.
Il faut effectivement un multiplexeur comme sur la manette de la MD.
Je ferai une page certainement (avec un peu de temps), je mettrai le lien ici, il y aura le schéma, la carte implant et circuit imprimé et le soft en téléchargement pour ceux que ça intéresse.
Par la suite, j'adapte le joystick de PS1 selon le même principe.
Là, ce sera un tantinet plus marrant (je parle du gameplay, car avec ou sans volant je suis toujours aussi nul sur les courses de voitures).
Voilà, A+
Edit :
J'ai mis le schéma à jour en haut du topic
Edit 2 :
Page plus ou moins bien détaillée sur cette bidouille :
http://blatter.perso.cegetel.net/bidouilles/joy_pc.html
Mon pseudo est directement lié aux prénoms de mes enfants : Nadine, Christine et Nicolas.