ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ANIMAGE: Unit‚ pour Turbo Pascal permettant d'animer des sprites, de faire³ ³ des scrolls, zooms, cyclages, splits, en VGA 256 couleurs. ³ ³ ³ ³ Info...: Ce package est un produit shareware qui ne doit pas ˆtre modifi‚.³ ³ Si vous en obtenez entiŠre satisfaction ou si vous l'utilisez ³ ³ souvent, effectuez donc votre contrat moral en envoyant un chŠque³ ³ de 50FF (vous recevrez une licence d'utilisation) … l'adresse: ³ ³ ³ ³ Patrick RUELLE ³ ³ 163 rue de Charonne ³ ³ 75011 Paris ³ ³ (France) ³ ³ ³ ³ CE FICHIER CONTIENT DES INFOS GENERALES SUR LES TECHNIQUES D'ANIMATION ET ³ ³ EGALEMENT LES INFOS DETAILLEES SUR LES CONSTITUANTS DE L'UNITE "ANIMAGE". ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ 1 INTRODUCTION Voici un domaine qui demeure encore quelque peu ferm‚, aussi bien parce que l'information n'est pas toujours facile … trouver soi-mˆme que par le fait que de nombreux programmeurs pratiquant ce type de technique pr‚fŠrent conserver leurs d‚couvertes … l'abri des nombreux int‚ress‚s. Cet article est trŠs loin d'ˆtre exhaustif et n'a pour unique pr‚tention que d'expliquer le plus simplement du monde (du moins je l'espŠre!) certaines techniques fondamentales d'animation graphique. 2 PRINCIPES a) LA CARTE VGA Tout d'abord, il faut savoir qu'une carte VGA est constitu‚e de plusieurs ‚l‚ments: des registres g‚n‚raux, le contr“leur CRT (Cathode Ray Tube), le s‚quenceur, le contr“leur d'attributs et le DAC (Digital/ Analogic Converter). Parmi les registres g‚n‚raux on peut d'ailleurs trouver le registre 3DAh contenant des informations sur la VBL ou la HBL. Le contr“leur CRT (25 registres) a par contre la difficile tƒche de configurer convenablement l'‚cran selon les modes graphiques utilis‚s. Le s‚quenceur (5 registres) permet de convertir les accŠs … la RAM vid‚o en les dirigeant vers les bons plans de bits; le rafraŒssement de la RAM vid‚o fait ‚galement partie de son travail. Puis, finalement le DAC qui convertit les codes couleur digitaux en signaux analogiques. Que peut-on trouver d'autre? Et bien, de la RAM vid‚o, et ce de 256Ko jusqu'… g‚n‚ralement 1 ou 2Mo, voire plus. b) LES ANIMATIONS : GENERALITES Le PC a souvent ‚t‚ l'enfant pauvre en matiŠre d'animation (surtout face … des concurrents comme l'Amiga ou l'Atari). Cependant, ce handicap tend un petit peu moins … se remarquer grƒce … l'avŠnement de cartes graphiques assez performantes et de PC puissants (malgr‚ certains goulots d'‚tranglement...). Imaginons par exemple le d‚placement d'un petit bonhomme sur un ‚cran. Qu'est-ce qui cr‚e l'illusion de l'animation? Et bien, exactement le mˆme ph‚nomŠne que l'on retrouve lors de la projection d'un film cin‚matographique. Diff‚rentes ‚tapes d'animation du petit bonhomme sont en fait affich‚es successivement (et suffisamment rapidement) afin de cr‚er l'illusion du mouvement. En informatique, chaque ‚tape d'animation d'un objet est d‚finie dans une zone rectangulaire que l'on appelle un Sprite. G‚n‚ralement cette zone est donc un peu plus grande que le dessin de l'objet (puisque les contours des dessins sont rarement rectangulaires!). N‚anmoins, il existe un cas de figure o— des dessins remplissent complŠtement une zone rectangulaire; dans ce cas on les appelle plus commun‚ment des Tiles, c-…-d des entit‚s de base permettant par exemple de construire un d‚cor entier en r‚duisant par la mˆme occasion son encombrement m‚moire … ces quelques Tiles servant … d‚crire le d‚cor (comme dans Mario Bros...). Mais revenons plut“t … nos sprites. Supposons que nous ayons … notre disposition en m‚moire centrale un ensemble de donn‚es constituant un sprite. Pour l'afficher … l'‚cran il faut alors transf‚rer cette zone rectangulaire complŠte vers la m‚moire vid‚o. Mais que se passe t-il si un d‚cor quelconque se trouvait d‚j… … cet emplacement? Et oui! on aura bel et bien un recouvrement rectangulaire du sprite sur le d‚cor. Si la couleur de fond du sprite est le noir, alors toute la partie noire du sprite qui est inoccup‚e par le dessin apparaŒtra … l'‚cran en cr‚ant un effet ind‚sirable! Pour pallier … cet inconv‚nient il faut pouvoir tranf‚rer les pixels d‚crivant uniquement le dessin et non ceux qui d‚crivent le fond. Dans ce cas on transfŠrera tous les pixels du sprite qui ne sont pas de couleur noire (donc en masquant le fond). c) LES ANIMATIONS : TECHNIQUES La plupart des programmes qui effectuent de nombreuses animations (d‚mos, jeux) utilisent g‚n‚ralement des modes vid‚o permettant de disposer de plusieurs pages graphiques au sein de la m‚moire vid‚o. Dans l'univers des PC il existe un mode non document‚ appel‚ mode X qui permet de configurer les cartes VGA standards (… condition de disposer d'au moins 256Ko) de maniŠre … obtenir en quelque sorte des variantes bien plus performantes que le mode 13h classique. Il est ainsi possible de disposer de 4 pages en 320 X 200, 2 pages en 320 X 400, 3 pages en 360 X 240, 1 page en 360 X 480, etc... Bien ‚videmment on y perd quelque part puisque du coup l'adressage ne sera plus lin‚aire; mais l'int‚rˆt de pouvoir disposer de plusieurs pages rattrappe vite ce soit disant inconv‚nient. Quel int‚rˆt a t-on de disposer de plusieurs pages en m‚moire vid‚o? C'est trŠs simple; Tout d'abord il s'agira d'autant de place en m‚moire centrale qui sera ‚conomis‚e puisqu'avec 4 pages on pourra allŠgrement en attribuer une premiŠre pour les sprites et une deuxiŠme pour les d‚cors par exemple. Supposons que les 4 pages soient num‚rot‚es de 0 … 3; les sprites et les d‚cors seront respectivement attribu‚s aux pages 2 et 3; Les deux premiŠres pages vont donc pouvoir nous servir … effectuer le travail d'animation proprement dite selon une technique bien connue du "Two Pages Buffering". En fait, comme une seule page sur les quatre ne peut ˆtre qu'activ‚e … la fois … l'‚cran (par exemple la page 0), on effectuera la construction du d‚cor et les positions des sprites sur la page cach‚e (la page 1). Ensuite, on bascule cette page … la place de l'autre pour la rendre visible … l'‚cran (en ayant soin d'attendre la VBL pour ‚viter tout problŠme de parasitage tel que le flicking). Maintenant, on construit le d‚cor et les ‚tapes d'animation suivantes sur la page 0, etc... On construit donc alternativement une page pendant que l'autre est active … l'‚cran, puis on bascule. Il s'agit de loin la technique la plus usit‚e! De plus les transferts de RAM vid‚o vers la RAM vid‚o sont assez rapides. Par contre dans un mode ne comportant par exemple que de 2 pages il faudra se r‚soudre … m‚moriser les d‚cors et les sprites en m‚moire centrale. Il est souvent plus rapide de reconstruire entiŠrement ou partiellement l'‚cran suivant que de sauvegarder les portions de d‚cors qui seront masqu‚s par des sprites. En effet, puisque l'on peut supposer pouvoir conserver par exemple un d‚cor entier dans une autre page, il suffira d'‚craser les sprites de la page devenue inactive par les zones rectangulaires du d‚cor … ces endroits pr‚cis (il n'est donc pas n‚cessaire dans ce cas de sauvegarder les zones rectangulaires des endroits o— seront affich‚s les sprites!). Evidemment, pour un d‚cor qui se d‚place cela se complique, mais en r‚fl‚chissant un peu on arrive assez vite … trouver des astuces permettant de s'en sortir assez facilement. Imaginez devoir sauvegarder des tas de Tiles dynamiquement … l'aide des routines d'allocation du DOS... Le temps perdu est ‚norme et le but est toujours de privil‚gier une m‚thode efficace et rapide mˆme au d‚triment de l'encombrement m‚moire (ce qui n'est plus r‚ellement un problŠme car actuellement on peut facilement disposer de 600Ko sous DOS). Une derniŠre petite chose … ajouter. Il est ‚galement possible de cr‚er des effets d'animation en faisant cycler des sous-ensembles de couleurs de la palette. Pour ce faire il suffit de d‚caler chaque couleur (donc les 3 composantes) … la place de la couleur suivante (ou pr‚c‚dente selon le sens du cyclage), et la derniŠre du sous-ensemble prenant alors ‚videmment la place de la premiŠre (ou inversement selon le sens). 3 CHOIX TECHNIQUES Dans le cadre de cet article et par sou‡i de simplicit‚ il a ‚t‚ convenu d'utiliser le mode 13h du BIOS vid‚o. Ce mode est en fait un sous-systŠme du mode VGA appel‚ MCGA (Memory Controller Gate Array). Il a ‚t‚ port‚ sur les petits modŠles PS/2 d'IBM ne se contentant que de 64Ko de RAM vid‚o. Les cartes graphiques dot‚es d'une m‚moire de capacit‚ sup‚rieure sont ‚videmment compatibles avec ce mode. Donc si vous disposez d'une capacit‚ de 256Ko ou plus, l'activation de ce mode via le BIOS ne vous permettra pas d'utiliser plus de 64Ko de RAM vid‚o. Pourquoi? Et bien vraisemblablement pour garantir la compatibilit‚ avec les anciens modŠles dot‚s uniquement de 64Ko (quel lourd boulet que cette sempiternelle compatibilit‚!). Cela dit, comme nous l'avons ‚voqu‚ pr‚c‚demment il est entiŠrement possible de disposer de plusieurs pages de 64000 octets ou plus … condition de programmer certains registres soi-mˆme, c-…-d sans passer par le BIOS (c'est le fameux mode X), mais ceci d‚passe le cadre de cet article. Mais revenons alors … ce mode MCGA. Que possŠde t-il d'int‚ressant? Outre une assez faible r‚solution de 320 * 200 pixels il permet n‚anmoins d'afficher 256 couleurs simultan‚ment … l'‚cran! Comme 256 ‚l‚ments sont codifiables sur 1 octet et que 320 * 200 font 64000 points, un ‚cran repr‚sente donc 64000 octets adressables depuis le segment A000h. La grande quantit‚ de couleurs compensera en quelque sorte la faible r‚solution de ce mode. Chacune des 256 couleurs est codifi‚e par des proportions de composantes de Rouge, de Vert et de Bleu (RVB), et chaque composante couleur accepte une codification sur 6 bits (de 0 … 63). Il est donc possible de choisir 256 parmi 2^6 * 2^6 * 2^6 c-…-d 256 parmi 262144 couleurs possibles (suffisant n'est-ce pas?). Mais il y a encore plus int‚ressant! Les 64000 octets de l'‚cran sont de plus adressables de maniŠre complŠtement lin‚aire (en fait il s'agit d'un leurre d– … l'activation du mode Chain4 et Odd/Even du registre 4 du s‚quenceur par le BIOS, de mˆme que chaque ligne de l'‚cran est en fait d‚doubl‚e comme un faux mode 320 * 400, mais ce serait trop long … expliquer...). Finalement, quels sont les avantages que l'on peut tirer de ce mode? En fait, une extrˆme simplicit‚ de l'adressage (‚crire un pixel aux coordonn‚es x et y avec une couleur correspondant aux composantes RVB nø26 sur les 256 actives sera traduit en PASCAL par : Mem[$A000:320*y+x]:=26;). Attention!, lors de l'activation du mode MCGA, une palette systŠme de 256 couleurs est utilis‚e par d‚faut. En plus, comme dans ce mode on ne dispose que d'une page graphique (donc toujours active … l'‚cran!) il faudra donc prendre garde … toujours attendre la VBL avant d'actualiser les parties de l'‚cran qui le n‚cessitent! Cependant on aura tout le loisir de travailler parallŠlement avec des ‚crans virtuels de 64000 octets (pour palier … la pr‚sence d'une page graphique unique) pour effectuer toutes sortes de m‚morisations (sprites et d‚cors) et de traitements cach‚s. Rappellons aussi que selon le moniteur il peut y avoir en g‚n‚ral entre 50 et 70 VBL par seconde; Ainsi le couple constitu‚ du moniteur et de la carte graphique est-il d‚terminant pour la vitesse des animations (un moniteur avec un rafraŒchissement de 70hz et une carte vid‚o assez lente donneront d'assez mauvais r‚sultats). 4 LE PROGRAMME a) L'UNITE ANIMAGE Afin d'ˆtre certain de pouvoir faire fonctionner le programme sur les IBM PC comportant un adaptateur muni uniquement de 64Ko on utilise la fonction 0 (et sous-fonction 13h pour activer le mode MCGA) du BIOS video (10h). Le seul inconv‚nient r‚side dans le fait que si ce mode n'est pas disponible il n'y a aucune information en sortie permettant de s'en rendre compte. Il faut alors utiliser la fonction Fh (toujours avec la sous-fonction 13h) pour lire si le mode 13h a effectivement ‚t‚ activ‚. C'est cette solution qui a ‚t‚ utilis‚e pour la fonction Activation_MCGA. Pour la proc‚dure Activation_Texte (qui permet de revenir au mode texte) seul le principe de la premiŠre ‚tape est suffisant puisque l'on dispose forc‚ment au minimum du mode texte! La procedure Attente_Synchro consiste … examiner le registre g‚n‚ral 3DAh. Si le bit 0 est … 1 alors une HBL (Horizontal BLanking) est en cours. Et si le bit 3 est … 1 alors une VBL (Vertical BLanking) est en cours. Il suffit donc d'attendre qu'il n'y ait plus de HBL aprŠs la VBL, ce que fait donc la procedure Attente_Synchro. La proc‚dure Ecriture_Palette permet d'activer une palette de 256 couleurs ou partie de palette personnelle. Pour cela on considŠre que chaque composante Rouge, Vert et Bleu doit ˆtre cod‚e sur un octet. Comme 256 X 3 octets font 768 octets alors le tableau pass‚ en paramŠtre devra obligatoirement faire 768 octets de telle sorte … ce que les triplets de composantes couleur se suivent lin‚airement (RVBRVB...RVB). Le premier triplet correspond … la couleur 0 et le dernier … la couleur 255. Pour modifier 32 couleurs … partir de la couleur 128 (les 768 octets ‚tant m‚moris‚s dans le tableau PALET de 0 … 767) on ‚crira : Ecrire_Palette(PALET[128*3],128,32); Pour ce faire on utilise les registres du DAC 3C8h et 3C9h. Sur le port 3C8h on indique le code couleur … modifier et sur le port 3C9h on ‚crit successivement chaque proportion de Rouge, Vert et Bleu (de 0 … 63). La proc‚dure Ecriture_Couleur effectue le mˆme type de travail mais en ne modifiant qu'une couleur … la fois, et ce de maniŠre directe (pas de tableau). Il est ‚galement possible de connaŒtre les composantes d'une couleur donn‚e en inscrivant sur le port 3C7h le num‚ro de couleur puis en lisant successivement sur le port 3C9h chaque proportion de Rouge, Vert et Bleu (non impl‚ment‚ dans l'unit‚). Cette m‚thode est extrˆment plus rapide que d'utiliser les fonctions ad‚quates du BIOS (essayez donc de faire un fading propre d'une image de 256 couleurs via le BIOS!). La routine Ecriture_Pixel ne fait rien d'autre que de calculer l'offset ‚quivalent … 320 * y + x afin d'afficher le pixel avec la couleur souhait‚e. Pour tout ce qui est animation la rapidit‚ est un facteur absolument indispensable. Ainsi quand on sait combien certaines instructions assembleur sont co–teuses en temps machine (un MUL ‚quivaut environ … 80 cycles machines!) il faut autant que possible les ‚viter. Comme 320 = 256 + 64 on peut alors ‚viter l'op‚ration de multiplication en faisant un XCHG de y (ce qui revient … le d‚caler de 8 bits … gauche et donc de le multiplier par 256 : 256 * y), en lui ajoutant ensuite ce r‚sultat mais d‚cal‚ de 2 bits … droite (256 * y + 64 * y), puis en ajoutant finalement x et le tour est jou‚!. On gagne apparamment quelques dizaines de cycles... Sur le mˆme principe il sera trŠs facile de concevoir une routine Lecture_Pixel qui donnera le code couleur d'un pixel donn‚ (non impl‚ment‚ dans l'unit‚). Dans le contr“leur CRT on dispose du registre Dh lequel permet de d‚finir l'adresse d'offset qui servira d'adresse d'origine sur l'‚cran physique. Par d‚faut, dans ce mode on ne pourra effectuer un scrolling horizontal que par 4 points … la fois. Les donn‚es s'‚noncent donc par 1/80Šme d'unit‚ … la fois (on remarquera qu'… raison de 80/80Šme d'unit‚ … la fois on transforme le scrolling horizontal en scrolling vertical puisque l'offset est alors d‚cal‚ de 320 pixels … la fois et l'image semblera ainsi se d‚placer vers le haut!). Il ne faut surtout pas oublier que l'adressage est lin‚aire, donc que le point qui suit imm‚diatement le dernier d'une ligne est en fait le premier de la ligne suivante; et quant … celui se trouvant juste aprŠs le dernier point de la derniŠre ligne de l'‚cran il s'agit du premier point de la premiŠre ligne de l'‚cran... Gare au ph‚nomŠne de wrapping (enroulement). Quoiqu'il en soit la routine est extrˆmement simple et est effectu‚e par la proc‚dure D‚filement_Octet. Pour entreprendre un d‚doublement de l'‚cran il faut programmer plusieurs registres du contr“leur CRT. Il faut programmer le registre 18h (line compare) afin de pr‚ciser le num‚ro de ligne … partir duquel l'‚cran sera d‚doubl‚. Mais le contr“leur considŠre ici la r‚solution dans son mode natif c-…-d en 320 X 400 (puisque chaque ligne est en fait d‚doubl‚e). Si par exemple on d‚sire dupliquer les 100 premiŠres lignes de 0 … 99 en 100 … 199, il ne faudra pas pr‚ciser la valeur 100 mais le double (200). De plus en faisant varier les valeurs de 399 … 0 on aura l'impression qu'une deuxiŠme page (identique … la premiŠre) vient recouvrir la premiŠre de bas en haut! Donc pour superposer exactement les deux images il suffit de pr‚ciser la valeur 0. Mais le registre 18h n'a que 8 bits et pour repr‚senter un nombre de 0 … 399 il faut utiliser le bit 4 du registre 7 (le registre overflow = cuisine pour assurer les lignes sup‚rieures … 256!). De mˆme un 10Šme bit peut servir pour des r‚solutions sup‚rieures, le bit 6 du registre 9 (Max scan Line = on bouche les trous comme on peut!). En ce qui concerne la routine Zoom_Vertical l'astuce consiste … changer la r‚solution verticale toujours … l'aide du registre 9. Seuls les bits 0 … 4 sont attribu‚s … cette fonctionnalit‚. Viennent maintenant les deux proc‚dures proprement dites concernant l'animation de sprites. La premiŠre (Copie_Bloc_Normal) effectue une copie d'une zone m‚moire (centrale ou vid‚o) vers une zone m‚moire (centrale ou vid‚o) en conservant le fond du sprite. La deuxiŠme effectue le mˆme travail mais sans copier le fond (c-…-d la couleur 0 par convention puisque par d‚faut elle est de couleur noire). Ces routines ne travaillent en fait qu'avec des pointeurs (une toute petite contrainte si l'on peut dire...). Il est vivement conseill‚ de travailler avec des pointeurs sur des zones de 64000 octets lin‚aires (et non pas 320 X 200!) pour respecter une certaine coh‚rence avec la taille de l'‚cran physique (et donc pouvoir travailler sur des ‚crans virtuels). On part ainsi du principe que dans un ou plusieurs ‚crans virtuels se trouvent les diff‚rents sprites et/ou ‚l‚ments du d‚cor. Ces sprites sont donc m‚moris‚s de la mˆme fa‡on qu'ils ont ‚t‚ con‡us … l'aide d'un logiciel de dessin du type Deluxe Paint. Ainsi pour transf‚rer un sprite de 20 pixels de large et de 40 pixels de haut qui se trouve aux coordonn‚es x1=0 et y1=32 de l'‚cran virtuel virt^ vers l'‚cran physique aux coordon‚es x2=100 et y=90 (sans masquage) il faudra ‚crire : Copie_Bloc_Normal(0,32,20,40,100,90,Seg(virt^)+Ofs(virt^),$A000); De mˆme pour effectuer un traitement cach‚ de m‚moire centrale … m‚moire centrale entre deux ‚crans virtuels appel‚s virt1^ et virt2^ on ‚crira (on a omis volontairement les 6 premiŠres valeurs) : Copie_Bloc_Normal(,,,,,,Seg(virt1^)+Ofs(virt1^),Seg(virt2^)+Ofs(virt2^)); Une derniŠre chose reste … pr‚ciser: La routine de copie avec masquage effectue un transfert octet par octet mais celle de copie normale effectue ce transfert mot par mot (toujours dans un sou‡i d'optimisation). Il faut dans ce cas toujours veiller … transf‚rer une zone rectangulaire dont la largeur soit divisible par deux (paire). b) LE PROGRAMME ANIMDEMO Voici enfin la description du programme de d‚monstration utilisant l'unit‚ ANIMAGE!!! (et pourtant je suis s–r d'avoir oubli‚ de dire des tas de choses...). Que fait donc le programme ANIMDEMO? 1) Apparition d'un titre (avec une police interne) en fading. 2) Scrolling horizontal du titre en aller-retour. 3) L'animation globale : - Quatre barres horizontales color‚es se d‚pla‡ant verticalement et de maniŠre sinuso‹dale derriŠre le titre. - Trois balles color‚es et rebondissantes passant sur les barres et le titre. - Un d‚filement continu de texte (chenillard) en haut de l'‚cran. - La mˆme chose en bas de l'‚cran mais en zigzag. 4) Un zoom momentan‚ du texte situ‚ en haut de l'‚cran. 5) Disparition de celui-ci en fading. BAR_COULS contient les composantes couleur des quatre barres et PAL_COULS celles de la police et des trois balles. FONTE contient donc les codes couleur des caractŠres de A … Z, des 3 balles et du caractŠre Espace. Il est constitu‚ de 1680 octets (240 points sur 7) c-…-d 30 petits sprites de 8 points sur 7. Cette police est d'ailleurs transf‚r‚e ensuite dans image1^ (on a pr‚f‚r‚ utiliser une police personnelle plut“t que l'horrible police systŠme!). A chaque commencement de caractŠre correspond une abscisse (dans ce cas les ordonn‚es sont inutiles puisque tous les sprites sont repr‚sent‚s … partir de la mˆme ordonn‚e 0; de mˆme pour la taille qui est de 8 X 7). TEXTE contient donc toutes les abscisses correspondant aux caractŠres du texte … faire d‚filer. La mˆme chose est valable pour la premiŠre ligne du titre (TITRE1) et pour la deuxiŠme (TITRE2). Dans ce programme le travail s'effectue avec deux ‚crans virtuels : image1^ et image2^ (ce qui est amplement suffisant). Le calcul des ordonn‚es des barres est pr‚calcul‚ dans TRACE_BARRE. Au d‚but l'‚cran est rempli de 160 lignes toutes de num‚ros de couleurs diff‚rents (en fonction de l'ordre dans la palette mais toutes de couleur noire!). Les barres sont en fait cr‚‚es en changeant les 9 lignes cons‚cutives correspondant … chaque nouvelle position de barre (Il ne s'agit pas d'animation mais de changements de couleurs!). Le titre qui apparaŒt au d‚but est en fait masqu‚ sur ces lignes d'o— l'impression que les barres se d‚placent en arriŠre plan. En ce qui concerne l'apparition en fading le principe est trŠs simple : il suffit de cr‚er une table de 768 ‚l‚ments mis … z‚ro (les 256 couleurs sont alors noires) et d'activer cette palette. Par la suite on affiche l'image (qui n'est donc pas visible) et on augmente incr‚mentalement l'intensit‚ des 256 couleurs de cette table noire (en l'activant … chaque ‚tape) tant qu'il existe une composante couleur qui ne soit pas parvenue … l'intensit‚ r‚elle de la vraie palette de l'image. Le processus inverse s'applique pour la disparition en fading. Les composantes couleur de la police et des balles (PAL_COULS) sont m‚moris‚es dans PALETTE … partir de la couleur 209 (Celles d'avant servent pour la pseudo-animation des barres). Mais pourquoi transfŠre t-on la police dans l'‚cran virtuel image1^? Tout simplement parce que FONTE n'est pas un pointeur et qu'il nous faut avoir les sprites dans une zone pointant sur 64000 octets! Ceci est d– au fait que normalement les images (compress‚es ou non) sont plut“t stock‚es dans des fichiers externes sur disque et lues alors directement dans les zones point‚es. On a plut“t privil‚gi‚ ici l'organisation d'un programme comportant toutes ses donn‚es en interne sous forme de tables (Il va de soit que les fichiers externes constituent une solution plus enviable!)... Pour effectuer un d‚filement de texte le plus simple est de d‚caler le bloc de maniŠre soft de 2 pixels vers la gauche et d'ajouter le bon segment de deux pixels de large du caractŠre apparaŒssant (dans un ‚cran virtuel). Le bloc complet est ensuite transf‚r‚ en RAM vid‚o. Pour les balles on a d'abord effectu‚ une copie de l'‚cran physique comprenant les lignes noires avec le titre vers image2^. Les balles font 8 points sur 7; pour chaque nouvelle position de balle on transfŠre les zones rectangulaires de 12 sur 11 (entourant de deux pixels la taille d'une balle puisque les balles se d‚placent par deux pixels … la fois) correspondantes de image2^ vers image1^. Ensuite on transfŠre les sprites des balles (qui sont situ‚s en haut de l'‚cran virtuel image1^ et … droite de la police) vers image1^. On transfŠre finalement les zones de 12 sur 11 o— sont situ‚es les balles de image1^ vers l'‚cran physique. Voil…!, le reste est suffisamment clair pour ne pas ˆtre d‚taill‚. 5 AMELIORATIONS Peut-ˆtre est-il encore possible d'effectuer certaines optimisations? Il est ‚galement possible d'‚tendre les fonctionnalit‚s de l'unit‚ ANIMAGE en incorporant par exemple : zoom horizontal soft, copie de bloc en faisant l'addition des couleurs du sprite avec le d‚cor de telle sorte … donner un effet de transparence (il faudra donc organiser les couleurs de la palette de fa‡on appropri‚e), etc... Ou bien tout simplement se lancer dans la mise en oeuvre du mode X et pouvoir ainsi disposer selon les modes de une ou plusieurs pages graphiques. 6 CONCLUSION Dans cet article, on a pr‚sent‚ sommairement les constituant essentiels d'une carte graphique, les diff‚rentes techniques d'animation ainsi qu'une unit‚ et un programme d'exemple permettant de s'initier … ce type de programmation assez particulier … travers le mode 13h.