Obligement - L'Amiga au maximum

Dimanche 21 juillet 2019 - 19:30  

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 : AMOS - Banques de sprites et d'icônes
(Article écrit par François Lionet et extrait d'Amiga News Tech - mai 1991)


Nous allons maintenant commencer à décrire le format des banques de mémoire AMOS : en premier lieu, les banques de sprites et d'icônes, dans la mémoire et sous la forme de fichier.

La banque de sprites, qui porte le numéro 1 contient dans une même zone de mémoire les définitions des sprites et des BOB. Dans ce qui va suivre, je parlerais donc indifféremment de sprites et de BOB, ce qui me simplifiera d'autant la vie. a structure de la banque en mémoire est un peu particulière : elle n'est pas en un seul bloc, mais plutôt répartie dans tous les espaces libres disponibles.

La fonction "=Start(1)" ramène l'adresse de l'en-tête de la banque de sprites. Celui-ci contient les pointeurs sur les dessins proprement dits, ainsi que la palette de la banque.

Voici la structure de la banque sous la forme d'un listing assembleur :

AMOS
  • (1) L'adresse du dessin peut être nulle. Dans ce cas, il n'y a évidemment pas d'adresse de masque. Une adresse nulle est obtenue avec l'instruction "DELETE SPRITE", en éliminant un sprite au beau milieu de la banque.
  • (2) L'adresse du masque peut prendre valeurs différentes :
    • 0 : il faut fabriquer un masque. Le masque sera calculé lors du premier affichage du BOB.
    • -1 : l'instruction "NO MASK" a été appliquée à ce BOB.
    • >0 : pointeur sur le masque.
Chaque BOB ou sprite est un petit morceau d'écran, contenant les données du dessin, plan par plan (les anglais appellent ça les "bitplanes"). Les plans mémoire se suivent, dans l'ordre croissant.

AMOS

Les Flags_Retournements sont produits à partir de la version 1.21 d'AMOS. Le bit 15 correspond à un retournement en X, le bit 14, à un retournement en Y. Le point chaud en X n'est calculé que sur 14 bits signés.

Le masque, lorsqu'il est défini, contient un seul plan mémoire. Les bits du masque à 0 sont transparents (on voit le décor "au travers"), les bits à 1 sont opaques (on voit le sprite).

AMOS

Calculer son propre masque

Connaissant la structure de la banque de sprites, il est tout à fait possible de calculer soi-même le masque d'un BOB, et d'obtenir ainsi des effets très intéressants. AMOS calcule le masque en effectuant un "ou logique" entre tous les plans mémoire de l'image. Le masque obtenu rend la couleur 0 transparente. On peut, connaissant la structure de la banque, calculer différemment le masque, et rendre d'autres couleurs transparentes.

Encore plus intéressant, l'instruction "SETBOB" permet de choisir la relation logique entre DECOR, IMAGE et MASQUE lors de l'affichage d'un BOB. En passant de longues heures à choisir les couleurs et les paramètres de calcul (MINTERMS pour les initiés), on peut arriver à des effets époustouflants... Bon, ce sera pour une prochaine fois, je suis déjà en retard pour l'article que vous lisez et j'ai un compilateur à terminer !

Le programme assembleur qui suit est une petite routine (262 octets à peine) faisant le calcul d'un masque complexe. Elle est conçue pour être chargée dans une banque mémoire, et constitue un bon exemple d'appel de routine en banque. Pour l'utiliser, assemblez le programme, sauvez le code produit sous le nom de "Masque" et tapez, en mode direct dans AMOS :

PLOAD "Masque",15

La routine se trouve maintenant dans la banque numéro 15. Elle sera sauvée avec votre programme AMOS, il n'est plus besoin de la recharger.

NB : une routine chargée ainsi doit être totalement relogeable et ne comporter qu'un seul hunk. Vous devez donc faire du code relatif-PC. Une démonstration AMOS de cette routine suit le programme langage machine. Elle propose une procédure :

MASQUE[numéro,M1,M2]

Sachant que :
  • "numéro" est le numéro du sprite dans la banque.
  • "M1" et "M2" sont les parties haute et basse (respectivement) des couleurs transparentes. La couleur correspondante à chaque bit mis à 1 sera transparente.
Exemples :
  • M1=0 et M2=16 : la couleur 4 est transparente.
  • M1=$00000001 et M2=$80000000 : les couleurs 31 et 32 sont transparentes.
Rien ne vous empêche d'utiliser les informations des AMT précédents pour fabriquer une nouvelle extension à l'AMOS, et rajouter de nouvelles instructions...

NB : la détection de collision utilise le masque du BOB pour déterminer les croisements entre BOB. Elle n'est valide qu'avec le masque par défaut, et pas avec ceux produits par cette routine.

NB : le masque n'a évidemment aucun effet sur l'affichage des sprites.

La banque d'icônes

Le format d'une banque d'icônes (banque numéro 2) en mémoire est exactement le même que celui d'une banque de sprite, la seule différence tenant dans l'en-tête, qui est :

AMOS

Vous pouvez donc appliquer le calcul des masques aux icônes !

Format d'une banque sur disquette

Voici le format du fichier obtenu par la sauvegarde d'une banque de sprites (SAVE "Banque.Abk",1) :

AMOS
AMOS

AMOS ne sauve donc pas les masques, pour gagner en rapidité. Un sprite vide est marque par "dc.w 0,0,0,0,0", et pas de plan d'image. Les sprites sont toujours retournés dans leur direction "originale" avant d'être sauvés. Les drapeaux du point chaud en X sont donc toujours égaux à zéro (pour rester compatible avec les premières versions d'AMOS). Une banque d'icône ne diffère que par son code de reconnaissance, qui est ici :

dc.b "AmIc"

Voili voilà pour ce mois ! La prochaine fois, quelque chose de beaucoup plus compliqué : la banque de musique. Nous verrons comment mettre plusieurs musiques dans la même banque.

Listing 1

AMOS
AMOS

Listing 2

AMOS


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