APPLICATIONSCREATION GRAPHIQUE ★ CHERRY-PAINT (CPC REVUE N°5 -> 9) ★

CHERRY PAINT (CPC Revue n°5)CHERRY PAINT (CPC Revue n°6)CHERRY PAINT (CPC Revue n°7)CHERRY PAINT (CPC Revue n°8)CHERRY PAINT (CPC Revue n°9)
Dans ce second article consacré à Cherry-Paint, nous allons voir comment animer des icônes sur l'écran de l'AMSTRAD, sans qu'il n'y ait aucun clignotement, mais tout d'abord, il va falloir créer ces icônes...

Pour animer une forme sur l'écran, il y a plusieurs possibilités : la première solution consiste à redéfinir des caractères et à les afficher à l'endroit désiré à l'aide d'un langage tel que Basic ou Pascal. Vous avez certainement déjà expérimenté cette méthode... et constaté que c'était épouvantablement lent et saccadé ! La deuxième solution consiste à écrire les routines d'animation en assembleur : là, pas de problèmes, ça va vite. Pour les routines en assembleur, il y a de nouveau deux possibilités pour dessiner une forme : la première de ces solutions, aui est aussi la plus commune, est de faire un OU exclusif (XOR) entre le fond et la forme à animer. Pour effacer cette forme, il suffira de faire un deuxième masquage en XOR, donc pour déplacer la forme, il suffit de deux masquages ; le premier masquage en XOR à l'endroit de départ pour effacer la forme, le deuxième masquage en XOR à l'endroit d'arrivée pour réafficher cette forme. Cette méthode est très rapide mais n'est pas très belle : tant que la forme se déplace sur un fond uni, tout va bien, mais dès qu'elle passe sur un objet, on ne voit plus rien (c'est le même effet, lorsque dans Sorcery, le sorcier passe sur une porte, ou dans Jane sur Apple). Dans l'autre solution, il faut d'abord sauvegarder le fond à l'endroit où on va placer la forme, dans un bufffer, puis on pourra masquer le fond en OR avec la forme : on obtient alors une forme noire qui se superpose à l'image.

Pour déplacer la forme, il faudra donc d'abord recharger l'ancien fond ; pour cette solution, on aura donc trois opérations au lieu de deux, mais c'est beaucoup plus joli I Pour le programme Cherry-Paint, cette deuxième solution n'est pas tout à fait satisfaisante non plus. Premièrement, toutes les icônes devraient être noires, deuxièmement, si une icône se déplaçait sur un fond noir, on ne pourrait plus la voir !

Pour pallier à ces inconvénients, il faut faire un masquage AND pour forcer une zone à zéro avant de faire le masquage OR.

On s'arrangera pour que le masque AND soit légèrement plus grand que le masque OR : de cette manière, on crée un liseret blanc autour des icônes. En définitive, pour déplacer une forme, il faudra donc effectuer quatre opérations :

  1. charger l'ancien fond pour effacer la forme,
  2. sauver le fond de l'endroit où se trouvera la forme,
  3. masquer AND,
  4. masquer OR.

Si on utilise ce procédé tel quel, l'animation des icônes ne sera pas de bonne qualité. Comme on effectue les quatre opérations précédentes à n'importe quel moment, on risque fort bien d'effacer la forme juste avant qu'elle ne s'affiche sur le moniteur ; on aura, par conséquent, un clignotement incessant I Pour éliminer un clignotement, il faut afficher la forme pendant que le spot vidéo remonte de la dernière ligne d'une trame vidéo à la première ligne de la trame suivante, car pendant ce temps, le spot est éteint. Pour effectuer cette synchronisation, il y a de nouveau deux solutions :

  • on peut utiliser la routine système en #BD19. Cette routine attend le signal de fin de trame émis par le processeur vidéo. Le défaut de cette méthode est que, lorsqu'on attend la fin de trame, on ne fait rien d'autre, donc on perd une grande partie du temps de calcul ;
  • il est beaucoup plus intéressant, dans notre cas, d'utiliser une routine d'interruption synchronisée avec le retour du spot car, dans ce cas, la routine de déplacement d'une icône devient totalement indépendante du programme principal et il suffit de lui fournir la position de l'icône, pour qu'elle s'y déplace instantanément et sans clignotement I

