Obligement - L'Amiga au maximum

Lundi 29 mai 2017 - 15:20  

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 - tracé de droite et remplissage avec le Blitter
(Article écrit par Roméo Rapido et extrait d'Amiga News - novembre 1990)


Dans notre série "Comprendre le Blitter", aujourd'hui, nous aborderons le tracé de droites avec une pointe de remplissages. Nous allons heurter à grande vitesse les horribles octants. Conservez votre siège en position haute. En cas de dépressurisation de la cabine, des vieux numéros de Picsou Magazine tomberont automatiquement à votre portée. Ne vous énervez pas, restez courtois, attention à la fermeture automatique des portières. Je n'aurais qu'une parole : Goldorak go !

Le mode "Line" est activé en positionnant le bit 0 de BLTCON1. Dans ce mode, le Blitter peut tracer des droites de 1024 points de long avec différents patterns et différents modes, dont le mode 1 point par ligne utilisé pour construire les masques de remplissage.

Une droite peut être assimilée à un vecteur, elle a donc une origine que nous nommerons "x1, y1" et une direction, déterminée par son dernier point de "x2, y2". La première chose à faire est de déterminer dans quel secteur se situe le vecteur, dans un disque qui comprend huit secteurs (voir figure suivante), cela permet de profiter des symétries entre x, -x et y, -y.

Assembleur

A chacun de ces octants est associé une valeur binaire codée bien sur sûr trois bits. Mais comme cela aurait été trop facile, cette valeur que l'on doit stocker dans BLTCON1 n'a rien à voir avec le numéro du secteur, en fait voici la table de correspondance octant-code :

Assembleur

En fait, on peut calculer le numéro de l'octant de la manière suivante :
  • Si dy = y2 - y1 <0 (bit 2 = 1 et dy = -dy) sinon bit 2 = 0.
  • Si dx = x2 - x1 <0 (bit 1 = 1 et dx = -dx) sinon bit 1 = 0.
  • Si dy - dx <0 (bit 0 = 1 et ech(dx, dy)) sinon bit 0 = 0.
La combinaison de ces trois bits donne le numéro de l'octant et il ne reste plus qu'à aller chercher la valeur correspondante dans la table de correspondance. Dans notre exemple précédent, ceci est fait par l'instruction roxl #1,d5 qui fait rentrer le bit X du CCR dans le registre D5 après avoir effectué un décalage de 1 bit vers la gauche. Or, justement, le bit X est positionné par les instructions sub et exg comme il convient d'où l'écriture astucieuse de cette phase. Nous avons donc maintenant le numéro et la valeur de l'octant et les valeurs de dx et dy. Vous avez noté au passage qu'il faut prendre la valeur absolue des deltas pour la suite des calculs et que si dy > dx il est nécessaire d'échanger ces deux valeurs, dx devient donc le grand delta et dy le petit delta.

Maintenant que vous avez compris l'essentiel, voici l'algorithme complet de préparation des registres Blitter pour le tracé de droites. Pour une droite allant du point (x1, y1) au point (x2, y2) :
  • dx = abs(x2 - x1).
  • dy = abs(y2 - y1).
  • Si (dx < dy ) ech(dx, dy).
En même temps que les opérations précédentes, déduire le numéro de l'octant et sa valeur associée.

Assembleur
Assembleur

Si vous avez été attentifs aux explications précédentes, vous aurez remarqué que le bit 1 de BLTCON1 permet de sélectionner le mode 1 point par ligne. Inutile de préciser que pour tracer des droites en temps normal, ce bit doit être à 0. En fait, le mode 1 point par ligne est très utile pour faire des remplissages de surfaces avec le Blitter. L'algorithme de remplissage câblé dans Agnus procède de la façon suivante :

Tout d'abord, il faut signaler que en mode remplissage, le Blitter travaille à l'envers. Au lieu de passer au mot suivant par incrémentation d'adresse (adr = adr + 2 (on travaille sur des mots de 16 bits donc 2 octets)), il travaille à reculons en passant à l'adresse précédente (adr = adr - 2).
  • 1. départ du dernier mot en bas à gauche du bitplane.
  • 2. scrutage de la ligne :
    "si je trouve un point, je remplie jusqu'au prochain point"
    "si je ne trouve pas le deuxième point je vais jusqu'au bord"
  • 3. si je ne suis pas rendu au premier mot du bitplane, passer à la ligne précédente et aller en 2.
De cet algorithme simplifié, il faut retenir deux choses :
  • Pour un remplissage simple, il ne doit y avoir que deux points par lignes qui délimitent le contour à remplir.
  • Pour des remplissages complexes, il doit toujours y avoir un nombre pair de points ou sinon il risque d'y avoir des bavures depuis la forme à remplir jusqu'au bord gauche l'écran.
Pour faire un remplissage d'une surface dans un bitplane, il est donc nécessaire d'utiliser un masque qui contient le "contour" de la surface à remplir comme source et le bitplane ou doit être effectué le remplissage comme cible. Dans le cas où la cible est composée de plusieurs plans, il vaut mieux effectuer le remplissage directement dans le masque puis recopier ce masque dans les différents plans du bitplane. A noter que suivant la couleur désirée, il peut être nécessaire de "mettre" (set) ou de "nettoyer" (clear) les bits correspondants à la zone à remplir dans les différents bitplanes, mais rassurez-vous, Agnus à plus d'un tour dans son sac et dès le mois prochain vous saurez tout sur la copie de bitplanes.


[Retour en haut] / [Retour aux articles] [Article précédent] / [Article suivant]