                                     ANIMATOR
                                     ========
                                   (version 1.0)

                                   MDB Software


0  ANIMATOR est POSTCARDWARE
   -------------------------

  Si vous l'utilisez vous devez m'envoyer une carte postale.
  Profitez-en pour me dire si il y a quelque chose que vous voudriez
  voir dans ANIMATOR ou si il y a des BUGs.

  CHAUSSY Laurent
  50 rue du bout d'en haut
  77570 Mondreville
  FRANCE
  Email : chaussy@ibm580.ensicaen.ismra.fr

1  DESCRIPTION
   -----------
   a) Les menus
      ---------
      Rien a dire la dessus tout est classique. 
      Sauver permet de sauver tout les paramtres y compris les chemins
      etc... NB : les formulaires sont icnifiable (clic  droit  sur  la
      barre titre).
      
   b) Le formulaire Tools
      -------------------
      * Les icnes Rouge, Vert et Bleu permettent de digitaliser les 3 
        composantes d'une image.
      * Les icnes poubelle correspondant permettent d'effacer chacune
        des composantes individuellement.
      * L'icne Gris permet de digitaliser en 64 niveau de Gris.
      * L'icne poubelle Gris efface toute les composantes.
      * L'icne Gel permet de geler une image (1 clic pour geler puis un
        autre pour Dgeler)
        Si aprs avoir geler on digitalise, c'est l'image gele qui est 
        digitalise.
      * L'icne Voir permet de voir l'image qui est contenue en mmoire.
      * L'icne Save permet de sauver l'image en mmoire au format TGA
        type 2 non compress.
      * L'icne Load permet de voir (et uniquement voir) une image au
        format TGA.
      * Le bouton entrelac permet de digitaliser 2 trames successives
        (1 paire et 1 impaire) et de les entrelacer pour avoir une  plus
        grande rsolution. Attention vitez de trop  bouger  pendant  la
        digitalisation. Vous devez de plus aller changer  la  rsolution
        dans le formulaire chemin. exemple :  si  vous  tes  rgl  sur
        192*128 vous devrez mettre 384*256
        Rq : vous aurez bien 256  lignes  vritables  mais  vous
        n'aurez pas 384 pixels. En effet le  digitaliseur  ne  peut  pas
        contenir  384  pixels,  j'ai  donc  artificiellement  doubl  la
        rsolution horizontale en recopiant chaque pixel 2 fois pour que
        le rapport longueur/largeur reste le mme et que l'image ne soit
        pas dforme.
        Rq2 : Pour pouvoir utiliser  l'entrelacement  vous
        devez relier par un simple fil la patte  P/I  du  connecteur  J1
        (module digitaliseur)  la patte IN6(extension  future)  (module
        interface).
        
  c) Le formulaire Chemins
     ---------------------
     * Visualiseur :
       Pour le moment ce programme ne permet pas en lui mme de voir une
       image (pour le moment).
       Il utilise un visualiseur externe qu'il lance a chaque fois que
       vous voulez voir une image.
       Par consquent chaque fois que vous visualisez une image il sauve
       l'image en question au format TGA et lance le visualiseur.
       L'icne disquette en face de Visualiseur permet de slectionner
       le visualiseur a utiliser.
       Je vous conseille le visualiseur TGA de Apex (en domaine public)
       qui marche aussi bien sur Falcon que sur ST et en 16M de couleur.
     * Image :
       Ici vous slectionnez le nom et le chemin de l'image Tampon.
       C'est sous ce nom que Animator sauvera l'image  que  vous  voulez
       voir avant de lancer le visualiseur.
     * Ram systme
       C'est la Quantit de RAM que vous voulez laisser libre (pour
       pouvoir lancer le visualiseur par exemple ou pouvoir  sauver  les
       images en FLI).
     * Images RAM
       C'est le nombre d'images que vous voulez stocker en RAM (dpend
       de la rsolution).
       Max vous indique le maximum (dpend de votre mmoire libre,
       accessoires...).
     * Images P2D
       C'est le nombre d'images que vous voulez stocker sur votre disque
       dans un fichier P2D.
       (cf paragraphe P2D).
       Max vous indique le maximum (dpend de la mmoire libre sur votre
       Disque Dur).
     * Pixels 
       Rsolution en X (en pixels). Pour des raisons d'optimisation ce
       nombre doit tre un multiple de 4 (automatiquement arrondit).
     * Lignes
       Rsolution en Y (en lignes).
     * Ne pas voir 
       Permet de ne pas lancer systmatiquement le visualiseur aprs une
       Digit dans le formulaire Tools.
     * Falcon
       Pas encore implant.
    
   d) Le formulaire Animation
      -----------------------
     # Le cadre Image
       Il permet de faire diffrentes opration sur une image
       particulire d'une animation dont le numro est prcis  dans  le
       champ no (Rq : la numrotation commence a 0).
       
       * l'icne poubelle permet d'effacer l'image (elle sera remplace
         par celle qui la suit).
       * l'icne GO permet de digitaliser ce que voit la camera.
       * l'icne voir... devinez...
       * l'icne save sauve l'image au format TGA
       
     # Le cadre Animation
       Il permet de faire des action sur un groupe d'image dont le dbut
       et la fin sont prcis dans les champs "de  :  ____    :  ____".
       L'icne ALL permet de faire une opration sur toute les images.
       
       * l'icne effacer (a amliorer dans une version future)
         il efface toutes les images.
         en mode P2D il efface le fichier P2D.
       * l'icne GO (a amliorer dans une version future)
         il digitalise une anim sur la totalit des images disponibles.
       * l'icne voir permet de voir les images du groupe grce au
         viewer TGA.
         Rq : pour arrter la visualisation maintenez la
         touche SHIFT enfonce quand vous sortez du viewer. (ex: pour le
         viewer  APEX  appuyer  sur  SHIFT  et  SPACE  pour  arrter  la
       visualisation).
       * l'icne Save permet de sauver le groupe slectionn au format
         TGA ex : vous voulez sauvez les images 20  30. entrez  le
         chemin grce  l'icne disquette qui se trouve en face  de
         _____XXX.TGA puis entrez le nom  gnrique  (TOTO)  de
         vos images dans le champs TOTO_XXX.TGA et cliquez  sur
         l'icne SAVE vous aurez  alors  11  images  :  TOTO20.TGA,
         TOTO21.TGA... TOTO30.TGA. Cette option  est  excessivement
         pratique pour faire des animations MPEG grce    MPEG
         FEVER (excellent programme dont je suis l'auteur).
       * Le champ Delay permet de rgler le temps qu'attendra le
         processeur entre 2 images. Ceci permet de rgler la vitesse  de
         digitalisation : A vous de rgler au mieux cette  valeur  selon
         votre machine. Sur un Falcon 40Mhz on arrive  16.6 images  par
         seconde (192*128). Cela dit Attention  de  ne  pas  mettre  des
         temps trop courts : 1 Trame dure 20 ms (en gros) et pendant que
         l'ordi transfre  l'image,  la  RAM  n'est  pas  accessible  au
         digitaliseur, donc aprs le transfert d'une image  l'ordi  doit
         attendre suffisamment longtemps pour qu'une  autre  images  ait
         t digitalise... Si vous mettez  un  temps  trop  court  vous
         digitaliserez sans cesse la mme image...
        
     # le reste
       * le bouton P2D permet de passer en mode Picture 2 Disk.
       * le bouton parit permet de tenir compte de la parit des trames.
         En effet, si vous digitalisez un anim  16.6 images par seconde
         par exemple, vous prenez successivement une  trame  paire  puis
         une impaire... Ceci a pour consquence une forte  scintillation
         de l'anim au replay. Ceci est du au fait que les trames  paires
         et impaires sont entrelaces. Avec ce bouton  slectionn  vous
         n'avez accs qu'aux vitesses suivantes : 50/n Images  secondes.
         (avec n Pair) En ce qui me concerne  je  digitalise  toute  mes
         anims a 12.5 images secondes en 192*128. Il me semble que c'est
         le meilleur compromis : grande rsolution, bonne vitesse et pas
         de scintillement. Ce bouton joue galement  un  rle  important
         dans la digitalisation couleur. en effet sans lui vous pourriez
         avoir : 1 trame rouge paire,
                 1 trame verte impaire,
                 1 trame bleu paire.
         Ceci n'est pas bon du tout pour la qualit de l'image
         rsultante. Il faut absolument que toute les composantes soient
         issues  de  trames  du  mme  type  (toutes  paires  ou  toutes
         impaires).
       * L'icne disquette en face du bouton  P2D  permet  de
         choisir le nom et le chemin du fichier P2D.
         
   e) Le formulaire de sauvegarde en FLI
      ----------------------------------
      Attention, la sauvegarde en FLI ne sauve que les images du  groupe
      qui a t dfini dans le formulaire animation.
      
     * Visualiseur
       Ici vous slectionnez un visualiseur de FLI/FLC.
       Je vous conseille le visualisuer d'APEX ou FLITC47
     * Commande
       Ici vous pouvez entrer une ligne de commande pour le viewer.
       ex: pour FLITC47 mettez -z=1 c'est trs pratique.
     * Animation
       Nom et chemin de l'animation a sauver.
     * Icne Voir
       Lance le viewer de FLI pour voir l'anim.
     * Save 
       Sauver l'anim FLI.
     * Origine X
       Origine en X de l'animation.
     * Origine Y
       Origine en Y de l'animation.
       Par dfaut les images sont centres sur la rsolution de 
       l'animation (exemples : Si vous avez des images 192*128 et que 
       votre anim est en 320*200 vous verrez vos images aux centre. Si 
       vous avez des images 192*128 et que votre anim est en 96*64 vous 
       ne verrez qu'une partie de vos images: le centre).
       cette option permet de placer l'origine en x a un endroit prcis 
       par rapport a l'origine 0 (coin en haut  gauche). Cela permet 
       d'animer la partie qui vous intresse si vous avez des images trop 
       grandes.
       NB : pour les origines en x et en y les  valeurs  ngatives  sont
       acceptes.
     * Rsolution X
       Rsolution en X de l'animation.
       La valeur peut tre comprise entre 10 et 1280
     * Rsolution Y
       Rsolution en Y de l'animation.
       La valeur peut tre comprise entre 10 et 1024
       Les 4 options prcdentes permettent de faire des cadrages sur 
       l'animation.
       Ex1: vous ne voulez qu'une partie de l'anim en particulier.
  
         0                            192
        0------------------------------
         |                            |
         |           X         |      |
         |          Y--------- |      |
         |           |       | |Res Y |
         |           |       | |      |
         |           ---------        |
         | ------------------         |
         |       Res X                |
      128------------------------------
     
      Ex2: Vous voulez l'animation sur un fond de couleur.
  
         X                            Res X
        Y------------------------------
         |  Fond                      |
         |           0                |
         |          0--------- ^      |
         |           | Anim  | |128   |
         |           |       | |      |
         |           ---------        |
         |           <------->        |
         |             192            |
    Res Y------------------------------
     
     * Couleur bord
       Dtermine le numro dans la palette de la couleur qui  sera  mise
       en fond de l'anim.
       Valeur comprise en 0 et 255 (0 noir, 255 blanc).
       Par dfaut c'est le noir : 0
     * Vitesse
       dans une anim FL? on sauve le temps qu'il doit y avoir entre 2 
       images successives.
       Pour les FLI, c'est le nombre de rafrachissement vido entre 2 
       images qui est sauv : 5 est la valeur par dfaut.
       Pour les FLC, c'est un temps en millime de seconde qui est sauv
       : 72 est la valeur par dfaut. Dans les 2 cas une valeur plus
       grande diminue la vitesse.
     * Sauver en FLI
       gnre une animation FLI (rsolution par dfaut 320*200) au lieu 
       d'une animation FLC (rsolution par dfaut 640*480).
       Attention les animation FLC prennent plus de place bien que ce 
       format soit plus rcent (car il y a une palette par image contre
       une palette pour toutes les images dans une anim FLI).
       Je vous conseille donc le format FLI que plus de players savent 
       reconnatre.	      	  
     * Double buffering 
       ajoute des information pour les player lent qui utilise le 
       double buffering pour compenser leur lenteur : actuellement c'est
       assez inutile (player de bonne qualit) et a donne des animation 
       plus grosses.