Mais il y a encore un problème qui risque d'apparaître : dans le cas où les routines d'affichage sont trop lentes, le dernier masquage risque de ne pas être terminé lorsque s'affiche le haut de l'écran et, lorsqu'on déplace l'icône à cet endroit, on risque de la voir disparaître partiellement !

Il est donc nécessaire d'écrire les routines de masquage les plus rapides possibles.

Etant donné que le programme Cherry-Paint fonctionne en mode 2, chaque icône a huit représentations différentes. Là encore, il y a deux méthodes pour obtenir ces huit
représentations :

  • dans le premier cas, il n'y a qu'une représentation en mémoire, les autres étant obtenues, lorsque c'est nécessaire, par rotations successives des octets de cette première représentation. Dans le cas extrême où il est nécessaire de déplacer la représentation de 4 bits, le temps de calcul devient prohibitif ;
  • Dans le deuxième cas, qui est celui utilisé pour Cherry-Paint, toutes les représentations sont en mémoire, la routine est alors très rapide, par contre, beaucoup de mémoire est utilisée pour stocker les formes. Les huit représentations sont décalées de 1 bit chaque fois par rapport à la précédente ("pré-shifted shapes" en anglais).

Le stockage en mémoire et les décalages successifs des différentes formes sont effectués par le premier programme Basic. Ce programme est formé de quatre parties :

  • Lignes 1000 à 5190 C'est la table des masques, pour chaque icône, on a d'abord le masque AND puis le masque OR. Les six derniers masques sont les différentes formes de pinceaux.
  • Lignes 5200 à 5700 Initialisation et remplissage de la table qui contient les adresses des tables de formes.
  • Lignes 5710 à 5960 Remplissage de la table des formes. Lignes 5970 à 6280 Rotation des masques à droite 7 fois et stockage en mémoire.

Pour pouvoir faire fonctionner Cherry-Paint, il va falloir introduire le code hexa du programme d'animation. Pour ce faire, je vous propose un chargeur hexa (deuxième programme Basic) qui comporte des sommes de test pour chaque ligne introduite : si le total calculé ne correspond pas à la somme de test, il vous demandera de réintroduire la ligne fautive. Pour chaque ligne, il y a donc 8 nombres hexa et une somme de test à introduire. Lorsque les deux parties du code machine sont introduites, vous pourrez tester le bon fonctionnement du programme en tapant et en exécutant le troisième programme en Basic, mais auparavant, assurez-vous que votre disquette contient les fichiers : SCR.BIN, TR.BIN (ces fichiers ont été créés par le premier programme Basic de ce mois).

QUELQUES CONSEILS

  • Si vous possédez un moniteur couleur, je vous conseille de faire POKE &80CB, 13:POKE &80CC,13 pour changer la couleur.
  • Pour adapter le programme à une manette de jeux : POKE &8233,72: POKE &824B,73:POKE 88269,75: POKE &8281,74.

CPC

★ PUBLISHERS: CPC Revue
★ ANNÉE: 1986
★ CONFIG: AMSDOS + 64K
★ LANGAGE:
★ LiCENCE: LISTING
★ AUTHOR: Pascal HIGELIN
    

Page précédente : Cherry-Paint
★ AMSTRAD CPC ★ DOWNLOAD ★

Aucun fichier de disponible:
» Vous avez des fichiers que nous ne possédons pas concernent cette page ?
★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Spectrum Screen Pictures on your Amstrad / Screen Transfert Utility Spectrum to CPC464
» Applications » Screen Loader Creator
» Applications » Dibujar Es Facil
» Applications » Character Gird (Home Computing Weekly)
» Applications » C.I. Assistant (E.L.S)
» Applications » Optimizer (Computer Team)
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop
Page créée en 017 millisecondes et consultée 2880 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.