Page 1 sur 1

[DCMOTO] second bouton de manette

Publié : 22 avr. 2022 16:26
par Bentoc
Daniel,

J'ai découvert récemment (mieux vaut tard que jamais ...) qu'il existait des manettes Thomson (MJ90-020) avec deux boutons.

fxrobin a fait un petit programme pour montrer le fonctionnement sur un TO8 :
IMG_20220405_204027.jpg
IMG_20220405_204027.jpg (358.64 Kio) Consulté 6408 fois
Ainsi qu'une vidéo de démo du résultat :


La lecture du registre permet bien de capter les deux boutons.

Serait-il possible de faire évoluer DCMOTO pour prendre en compte ce second bouton ? :D

Re: [DCMOTO] second bouton de manette

Publié : 22 avr. 2022 17:09
par __sam__
C'est pas standard comme manette (les miennes n'en ont qu'un) et ce bouton n'est pas pris en compte dans l'API en rom pour les joysticks. Est-ce que ca ne serait pas plutôt lié au 2e bouton d'une souris plutôt ?

Re: [DCMOTO] second bouton de manette

Publié : 22 avr. 2022 17:39
par Bentoc
Bah il y a quand même marqué Thomson sur la manette ;-)
joypad2.jpg
joypad2.jpg (70.46 Kio) Consulté 6392 fois
joypad.jpg
joypad.jpg (79.6 Kio) Consulté 6392 fois
Du coup même si la ROM n'a pas de routine pour y accéder, ça fonctionne bien en lisant E7CD.
Donc si je ne me trompes pas ça donne ça :

Code : Tout sélectionner

   [------] 6 bits convertisseur numerique-analogique 
 11 001100 (0: appuye | 1: relache) 
 ||   ||
 ||   ||_Fire B Joypad1
 ||   |__Fire B Joypad2
 ||
 ||_Fire A Joypad1
 |__Fire A Joypad2

Re: [DCMOTO] second bouton de manette

Publié : 22 avr. 2022 20:25
par Daniel
Il faut savoir que la différence entre les manettes NR. MJ90-020 à deux boutons et à un seul bouton est très subtile. L'aspect extérieur est parfaitement identique. La différence est visible uniquement à l'extrémité du connecteur.

connecteurs_manettes.jpg
connecteurs_manettes.jpg (46.49 Kio) Consulté 6375 fois

A gauche une manette avec un seul bouton connecté (celui du socle). Il y a trois trous sans connexion.
A droite une manette avec les deux boutons connectés. Il y a deux trous sans connexion.
Mais ce n'est pas la seule différence. Dans le deuxième modèle, le "commun manette" est relié au "commun manette" de l'ordinateur. Dans le premier modèle le "commun manette" est relié à la masse de l'ordinateur. Je ne connais pas la raison de cette différence, une enquête serait nécessaire pour trouver l'explication. Il y a peut-être des différences de câblage dans les ordinateurs entre la première et la dernière génération.
[Edit] Autre différence : dans le premier modèle le premier (et seul) bouton est celui du socle (celui du manche est inactif). Dans le deuxième modèle le premier bouton est celui du manche, le deuxième est celui du socle.
[Edit2] Autres différences : sur une face du connecteur, près de la sortie du câble, l'inscription TAIWAN est du grand côté (5 broches) de la prise DB9 pour le premier modèle. Elle est du petit côté (4 broches) pour le deuxième modèle. A l'extrémité du connecteur les angles sont plus arrondis dans le premier modèle.


L'émulateur dcmoto gère le deuxième bouton des manettes depuis octobre 2011 :
dcmoto201110.png
dcmoto201110.png (5.92 Kio) Consulté 6375 fois

Code : Tout sélectionner

// Joystick emulation ////////////////////////////////////////////////////////
void Joysemul(int i, int state)
{
 //PA0=0 nord   PA1=0 sud   PA2=0 ouest   PA3=0 est   PB6=0 actionA   PB2=0 actionB
 //PA4=1 nord   PA5=1 sud   PA6=1 ouest   PA7=1 est   PB7=1 actionA   PB3=1 actionB
 int n;
 if(joysticks == 0) return;
 n = 0;
 switch(i)
 {
  case 0: if(joysposition & 0x02) n = 0x01; break; //manette 0 nord
  case 1: if(joysposition & 0x01) n = 0x02; break; //manette 0 sud
  case 2: if(joysposition & 0x08) n = 0x04; break; //manette 0 ouest
  case 3: if(joysposition & 0x04) n = 0x08; break; //manette 0 est
  case 4: if(joysposition & 0x20) n = 0x10; break; //manette 1 nord
  case 5: if(joysposition & 0x10) n = 0x20; break; //manette 1 sud
  case 6: if(joysposition & 0x80) n = 0x40; break; //manette 1 ouest
  case 7: if(joysposition & 0x40) n = 0x80; break; //manette 1 est
  case 8: if(state) joysaction |= 0x40; else joysaction &= 0xbf; break;  //manette 0 bouton A
  case 9: if(state) joysaction |= 0x80; else joysaction &= 0x7f; break;  //manette 1 bouton A
  case 10: if(state) joysaction |= 0x04; else joysaction &= 0xfb; break; //manette 0 bouton B
  case 11: if(state) joysaction |= 0x08; else joysaction &= 0xf7; break; //manette 1 bouton B
 }
 if(n > 0) {if(state) joysposition |= n; else joysposition &= (~n);}
}
Par contre, dans l'émulation des manettes du PC par le clavier, il n'est pas prévu de touche pour simuler le deuxième bouton. Je vais l'ajouter dans la prochaine version.