2  P2D
   ---
    Le systme P2D (Picture To Disk) permet de sauver directement une
    animation sur disque dur au format P2D propre a ANIMATOR.
    Ce systme permet  de  s'affranchir  de  la  limite  cruelle  de  la
    centaine d'images en mmoire (avec 4 Meg). On peut en effet avec
    suffisamment de place libre sur le disque sauver plusieurs  milliers
    d'images puis convertir ensuite le tout en animation FLI.
    Attentions les FLI sont limits a 4000 images. 
    Avec un falcon  32 Mhz j'arrive  sauver les images  la vitesse de
    12.5 images/s.
    Avec ce systme, vous aurez toute latitude pour crer des anims  FLI
    de plusieurs dizaines de megas...
    Format des fichiers P2D (en version 1):
     *un Magic number pour reconnatre le fichier : 
       une chane de 4 caractres (4 octets) : P2D1
     *un long (4 octets) : le nombre de pixels
     *un long (4 octets) : le nombre de lignes
     *un long (4 octets) : le nombre d'images dans le fichier
     *les images...
       Elles sont sauves les une aprs les autres.
       Chaque image est sauve lignes par lignes en commenant par la
       ligne qui se trouve en haut de l'image.
       Chaque ligne est sauve pixel par pixel en commenant par le
       pixel le plus  gauche.
       Chaque pixel est cod par un octet qui a la structure suivante :
         xx111111
         ^^^    ^
         |||    |
         ||--------- les 6 premier bits contiennent le niveau de gris du pixel
        bits 
     inutiliss 
     
