Obligement - L'Amiga au maximum

Mardi 24 avril 2018 - 14:08  

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 in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


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 - Tube-Intro (déformation du logo, défilement de texte)
(Article écrit par Little Zeus et extrait d'Amiga News Tech - septembre 1989)


Nous nous retrouvons une fois de plus pour aborder, en cette fin d'été, la dernière partie de la seconde phase de l'unique et resplendissante Tube-Intro.

Regardez bien les pages qui suivent : nous publions ce mois-ci près de 250 lignes de programme (dont les commentaires sont assez explicites pour qu'il ne soit pas utile de revenir précisément sur chaque point de la routine), à la suite de quoi nous aurons simultanément à l'écran la déformation du logo et le défilement de texte. Il ne restera plus alors que la routine créant un défilement de plusieurs champs d'étoiles à vitesses différentes, routine pouvant être utilisée seule ou bien au sein de n'importe quelle démo de votre choix.

Résumé de l'épisode précédent

Je rappelle aux cancres qui dormaient au fond de la classe que nous avions commencé à expliquer le fonctionnement du défilement des caractères qui, je le rappelle également, se déplaçait de droite à gauche (c'est plus pratique pour lire le message...), pouvait monter et descendre (rebonds) et tourner sur lui-même soit vers le haut, soit vers le bas (effet de rouleau). Relisez bien l'article précédent afin d'aborder celui-ci dans les meilleures conditions.

Nous avions laissé en suspend la question de la "non-superposition" des deux playfields. Avant de savoir pourquoi le playfield avant est décalé de 16 pixels sur la droite, il faut comprendre qu'afin de donner l'impression d'avoir des caractères gravés sur un rouleau, nous avons créé un effet d'ondulation courbe vers la droite pour les caractères du playfield avant et vers la gauche pour les caractères du playfield arrière. Étant bien entendu que l'Amiga, malheureusement limité, ne peut subir un décalage de bitplane supérieur à 16 pixels et ce uniquement vers la droite, nous sommes confrontés à un problème, heureusement soluble, lorsque nous souhaitons créer un effet de courbe vers la gauche.

Nous allons donc user d'un subterfuge : en affichant le playfield avant décalé de 16 pixels sur la droite par rapport au playfield arrière, nous sommes en mesure, en décalant les bitplanes du playfield arrière vers la droite, de simuler un effet de courbe vers la gauche. Peut-être cela semble-t-il quelque peu illogique ou compliqué ? Reportez-vous donc aux figures ci-jointes pour mieux comprendre.

assembleur

Comment ça marche ?

Après la théorie, découvrons la pratique. En fait, vous l'avez peut-être deviné, nous allons utiliser - quoiqu'un peu modifié mais le principe est le même - le procédé qui nous permettait de déformer notre logo latéralement : nous changeons la valeur de décalage des bitplanes à chaque ligne (je ne réexplique pas, pour plus de précisions, reportez-vous à l'article correspondant). La différence est minime : alors que pour la déformation du logo, nous modifiions perpétuellement les décalages bitplane afin de créer un effet de "vagues", dans la routine de ce mois-ci, nous devons garder la forme courbée constante au cours du temps. De plus, lorsque le tube se déplace verticalement, nous devons changer l'emplacement de l'écran sur lequel créer le décalage. Nous recourons donc à une sous-routine intervenant directement dans la liste Copper et dont le rôle est de recalculer, à chaque décalage vertical du rebond, l'adresse de la première ligne sur laquelle nous devons décaler les bitplanes. Facile, non ? (NDLR : non !).

Les effets de couleurs sur le tube fonctionnent de manière analogue. Les couleurs sont utilisées pour renforcer l'effet de perspective du tube. De la même manière qu'il est obligatoire de repointer dans la liste Copper l'emplacement à partir duquel nous désirons l'effet de courbure, il est nécessaire d'en faire autant pour l'effet des couleurs.

L'obsédé textuel

Il ne reste plus maintenant qu'à afficher les caractères. Le texte du défilement est défini par le programmeur. La routine autorise même l'insertion de codes de contrôle, qui permettent d'influencer le déroulement, si j'ose dire, du défilement.

A propos, vous pouvez remarquer que nous utilisons un ScrollRaster en diagonale pour le playfield arrière, alors que nous en utilisons deux, un vertical suivi d'un horizontal, pour le playfield avant, ce qui apparemment est équivalent. Nous nous "encombrons" de deux ScrollRaster sur le playfield avant pour la simple et bonne raison que les caractères sont affichés sur ce dernier. Par conséquent, afin de ne pas voir apparaître des caractères déformés, nous les faisons défiler horizontalement vers la gauche jusqu'à ce qu'ils apparaissent sur l'écran visible (rappelez-vous que les caractères sont affichés en dehors de l'écran pour cause d'esthétique évidente). Ainsi, le caractère apparaît "normalement à l'écran" et peut ensuite, grâce au défilement vertical, partir diagonalement vers le haut. Si nous avions utilisé un seul ScrollRaster diagonal sur le playfield avant, les caractères auraient apparu déformé.

Une dernière petite précision : vous avez certainement remarqué que dans la routine publiée ce mois-ci, il est question "d'autorisation du défilement vertical de rotation du playfield arrière" (c'est fini, respirez). Ceci correspond à une des options du défilement, c'est-à-dire qu'il est possible d'arrêter uniquement le défilement vertical de rotation (alors que d'habitude, les deux défilements doivent être arrêtés en même temps).

La fonte du Savoyard

Il s'agit maintenant de permettre à l'ordinateur de trouver parmi toutes ses données graphiques, celles qui correspondent au caractère que nous souhaitons afficher dans le défilement. Pour cela, nous avons créé une liste comprenant les adresses de l'ensemble des caractères disponibles (la liste que vous trouvez dans ce programme fait figure d'exemple, libre à vous d'en créer une autre). Notez que cette liste doit absolument inscrire les caractères dans l'ordre dans lequel ils sont affichés dans l'image IFF. Plus concrètement, si dans la liste nous avons "ABC?." il faut nécessairement que l'image IFF contienne "A", "B", "C", "?" et "." à la suite.

Voyons maintenant comment procède la routine. Le programme a été conçu de telle manière qu'il y ait 8 caractères graphiques par ligne, soit 40 pixels de large par caractère. Nous devons donc repérer le caractère au sein de ces données graphiques ; pour savoir à quelle ligne il appartient, il suffit de diviser le numéro de sa position dans la liste par 8, le dividende correspondant alors au numéro de ligne et le reste à sa position sur cette ligne. Quant à l'affichage, rien de plus simple. Chaque caractère appartenant à deux bitplanes, nous copions les données IFF vers ces deux derniers.

Eh, toi, l'étoile...

Afin d'anticiper sur le prochain numéro nous allons dès maintenant étudier le principe des sprites. Effectivement, c'est grâce à eux qu'il nous sera possible d'avoir notre défilement céleste.

Le sprite est un élément graphique de 16 pixels de large sur une hauteur maximale égale à celle de l'écran. Il comporte normalement 3 couleurs. Lorsque nous sommes en mode dual playfield, comme c'est le cas dans la Tube-Intro, il est possible, au moyen de priorités, de les positionner par exemple en avant du playfield arrière et en arrière du playfield avant, ou encore en arrière des deux playfields... L'Amiga n'offre que 8 sprites, mais nous pouvons facilement en afficher bien plus. Une dernière chose avant d'entrer dans les détails : chacun des 8 sprites est autonome, c'est-à-dire que nous pouvons choisir une priorité indépendante. Cependant, à cause du matériel, deux sprites consécutifs possèdent les mêmes couleurs (ce qui, dans le cas d'un ciel étoilé, n'est pas trop gênant).

Le petit tableau ci-dessous illustre la façon dont sont colorés les sprites.

Sprites Données des sprites Couleur
0 et 1 00
01
10
11
transparent
couleur 17
couleur 18
couleur 19
2 et 3 00
01
10
11
transparent
couleur 21
couleur 22
couleur 23
4 et 5 00
01
10
11
transparent
couleur 25
couleur 26
couleur 27
6 et 7 00
01
10
11
transparent
couleur 29
couleur 30
couleur 31

Pour afficher les sprites à l'écran, il faut créer une liste pour chacun d'entre eux ; ensuite, c'est au moyen du DMA sprite que l'Amiga lira chaque SpriteList. Une liste simple se compose de la manière suivante : deux mots de contrôle, suivis de plusieurs mots de données, puis à nouveau deux mots de contrôle. Le premier ensemble de mots de contrôle spécifie les coordonnées de départ et de fin du sprite, les mots de données contiennent sa définition graphique par bitplane pour chacune de ses lignes, et enfin le second ensemble de mots de contrôle caractérise la fin de la liste. Pour récapituler tout ça plus clairement, voici le schéma d'une SpriteList simple :

Début liste :
      dc.w hstart-vstart,vstop dc.w données 1 de la ligne 1, données 2 de la ligne 1
      dc.w données 1 de la ligne 2, données 2 de la ligne 2
      ...
      dc.w données 1 de la ligne n, données 2 de la ligne n
      dc.w 0,0

Il est possible de créer en tout 8 SpriteLists. Cependant, afficher 8 sprites à l'écran peut paraître quelque peu restreint. En fait, à chaque liste nous pouvons faire correspondre un très grand nombre de sprites différents, c'est d'ailleurs par ce procédé-là que dans le numéro prochain nous représenterons une bonne centaine d'étoiles. Ainsi, plus généralement, une SpriteList apparaît sur ce modèle :

Début liste :
      dc.w hstart1-vstart1,vstop1 ; Premier sprite
      dc.w données 1 de la ligne 1, données 2 de la ligne 1
      ...
      dc.w hstart2-vstart2,vstop2 ; Deuxième sprite
      dc.w données 1 de la ligne 1, données 2 de la ligne 1
      ...
      dc.w hstartn-vstartn,vstopn ; nième sprite
      dc.w données 1 de la ligne 1, données 2 de la ligne 1
      ...
      dc.w 0,0 ; Fin de liste

Nous avons annoncé à l'Amiga les formes et emplacements de nos sprites, cependant, celui-ci ne "sait" pas spontanément quelle partie de la mémoire constitue une SpriteList. Effectivement, nous sommes dans l'obligation d'initialiser les sprites. Pour ce faire, nous avons à notre disposition 8 registres de 32 bits débutant en$120. Nous "pokons" respectivement dans leurs contenus les adresses de base des 8 SpriteLists. Remarquez que les initialisations de ces registres doivent figurer dans la liste Copper pour la simple et bonne raison qu'ils sont utilisés par le matériel en tant que pointeur sur la donnée du sprite en cours de lecture. Ainsi, à chaque ligne de raster affichée, l'adresse contenue dans ces registres est incrémentée d'un mut. Conclusion, il faut la réinitialiser à chaque interruption Vertical Blank, tâche dont le Copper s'acquitte très bien.

Enfin, les 8 canaux de sprites doivent être initialisés à l'aide d'un MOVE.W + $8220,$DFF096.

A suivre...

Nous achèverons de parler des sprites dans le prochain numéro, et comme d'habitude, je me lève et je te bouscule, comme d'habitude, tu ne te réveilles pas, comme d'habitude... Pardon : comme d'habitude, disais-je, nous illustrerons tout ceci par un programme d'animation d'étoiles qui, selon vous souhaits, pourra s'inscrire dans la Tube-Intro ou pourra être utilisé indépendamment.

assembleur
assembleur
assembleur
assembleur
assembleur
assembleur
assembleur
assembleur


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