1

Bonsoir,

Comme indiqué en titre, je cherche à connaître l'état de mes joysticks. En lisant le compendium, je comprend que je dois installer une routine adhoc dans une table de vecteurs retourné par Kbdvbase (Xbios 34), routine qui scannera un buffer d'évènements joysticks quand elle sera appelée.

C'est bien ça ? et est-ce qu'il y a plus simple "out of the box" (gemdos, bios ou xbios) ?

Update 15 fév 2018

J'ai testé avec succès l'exemple décrit ici http://www.atari-forum.com/viewtopic.php?t=2768
Je vais utiliser cet exemple comme base de travail.

Update 16 juillet 2020
Voici une routine qui copie les octets en mémoire vidéo, pour voir le contenu effectif de l’évènement à traiter par le gestionnaire,

OnJoystickSysEventDbg lea screenBase,a1 ;a1 : side effect move.l (a1),a1 ;display visual help lea 1280(a1),a1 move.w #$8080,0(a1) move.w #$8000,8(a1) lea 160(a1),a1 move.w #$5555,0(a1) move.w #$5500,8(a1) ;display report bytes lea 160(a1),a1 move.b (a0)+,(a1)+ ;event source : $fe => j0, $ff => j1 move.b (a0)+,(a1)+ ;j0 state addq.l #6,a1 move.b (a0)+,(a1)+ ;j1 state rts

On peut voir la routine en action dans cette vidéo :

2

J'ai jamais essayé, mais je comprends la même chose que toi en lisant la doc. Ça a l'air assez lourdingue juste pour lire l'état du joystick...

Y'a peut-être moyen de feinter, cependant : il y a apparemment une commande IKBD qui permet d'activer un mode où bouger le joystick fait la même chose qu'appuyer sur les touches curseur du clavier :
https://www.kernel.org/doc/html/v4.13/input/devices/atarikbd.html (4.8.20. SET JOYSTICK KEYCODE MODE)
Si j'ai bien compris, on envoie la commande avec la fonction XBIOS Ikbdws().

Ça plus une fonction de lecture de l'état du clavier, ça peut peut-être le faire. Ne pas oublier de désactiver ce mode quand tu quittes ton programme.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

3

L'inconvénient de ce mode "code touche" semble être que chaque événement "on" (feu ou direction) est suivi immédiatement de l’événement "off" correspondant, indépendamment de l'état réel du joystick.

Ça ne me dérange pas d'implémenter la routine, dans le sens où je me sens capable de le faire.

Merci.

4

Petit up, Je suis bientôt au bout de ma routine (j'ai un programme de test, ma routine s'installe, et j'obtiens 3 bombes dès que je touche au joystick émulé par le clavier - j'utilise Hatari -).

Dans l'intervalle, j'ai refais des recherches, je tombe sur 3 bouts de codes sur le sujet :


J'en retire que :
  • Il faut envoyer à IKBD la commande d'activation du joystick 0 (par défaut on serait en mode souris)
  • Contrairement à ce que laisse penser le compendium, quelque soit l'entête ($fe, $ff), il y a 2 octets de données (état j0, j1 respectivement). L'entête permettrait juste de sauter l'état qui n'a pas bougé

je pense que le mois prochain je vais me prendre un lot de 2 manettes usb sur l'âme à zone afin de me passer de l'émulation joystick, et voir un peu ce qu'il en est.

5

Au final, je vais me baser sur le code posté dans le 3ème lien, il y a moyen de préfixer le titre du topic d'un "[RESOLU]" ou quelquechose d'équivalent ?

6

C'est pas trop l'usage sur ce forum, t'en fais pas pour ça smile
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

7

Petit up, j'ai dû ré-apprendre ce sujet, et j'ai donc complété mon poste avec ma routine de débug et une vidéo qui la montre en action.