3 FALCON
  ------
    Sur mon falcon j'ai eu quelques problmes avec la carte
    d'entre-sortie. En effet il semble que le signal UDS ne  fasse  pas
    du tout ce qu'il est cens faire  sur  un  ST.  Par  consquent,  ce
    signal est inutilisable sur FALCON (du moins sur  le  mien  en  tout
    cas).
    A ce propos je lance un appel : Quelqu'un sait-il pourquoi ???
    Pour Palier ce dfaut j'ai enlev la rsistance de la carte
    d'entre-sortie et j'y ai connect A8 (broche 21 du connecteur)  la
    place.
    Attention ne vous gourez pas : ne connectez pas  A8  sur  UDS
    !!! Le programme animator est  parfaitement  compatible  avec  cette
    bidouille : au lieu d'crire FB0001 pour mettre le bit 0    "1"  on
    crit FB0101 ce qui mettra le bit 0 a "1" aussi bien sur un  ST  que
    sur un Falcon avec la carte modifie.
     
4 GESTION INTERNE DE LA MEMOIRE DANS ANIMATOR
  -------------------------------------------
    Toute la gestion de la mmoire se fait grce au formulaire chemin.
    Attention : chaque fois que vous cliquez sur applique vous librez
    toute la mmoire puis elle est ensuite raloue et mise  0.
    La mmoire est divise en 2 parties :
     * un buffer TGA qui contient une image au format TGA.
       taille : 3*lignes*pixels+18
       utilise par le formulaire tools et pour la visualisation.
     * un buffer images qui contient toutes les images RAM
       taille : lignes*pixels*nombre_d'images
       utilis pour la digitalisation en mode RAM.
       la premire image du buffer image est utilise pour le P2D.
    
