Obligement - L'Amiga au maximum

Vendredi 23 mai 2025 - 11:03  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in English


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
ALL


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


Programmation : Assembleur 68k - choix de menus avec la souris
(Article écrit par François Fleuret et extrait de Génération 4 - mai 1989)


Jusqu'à aujourd'hui, les programmes que nous vous avons donnés étaient simplement des "démonstrations" sans possibilité pour l'utilisateur d'intervenir sur le déroulement des choses. Nous allons donc ici nous attarder sur l'un des liens entre l'utilisateur et l'Amiga : la souris.

Contrairement à ce que l'on pourrait penser, la gestion de la souris est des plus simples car il n'y a absolument aucune initialisation à faire avant de lire les données fournies par ce sympathique rongeur. La souris fournit cinq informations : sa position en X, sa position en Y et la position de chacun de ses trois boutons (car l'Amiga peut accepter des souris à trois boutons !).

Les coordonnées X et Y sont comprises entre 0 et 255 et le problème est donc de savoir comment le système fait pour pouvoir gérer les déplacements de la souris sur plus de 255 points (par exemple, horizontalement, il y a 320 points ou plus). Le principe utilisé est très simple, en effet, le système convertit les coordonnées absolues (fournies par la souris) en coordonnées relatives à partir desquelles il calcule la nouvelle position à l'écran. Pour faire cela, il suffit de noter la dernière position absolue de la souris et de la soustraire à la nouvelle pour obtenir un déplacement relatif. On ajoute ensuite ce déplacement relatif aux précédentes coordonnées utilisées par le système (et qui sont absolues) pour avoir les nouvelles coordonnées de la souris (pour le système). Les coordonnées que l'on obtient sont donc purement artificielles mais le principe fonctionne à merveille. Le léger défaut est que ce principe ne permet pas de faire un déplacement de plus de 127 points entre deux calculs de coordonnées, essayez donc de déplacer votre souris très rapidement, elle fait n'importe quoi.

Pour lire les coordonnées absolues (comprises entre 0 et 255), il suffit de lire l'adresse JOY0DAT pour le port 0 et JOY1DAT pour le port 1, on récupère ainsi X dans l'octet de poids faible et Y dans l'octet de poids fort. Pour ce qui est des boutons : le bouton de gauche est représenté par le bit 6 de CIA ($BFE001) pour le port 0 et par le bit 7 pour le port 1. Pour le bouton droit du port 0, c'est le bit 10 de POTGOR ($DFF016) et pour le bouton fantôme, c'est le bit 8. Pour le port 1, ce sont les bits 14 et 12. Voici un petit tableau récapitulatif :

Port 0
  • X : bits 0-7 de JOY0DAT $DFFOOA
  • Y : bits 8-15 de JOY0DAT $DFFOOA
  • Bouton gauche : bit 6 de CIA $BFE001 (1=OFF 0=ON)
  • Bouton droit : bit 10 de POTGOR $DFF016 (1=OFF 0=ON)
  • Bouton fantôme : bit 8 de POTGOR $DFF016 (1=OFF 0=ON)
Port 1
  • X : bits 0-7 de JOY1DAT $DFFOOC
  • Y : bits 8-15 de JOY1DAT $DFFOOC
  • Bouton gauche : bit 7 de CIA $BFE001 (1=OFF 0=ON)
  • Bouton droit : bit 14 de POTGOR $DFF016 (1=OFF 0=ON)
  • Bouton fantôme : bit 12 de POTGOR $DFF016 (1=OFF 0=ON)
Comme programme illustrant ce qui précède, je vous donne un sélectionneur de menu qui vous permettra de placer des choix dans vos démos. Ce sélectionneur permet de faire un choix parmi 16 menus différents. Il affiche tout d'abord une image IFF 320x256 monochrome non compactée qui contient ces 16 choix (chacun se trouvant dans une boîte de 16 lignes de hauteur). Ensuite, en fonction de la position de la souris, il change la couleur du fond sous le menu ainsi désigné. On peut sélectionner un menu en cliquant dessus. Dans ce cas-là, sa couleur change définitivement. Un deuxième clic annule la sélection. Le programme gère quatre types de menus :
  • Les menus non sélectionnables.
  • Les menus sélectionnables.
  • Les menus non sélectionnables qui font quitter.
  • Les menus sélectionnables qui font quitter.
Le type de chacune des lignes est donné dans deux mots :
  • TYPE_WORD qui contient la "sélectionnabilité" (mais si, ça doit bien exister !) d'un menu. Par exemple, si le bit 0 est à 1 cela signifie que l'on peut sélectionner le menu le plus en haut de l'écran.

  • QUIT_WORD qui indique si le clic sur un menu fait quitter la routine. Si le bit 5 est à 1, cela signifie que le menu n°5 (le sixième en partant du haut) est un menu "EXIT".
On récupère ensuite les menus sélectionnés dans SELECT_WORD dont chaque bit correspond à un menu...

Techniquement, c'est bête à pleurer, on construit au début une liste Copper qui contient un dégradé de couleur. Ce dégradé est pris dans une table appelée "DEGRADE" dont on fait une copie au début dans la table "COULEURS". Durant l'IRQ, on remet les couleurs de la table COULEURS dans la liste Copper puis on place du vert dans la bande désignée par la souris. Lorsque l'on clique, si le menu était déjà sélectionné, on remet la couleur de la table DEGRADE dans la table COULEURS (pour effacer la sélection) sinon, on rajoute du vert dans la couleur de COULEURS afin de signaler que ce choix a été sélectionné. Si le menu choisi est un EXIT, on met le drapeau QUIT_FLAG à $FF afin que la routine d'attente (hors interruption) soit prévenue du changement et arrête de boucler. C'est tout...

Bien évidemment, cette routine ne sert à rien lorsqu'elle est toute seule, il faut l'insérer dans un autre programme pour que son intérêt apparaisse. Pour l'inclure dans un autre programme, il faut supprimer les routines SAVE_ALL et RESTORE_ALL et ne pas oublier de remettre les initialisations de l'autre programme (celui dans lequel la routine se trouve) lorsqu'on la quitte.

Assembleur
Assembleur
Assembleur
Assembleur
Assembleur
Assembleur

Comme toujours, ce programme a été réalisé avec le petit Kseka mais peut être adapté sans gros problèmes aux autres assembleurs. Pour le Devpac, il faut remplacer les "BLK" par des "DS" et remplacer les quatre dernières lignes par :

image:
 incbin "image.iff" ; Remplace le RI du Seka
bitplan=image+138

Voilà, c'est tout pour les menus...


[Retour en haut] / [Retour aux articles]