Obligement - L'Amiga au maximum

Vendredi 29 mars 2024 - 02:15  

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 - copier un BOB avec le Blitter
(Article écrit par Roméo Rapido et extrait d'Amiga News - décembre 1990)


Aujourd'hui au menu : Blit de BOB. Nous allons donc décortiquer l'ensemble des opérations à effectuer sur les registres de Blitter pour lui faire exécuter cette basse besogne. Enfin bon, quand c'est bien cuit et que la sauce est réussie, on regrette rarement le temps passé. A table.

BOB et Blitter

Le but du jeu est de "blitter" un BOB dans une image. Il ne s'agit pas ici d'un bête transfert de zone rectangulaire puisque l'objet à transférer peut avoir n'importe quelle forme. Notez que, vu la complexité du Blitter, ce n'est certainement pas la seule solution pour arriver au même résultat : avec trois sources combinées par des équations booléennes, il y a pas mal de possibilités. Je m'efforce simplement de vous aider à comprendre les mécanismes mis en jeu dans notre cher Blitter. Voyons de plus près comment procéder.

Pour obtenir le résultat escompté, nous avons besoin des trois sources A, B et C, et d'une cible D. La source A sera le masque du BOB, la B le BOB lui-même et la C l'image dans laquelle nous voulons transférer ce dernier. Bien sûr, la cible D sera aussi l'image dans laquelle nous voulons transférer notre pseudo-lutin (sprite).

Je rappelle brièvement que le masque est en fait un plan de bits ou la silhouette du BOB est définie par des "1". On peut l'obtenir simplement en faisant un "ou" logique sur les différents plans de l'objet et en sauvant le résultat dans un seul plan. Comme il s'agit d'une opération logique, le Blitter répond présent lorsque nous demandons des volontaires pour exécuter cette mission. Nous verrons à la fin de l'article comment procéder, mais revenons à nos moutons, le transfert du BOB.

Nous désirons donc mettre un pixel (un "1") dans le plan cible lorsque, à la même position, il y a :
  • Un pixel dans l'image et que ce pixel est situé à l'extérieur du masque.
  • Un pixel dans le BOB et que ce pixel est situé à l'intérieur du masque.
Dans tous les autres cas, il faut mettre un D.

Ceci se traduit facilement dans l'algèbre de Boole par l'équation suivante :

D = (A et B) ou (a et C) soit D = AB + aC

Une fois développé, nous obtenons :

D = ABC + ABc + aBC + abC

Cette équation correspond en fait aux bits 1, 3, 6 et 7 du registre BLTCON0 et par conséquent à la valeur $CA pour l'octet de poids faible (celui de droite).

Les quatre bits de poids faible de l'octet supérieur (bit 8 à 11) doivent être forcés à 1 puisque les trois sources et la destination sont utilisées.

Les quatre bits de poids fort (bit 12 à 15) de BLTCON0 correspondent au décalage (valeur de 0 à 15) que l'on doit effectuer sur la source A (masque). En fait, ce décalage de la source A correspond au reste de la division par 16 de la position à laquelle on désire afficher le BOB dans l'image. Ce reste est différent de 0 lorsque l'on désire transférer une image à une position non multiple de 16 (pas alignée sur un octet pair).

Pour obtenir la valeur du décalage, il suffit de masquer la valeur de la position "X" à laquelle doit être effectué le transfert avec $000F puisque 16 est un multiple de 2 (2 puissance 4), puis il ne reste plus qu'à décaler le tout de 12 bits vers la gauche, ou, plus rusé, décaler de 4 bits vers la droite avec un ROR qui a la propriété de faire réentrer les bits sortis à droite par le bit 15.

Cette valeur doit également être stockée dans BLTCON1 pour indiquer la valeur de décalage à utiliser pour la source B.

Il ne reste plus qu'à faire un "ou" avec $0FCA pour obtenir la valeur du registre BLTCON0.

Les quatre registres modulo BLTAMOD, BLTBMOD, BLTCMOD et BLTDMOD doivent recevoir les valeurs correspondants aux différents plans de bits.

Le registre BLTAFWM doit être initialisé avec $FFFF0. Pour le registre BLTALWM, la valeur doit être la même que celle du décalage de la source A en entrée, soit le contenu de d0 juste avant le chargement de BLTCON1.

Les quatre registres pointeurs de plans BLTAPTH, BLTBPTH, BLTCPTH et BLTDPTH doivent, bien sûr, être initialisés avec l'adresse du début des plans correspondants.

Il ne reste plus qu'à charger BLTSIZE pour lancer le Blitter.

En résumé :

Assembleur

Il faudra bien sûr boucler pour transférer tous les plans du BOB un par un.

Le masque

Voyons maintenant la création du masque.

L'opération nécessite deux sources A et B et bien sûr une cible D. Il faut mettre un "1" dans D lorsqu'il y a un "1" dans A ou un "1" dans B.

Si A est toujours le masque et B la source, ceci se traduit par : D = A + B, soit D = (ABC + ABc + AbC + Abc) + (ABC + ABc + aBC + aBc).

En simplifiant, nous obtenons : D = ABC + ABc + AbC + Abc + aBC + aBc.

Il convient donc de "setter" les bits 2, 3, 4, 5, 6 et 7 de BLTCON0. Comme il faut aussi valider les sources A et B ainsi que la cible D, la valeur à mettre dans ce registre est $0DFC (pas de décalages puisque source et destination ont la même taille).


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