Obligement - L'Amiga au maximum

Mardi 23 mai 2017 - 16:45  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

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

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


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


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


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Soutien

N'hésitez pas à soutenir le projet Obligement



Contact

David Brunet

Courriel

 


Programmation : Assembleur - le Copper, description et fonctionnement
(Article écrit par Little Zeus et extrait d'A-News (Amiga News) - août 1988)


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é.
  • MOVE remplit exactement la même fonction que le MOVE en mode d'adressage immédiat que nous utilisons si souvent.
  • WAIT met le Copper en atténte jusqu'à ce que le spot de l'écran ait atteint les coordonnées précisées par l'instruction.
  • Quant à SKIP, son utilisation étant rare et assez compliquée, nous ne la verrons que dans un prochain numéro.
L'instruction MOVE

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 :

Copper

Errata : dans ce tableau, les mots "abscisse" et "ordonnée" ont été malencontreusement inversés.

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 Copperlist

On appelle "Copperlist" toute combinaison de plusieurs instructions Copper, en l'occurrence MOVE et WAIT. Une Copperlist 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 Copperlist dans le $32 octet d'exécuter la Copperlist par le Copper évidemment.

Ceci est extrêmement important !

Toute Copperlist 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.

Copper

Maintenant que nous avons vu les éléments principaux, je vous propose d'ajouter à la Copperlist du mois dernier quelques instructions faisant des effets de couleurs au moyen du Copper. Nous allons voir les directives à prendre mais je vous laisse taper la routine par vous-même, je ne vais tout de même pas faire le travail à votre place. De toute façon, je vous montrerai la routine le mois prochain ainsi qu'une routine permettant les défilements (scrollings).

Les directives sont peu nombreuses :

1. Pour créer un changement de palette sur tout l'écran, une Copperlist de MOVE suffit.

2. Pour créer un changement de palette sur une partie d'écran, votre Copperlist 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 Copperlist 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.


[Retour en haut] / [Retour aux articles]