Obligement - L'Amiga au maximum

Mercredi 19 décembre 2018 - 17:18  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · 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 en d'autres langues


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Logiciels
 · Jeux
 · Scène démo
 · Divers


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


Contact

David Brunet

Courriel

 


Programmation : Assembleur - SinusScroll géré par le Blitter (2e partie)
(Article écrit par Little Zeus et extrait d'Amiga News Tech - mars 1990)


Réponse au Lazy Coder

Effectivement, l'antivirus que nous avons publié le mois dernier n'efface qu'une minorité de virus. Néanmoins, il semble que Lazy Coder fait preuve d'amnésie, il n'a pas réellement compris le dessein de la rubrique. L'antivirus ici proposé n'avait aucune prétention, il servait foncièrement à illustrer des bribes du fonctionnement du matériel par un programme qui, d'une manière annexe, pouvait se révéler d'une quelconque utilité. Cependant, il n'est pas faux que d'un point de vue purement technique et utilitaire, il ne soit pas exceptionnel. C'est pour cette raison, que nous avons décidé d'écourter l'explication du SinusScroll qui, lui aussi, est d'un fonctionnement assez simple et dont le seul rôle est de permettre une plus grande compréhension du Blitter. Ainsi, nous pourrons attaquer le mois prochain un défilement en parallaxe sensationnel qui sera un peu difficile de compréhension.

Fonctionnement de la routine

Le principe est simple. Elle joue sur trois playfields :
  • Dans un premier playfield se font uniquement des défilements dont les caractères sont "normaux". En d'autres termes, ce défilement représente ce qui va être prochainement affiché à l'écran, à l'exception près qu'il n'y a pas la déformation.
  • Les deux autres playfields ont tous les deux le même rôle : ils servent à afficher le défilement à l'écran.
Pourquoi deux playfields vous demandez-vous peut-être ? Simplement parce que notre chère machine n'étant pas assez rapide, nous sommes contraints d'afficher la position actuelle du défilement sur un playfield et de calculer sa position suivante sur un autre playfield. Ainsi, la routine est une succession d'affichage de l'un et de l'autre playfield. Effectivement, si nous n'avions utilisé qu'un seul et unique playfield, à chaque nouvelle position du défilement, nous aurions eu à l'écran l'affichage progressif des lettres, ce qui n'aurait certainement pas été très beau.

L'utilisation des trois playfields

Précisons tout d'abord que nous travaillons en basse résolution, c'est-à-dire avec 320 pixels de large. Les deux playfields d'affichage présentent cette dernière spécificité alors que le playfield dans lequel s'inscrivent les caractères normaux en contient 336. Effectivement, le playfield contenant les caractères normaux (playfield origine 1) est recopié en totalité modulo les modifications créant la forme sinusoïdal. Ainsi, un modulo lui est nécessaire afin de ne pas avoir des caractères qui apparaissent par blocs de 16 pixels.

Soyons plus explicite : chaque nouveau caractère est affiché dans la partie du modulo du playfield originel à chaque fois que le caractère précédent a subi un défilement de 16 pixels. Ainsi, au 9e défilement (les défilements se font par deux pixels) les deux premières colonnes du caractère suivant apparaissent à l'écran. De cette manière, en spécifiant au Blitter de recopier uniquement le playfield originel sans le modulo, nous aurons à l'écran le début du caractère suivant. Par contre, si nous n'avions pas utilisé de modulo dans le playfield originel, nous aurions été contraints d'afficher chaque caractère entier sur le playfield originel, ce qui aurait entraîner l'apparition par "bloc" des caractères à l'écran.

Les modulos utilisés par le Blitter

Malgré le grand nombre d'errata sortis à la photo-composition dans le numéro précédent, l'erratum de ce numéro devrait vous permettre la compréhension des registres-Blitter. Ainsi, nous ne reviendrons pas sur l'explication des registres dans lesquels s'inscrivent les modulos des zones A, B, C, D. Notons simplement que lors de la copie playfield originel-écran, le modulo de la source est de 40 octets et celui de la cible de 38 octets.

L'explication est aisée : si on désire copier deux octets d'un écran de 42 octets, d'où un modulo de 42-2=40 octets ; de même, 40-2=38 octets.

Les masques sont de retour

Souvenez-vous, c'était un peu avant hier, nous apprenions que le Blitter n'était pas si puissant que ça car il obligeait une copie minimum d'un mot. Néanmoins, lorsque nous procédons à la copie du playfield originel sur l'écran, afin d'obtenir la déformation, les caractères doivent être copiés par paires de colonnes. Mais comment, puisque le Blitter doit copier un minimum d'un caractère entier à chaque fois ? Eh bien c'est là qu'interviennent les masques. Ainsi que vous pourrez le constater dans le listing, nous avons créé une table de masques en fonction de la partie de caractères à copier.

Le Blitter copie uniquement des rectangles !

Blitter, comme son nom "Block Image Transferrer" l'indique, copie uniquement des rectangles images. Ainsi, si le fond d'écran d'affichage est violet et si vous désirez copier vos caractères dans celui-ci, vous obtenez bel et bien ces derniers mais néanmoins inscrits dans un rectangle noir, ce qui n'est pas forcément très joli. Par conséquent, pour éviter ce problème, il faut absolument procéder à une opération logique restituant la couleur de fond autour des caractères.

Les caractères

Le programme dans sa version originale demande une police de caractères de 16 pixels de largeur, inscrite dans une image IFF de 640 pixels de large décompactée et non tronquée. Cette image IFF doit être chargée en CHAR.

Comme vous avez pu le constater, nous avons été concis par la routine n'était pas spécialement compliquée. Je tiens à rappeler à une quelconque personne du malheureux avis complètement inepte du pauvre Lazy Coder, que cette routine n'a aucune prétention technique, elle ne présente qu'un intérêt explicatif. Sur ce, je vous quitte et vous donne rendez-vous dans le prochain numéro avec la routine Parallax qui, elle, relève d'intéressants procédés techniques.

Note : attention, les parenthèses dans le listing suivant ont été remplacés par des crochets. C'est une erreur et il faut bel et bien mettre des parenthèses.

assembleur
assembleur
assembleur
assembleur


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