Re: [DCMOTO] second bouton de manette

Publié : 22 avr. 2022 21:09
par __sam__
Y a t'il des jeux ou des programmes d'époque qui utilisent le bouton du manche ?

Re: [DCMOTO] second bouton de manette

Publié : 22 avr. 2022 21:14
par Daniel
Aucun programme à ma connaissance. Et en plus il est impossible de tester le deuxième bouton avec le BASIC, ni même avec les routines du moniteur.
Les deux premiers modèles de manettes n'avaient qu'un seul bouton, la moitié des derniers modèles n'en avaient aussi qu'un seul.
Les éditeurs auraient eu des réclamations s'ils avaient utilisé les deux boutons, presque personne n'avait le bon modèle.

Re: [DCMOTO] second bouton de manette

Publié : 23 avr. 2022 01:07
par Bentoc
Désolé Daniel,
Effectivement je me suis basé sur le menu de l'émulation manette par le clavier (ce qui m'a laissé pensé que ce n'était pas géré) et je n'ai pas testé.
Le second bouton fonctionne bien dans DCMOTO avec ma manette 8bitDo M30 en Bluetooth ... mea culpa

En basic on peut lire la valeur du second bouton, le programme est dans mon premier post.

Re: [DCMOTO] second bouton de manette

Publié : 23 avr. 2022 08:07
par Daniel
Dans le message précédent, je voulais dire qu'il n'y a pas d'instruction BASIC pour tester le second bouton. Avec des PEEK et des POKE, bien évidemment, on peut tout faire en BASIC, par exemple tester les ports des PIA ou charger du langage machine en RAM et l'exécuter.

Re: [DCMOTO] second bouton de manette

Publié : 23 avr. 2022 11:06
par Daniel
Ajout dans dcmoto de l'émulation du deuxième bouton des manettes par le pavé numérique (touche 0 pour la manette 0, touche 4 pour la manette 1).
Nouvelle version à http://dcmoto.free.fr/emulateur/ (chargez la version de développement 2022.04.23 ou plus récente).

Rappel :
Le deuxième bouton était déjà émulé par la touche ENTREE du clavier avec l'option CTRL-gauche (manette 0) et CTRL-droit (manette 1).
Il était aussi émulé par les joysticks du PC.

Re: [DCMOTO] second bouton de manette

Publié : 23 avr. 2022 11:54
par Bentoc
merci !

Re: [DCMOTO] second bouton de manette

Publié : 23 avr. 2022 17:25
par Asic512
La manette Thomson de la vidéo semble n'être qu'un QuickShot I de Spectravideo ripoliné (un tour de Garcimore ? Chacun ses références ...). Je possédais un tel QuickShot I et il me semble bien que les deux boutons avaient le même effet dans les jeux ou dans le basic (sur TO8). J'ignorais en tout cas qu'on pouvait les différencier.

Re: [DCMOTO] second bouton de manette

Publié : 24 avr. 2022 17:57
par fxrobin
Super, merci Daniel.
Comme Bentoc, n'ayant pas vu d'option pour l'association avec le clavier, je pensais que ce n'était pas supporté.

Le joystick blanc, c'est celui que j'ai eu en 1988 avec mon TO8. A l'époque je n'avais pas compris pourquoi mon second bouton ne faisait rien alors qu'un copain, sur son TO9, avait le même et les deux activaient le "premier bouton".

Mystère résolu, il n'y a plus qu'à faire un truc qui en profite ou alors hacker un jeu existant pour lui rajouter un usage (Slapfight, Turbo Cup, ...)

Re: [DCMOTO] second bouton de manette

Publié : 24 avr. 2022 18:41
par Daniel
Il y a un petit inconvénient à l'utilisation des deuxièmes boutons : Sur le port B du 6821, ils partagent deux bits avec le CNA.
Si on configure le 6821 pour la sortie son 6 bits les deuxièmes boutons ne fonctionnent plus, et réciproquement.

Re: [DCMOTO] second bouton de manette

Publié : 29 mai 2022 22:11
par Daniel
C'est amusant cette histoire du deuxième bouton, câblé dans certains modèles et pas câblé dans d'autres.
Il y a une annonce récente d'ebay disant ceci :
Un joystick officiel en boite ( le bouton sur le stick ne fonctionne pas , à nettoyer)
L'acheteur risque de s'épuiser à le nettoyer, car comme il n'est pas câblé il ne fonctionnera jamais :mrgreen: :mrgreen: :mrgreen: