Obligement - L'Amiga au maximum

Vendredi 29 mars 2024 - 09:47  

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 - 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 motifs 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 plan de bits.
  • 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 plan de bits, 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 plan de bits, il est donc nécessaire d'utiliser un masque qui contient le "contour" de la surface à remplir comme source et le plan de bits 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 plan de bits. 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 plans de bits, mais rassurez-vous, Agnus à plus d'un tour dans son sac et dès le mois prochain vous saurez tout sur la copie de plans de bits.


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