Obligement - L'Amiga au maximum

Jeudi 05 juin 2025 - 15:33  

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 - 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 champs de jeu ("playfields") :
  • Dans un premier champ de jeu 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 champs de jeu ont tous les deux le même rôle : ils servent à afficher le défilement à l'écran.
Pourquoi deux champs de jeu 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 champ de jeu et de calculer sa position suivante sur un autre champ de jeu. Ainsi, la routine est une succession d'affichage de l'un et de l'autre champ de jeu. Effectivement, si nous n'avions utilisé qu'un seul et unique champ de jeu, à 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 champs de jeu

Précisons tout d'abord que nous travaillons en basse résolution, c'est-à-dire avec 320 pixels de large. Les deux champs de jeu d'affichage présentent cette dernière spécificité alors que le champ de jeu dans lequel s'inscrivent les caractères normaux en contient 336. Effectivement, le champ de jeu contenant les caractères normaux (champ de jeu 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 champ de jeu 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 champ de jeu 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 champ de jeu originel, nous aurions été contraints d'afficher chaque caractère entier sur le champ de jeu 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 champ de jeu 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 champ de jeu 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]