5 AMELIORATION ET OPTIMISATION
  ----------------------------
   Les routines de digitalisation (notamment pour l'animation)  ont  t
   optimise de facon a tres les plus rapides possible.
   * Les adresses ont t misent dans les registres d'adresse inutiliss.
   * Une erreur de programmation (dtection fin de trame a t corrige).  
     wait1:  
       move.b  $FA0001,D4        ;attente de fin de trame
	    andi.b  #128,D4
	    cmpi.b  #128,D4
	    bne     wait1        
   * L'attente  pour    stabilisation    de    l'lectronique    enleve
     (certainement li a l'erreur de programmation).
   * La boucle principale optimise (instructions plus rapides et astuce 
     d'optimisation d'une boucle)  
     
          move.l 	D0,D3				; nb de pixels/ligne dans D3       
     retour:							
	       move.b 	(A4),(A0)+			;lecture data -> dans buffer
          move.b 	(A1),D4				;pixel suivant
          move.b 	(A2),D4
          move.b 	(A4),(A0)+			;lecture data -> dans buffer
          move.b 	(A1),D4				;pixel suivant
          move.b 	(A2),D4
          move.b 	(A4),(A0)+			;lecture data -> dans buffer
          move.b 	(A1),D4				;pixel suivant
          move.b 	(A2),D4
          move.b 	(A4),(A0)+			;lecture data -> dans buffer
          move.b 	(A1),D4				;pixel suivant
          move.b 	(A2),D4
          dbf		D3,retour			;dcrmente pixel et boucle
     
6 BIDOUILLE POUR OPTIMISER ENCORE (bientt...)
  --------------------------------------------
   On voit que du point de vue programmation il y a une seule boucle
   lmentaire a optimiser :
  
       retour:							
	       move.b 	#$FA0001,(A0)+		;lecture data et stockage
          move.b 	#$FB0181,D4		   ;pixel suivant
          move.b 	#$FB0080,D4
          dbf		D3,retour		   ;dcrmente pixel et boucle
	     
	Vous allez me dire que c'est pas possible de gagner du temps la
   dessus sauf en faisant l'optimisation du paragraphe 5.
	Vous avez tout faux : on peut !!!
	 - la 1re ligne ne peut pas tre optimise.
	 - la dernire non plus.
	 - On peut virer les deux du milieu qui servent a dire au
      digitaliseur de passer au pixel suivant.
	   Je m'explique :
	    # Si au lieu d'utiliser ROM4 pour les entres et ROM3 pour les
         sorties on utilise seulement ROM4 pour les entres et  les
	      sorties alors en faisant : move.b #$FA0181,(A0)+ on  fait  ce
         que faisait les  2   premires   lignes   de   la   boucle
         prcdente. Cette boucle se rsume alors  :
	      
	  retour:							
	       move.b 	#$FA0181,(A0)+		;lecture data et stockage dans le buffer
          move.b 	#$FA0080,D4		;pixel suivant
          dbf	D3,retour		;dcrmente pixel et boucle
	       
	 		et hop 8 cycles d'horloge de moins.
	 		Cette bidouille a t teste et elle marche !!!
	    # Si au lieu de latcher le bit 0 ce qui oblige a revenir crire pour 
         changer son tat on met un simple buffer  du  type  74  HC  541
         (ventuellement avec une rsistance de pull down), on est pas
         oblig de revenir crire pour remettre le bit 0  "0".
	      La boucle se rsume alors  :

	      retour:							
	       move.b 	#$FA0181,(A0)+		;lecture data et stockage dans le buffer 
                                                 et pixel suivant
               dbf	D3,retour		;dcremente pixel et boucle

         et hop encore 8 cycles d'horloge de moins.
         Cette bidouille n'a pas t teste. (pas encore...)	      

        
        
        
						Have Fun witn ANIMATOR !

        
