|
|||||||||||||||||||||||||||||||||||||||||||
|
Chers Amiga users, chose promise, chose due : voici en exclusivité pour A-News quelques notions sur le Copper. Celui-ci étant très puissant, nous aurons besoin de plusieurs numéros pour étudier pleinement ses possibilités. Cependant, ce que nous allons voir ci-dessous va nous offrir quelques idées d'utilisation. Précisons que ce mois-ci, cet article n'est pas uniquement spécifique à l'assembleur mais à tous les langages faisant appel directement au Copper. Utilisation du Copper Tout d'abord, passons en revue les utilisations possibles du Copper. Son premier rôle est de garder l'image affichée, il permet aussi d'afficher plus de 32 couleurs simultanément à l'écran, il peut servir à créer des effets de couleurs en changeant la palette... son emploi se limite surtout au domaine graphique. Le Copper ne possède que trois instructions (SKIP, WAIT et MOVE) mais elles offrent énormément de possibilités comme vous l'avez peut-être déjà deviné.
Elle permet de "poker" le contenu d'une adresse dans un des registres et uniquement dans un des registres supérieurs à $20. Attention : le premier mot de l'instruction contient l'adresse de destination et le second mot contient donc la valeur à poker. Précisons que le bit 0 du premier mot de l'instruction doit toujours être mis à 0 et qu'il est préférable de mettre à 0 les bits 9, 10, 11, 12, 13, 14 et 15 du premier mot. L'instruction WAIT Cette instruction seule ne sert à rien ; nous allons voir un peu plus loin son utilisation avec MOVE. Pour différencier WAIT de MOVE et de SKIP, les bits 0 des deux mots de l'instuction WAIT doivent être mis à 0. Enfin, l'abscisse du point à attendre doit se trouver dans le deuxième octet du premier mot et l'ordonnée dans les bits 1 à 7 de ce même mot. Attention, voici la subtilité de l'instruction WAIT qui en fait sa puissance : les bits 8 à 14 du deuxième mot, appelés bits de masque de l'abscisse et les bits 1 à 7 du deuxième mot (bits de masque de l'ordonnée) sont mis à 1 quand nous voulons que le bit du premier mot du même poids soit pris en considération, c'est-à-dire que si nous mettons à 0 les bits 1 à 7 et à 1 les bits 8 à 15 du deuxième mot, l'ordonnée sera ignorée et le Copper attendra à chaque ligne la colonne précisée dans le premier mot de l'instruction, ceci peut servir à tracer un ou plusieurs rectangles, des traits horizontaux mais pas de traits verticaux comme cela est expliqué dans le paragraphe concernant l'abscisse. Le bit 15 du deuxième mot sera pour l'instant toujours mis à 1, nous verrons son utilité quand nous étudierons le Blitter. Abscisses et ordonnées Consacrons un petit paragraphe aux abscisses et ordonnées de l'instruction WAIT car ça en vaut la peine. L'abscisse L'abscisse doit être comprise entre $0 et $E2 mais le bit de poids le plus faible n'est pas pris en considération ce qui donne donc 113 abscisses possibles au lieu de 320. En fait, chaque abscisse du Copper correspond à quatre abscisses écran en mode basse résolution et à huit abscisses écran en mode haute résolution. L'ordonnée No problem for it, 255 ordonnée as ever (l'abscisse 0 compte aussi). Résumons tout ceci par un petit tableau : ![]() Quand nous voudrons prendre en considération l'abscisse et l'ordonnée on mettra $FFFE dans le second mot de l'instruction WAIT. Créer une liste Copper On appelle "liste Copper" toute combinaison de plusieurs instructions Copper, en l'occurrence MOVE et WAIT. Une liste Copper peut très bien être faite de plusieurs MOVE uniquement, comme nous l'avons vu dans le numéro précédent. A ce propos, je vous avais promis quelques explications complémentaires sur le listing de la routine d'affichage d'image, les voici donc : Vous n'ignorez pas que la graphics.library possède de nombreuses routines d'animations graphiques, mais elle permet aussi en pokant l'adresse du début de la liste Copper dans le $32 octet d'exécuter la liste Copper par le Copper évidemment. Ceci est extrêmement important ! Toute liste Copper doit absolument se terminer par les deux mots suivant : $FFFF, $FFFE. Ceci signifie que le Copper doit attendre la ligne 255, or ceci lui est impossible car il ne peut aller plus loin que la ligne 254. Revoyons la partie du programme du mois dernier qui nous intéresse, signalons aux nouveaux venus que ce programme permettait d'afficher une image à l'écran, mais pour cela elle devait être perpétuellement réaffichée au moyen du Copper. Nous n'expliquerons pas les lignes déjà commentées précédemment. Un petit ajout à cette routine, bien que fonctionnant parfaitement telle qu'elle est, il vaut mieux fermer la dos.lib (ce que j'avais oublié de faire) en plus de la fermeture du fichier. Enfin, une petite rectification dans le commentaire de la ligne "lsl.w #4", le décalage n'est pas d'un octet à gauche mais d'un quartet. ![]() Les directives sont peu nombreuses : 1. Pour créer un changement de palette sur tout l'écran, une liste Copper de MOVE suffit. 2. Pour créer un changement de palette sur une partie d'écran, votre liste Copper doit se présenter de la façon suivante : WAIT , MOVE (dans les registres de $180 à $1be inclus), WAIT... 3. N'oubliez pas de terminer votre liste Copper par un $FFFF, $FFFE. 4. Les WAIT WAIT doivent être mis dans l'ordre de balayage du spot sinon gare aux bogues. Voilà Sur ce je vous quitte et vous donne rendez-vous au mois prochain avec une rubrique pour les débutants, la routine de changement de palette et une initiation aux défilements.
|