Obligement - L'Amiga au maximum

Vendredi 06 juin 2025 - 13:02  

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 - Le remplissage de surfaces par le Blitter
(Article écrit par Frédéric Mazué et extrait d'Amiga News Tech - juin 1990)


Aujourd'hui, nous nous intéressons au remplissage de surfaces par le Blitter. Pas de difficultés particulières, c'est même très simple pour une fois.

Petit préliminaire

Avant de rentrer dans le vif du sujet, il est peut-être nécessaire de rappeler le détail des bits du registre BLTCON1 pour ceux qui auraient manqué les épisodes précédents.

BLTCON1, décalage $42, registre 16 bits

Bit numéro Nom Fonction
15 BSH3 Expliqué dans cet article
14 BSH2 Expliqué dans cet article
13 BSH2 Expliqué dans cet article
12 BSH1 Expliqué dans cet article
11-5 --- Ces sept bits ne sont pas utilisés
4 EFE Exclusive Fill Enable
3 IFE Inclusive Fill Enable
2 FCI Fill Carry In
1 DESC Mode décrémentation (descending)
0 LINE Mode tracé de ligne

Le vif du sujet

Nous avons vu précédemment que le Blitter travaille avec des fenêtres "rectangulaires". Sachant cela, il sera possible de remplir n'importe quelle surface, à condition que celle-ci soit inscrite dans la fenêtre qui sera définie dans le registre BLTSIZE.

Comment le Blitter procède-t-il pour remplir une surface ? Comme d'habitude, il travaille ligne par ligne, mais cette fois il commencera par la ligne la plus en bas de la fenêtre et traitera cette ligne de droite à gauche, et ainsi de suite jusqu'à la ligne la plus haute.

Du point de vue de la programmation, cela signifie que, dans ce cas, le Blitter travaille par décrémentation d'adresses. Cela implique que pour un remplissage de surface, il est obligatoire d'activer le bit DESC. De même, les registres BLTxPTH devront pointer sur les derniers mots des zones source et cible.

Voyons maintenant comment le Blitter rempli une ligne. Hypothèse de départ, le bit FCI n'est pas mis. Soit l'exemple de ligne à remplir :

.....1.....1.....1........

Un point correspond à un point écran éteint et un 1 correspond à un point écran allumé et ceci dans une fenêtre de deux mots de large.

Le Blitter examine le point le plus à droite : ce point est éteint, le Blitter passe au point immédiatement à gauche qui lui aussi est éteint et ainsi de suite jusqu'à ce qu'il rencontre le premier point allumé. A ce moment, le Blitter inverse le bit FCI. Dans ce cas précis le Blitter met donc le bit FCI à 1. Le Blitter continue son examen sur la gauche et, à ce moment, de deux choses l'une :
  • Le point examiné est éteint : dans ce cas le Blitter écrit le bit FCI à l'emplacement correspondant au point. Le point s'allume.
  • Le point examiné est allumé : dans ce cas, comme précédemment, le Blitter inverse le bit FCI, puis continue son examen à gauche.
Après travail du Blitter, la ligne de l'exemple devient donc :

.....1111111.....1111111........

Maintenant que vous avez tout compris, il est possible de résumer très simplement : le Blitter examine chaque point de droite à gauche. Chaque point éteint est "rempli" par le bit FCI. A chaque point allumé rencontré le bit FCI est inversé.

L'hypothèse de départ était FCI = 0. Mais il est parfaitement possible d'initialiser ce bit à 1 dès le départ. Observons ce qu'il se passe à partir du même exemple : le premier point est éteint, donc le Blitter y place le bit FCI. Celui-ci étant initialisé à 1, le point s'allume, et ainsi de suite jusqu'à ce que le Blitter rencontre un point allumé. A ce moment le bit FCI sera inversé (et donc dans ce cas annulé) et ainsi de suite. Le résultat sera donc :

111111.....111111..... 111111111

Autrement dit, nous avons colorié l'image en "négatif".

Attention au piège !

Tout ceci c'est bien joli, mais il y a quand même un traquenard. Pour que tout se passe bien, il faut que chaque ligne de l'image à colorier contienne un nombre pair de points allumés. Sinon "........11.....", par exemple, ne sera pas rempli comme ceci : "........11111111" mais comme cela : "1111111111111111". En clair (si j'ose dire) cela s'appelle une grosse tache !

Nous en avons presque fini. Il nous reste à savoir qu'il existe en fait deux modes de remplissage.
  • Le mode IFE, ce qui signifie Inclusive Fill Enable ou mode de remplissage inclusif. Ce mode vous le connaissez déjà car les exemples précédents sous-entendaient qu'il était utilisé. Vous savez tout, n'en parlons plus.
  • Le mode EFE, ce qui signifie Exclusive Fill Enable ou mode de remplissage exclusif. Que se passe-t-il avec ce mode ? Très simple : nous avons vu que lorsque le Blitter rencontre un point allumé, il inverse le bit FCI. Si cette inversion met le bit à 1, rien ne change. Par contre, si l'inversion met le bit à 0, alors le point responsable de l'inversion sera éteint. Pour être plus clair, le premier exemple sera rempli en mode EFE comme suit : ......111111......111111........ soit deux points de moins qu'en mode IFE.
Et maintenant le programme

Remarquez qu'au label "data" les données de notre image (Cf. articles précédents) ont été modifiées. Presque tous les bits sont nuls et il ne subsiste plus qu'un "squelette" qui sera notre motif à remplir. Comme d'habitude, le programme ouvre les bibliothèques nécessaires puis un écran Intuition à un plan de bits.

Premièrement, le programme copie on ne peut plus simplement le squelette dans le plan de bits de l'écran puis il en effectue le remplissage.

Deuxièmement, on ruse : le squelette est installé en mode décrémentation et en même temps on active un mode de remplissage dans BLTCON1 (dans ce cas le mode IFE). Oh miracle, notre motif est rempli en même temps qu'il est installé et le Blitter a travaillé aussi vite que pour une copie de données simple. Décidément ce Blitter est génial !

Troisièmement, on reprend la ruse du deuxièmement mais avec le mode EFE et on constate comme prévu que le Blitter a supprimé une colonne de points à gauche du motif et une colonne de points à droite dans le trou du motif.

Quatrièmement, toujours avec ruse, en mode IFE, mais au départ le bit FCI est initialisé à 1 : on a un remplissage en négatif.

Enfin, après un clic de la souris, le programme ferme écran et bibliothèques et rend la main.

Tout est dit à propos des remplissages de surfaces et je vous donne rendez-vous le mois prochain pour un gros morceau, le tracé de droites.

Remplissage de surface avec le Blitter

assembleur

Mise en place du "squelette"

assembleur
assembleur

Remplissage du "squelette"

assembleur

Mise en place du "squelette" et remplissage en même temps

assembleur

Mise en place en remplissage exclusif

assembleur
assembleur

Mise en place et remplissage en "négatif"

assembleur
assembleur


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