*****************************************************************************
*  Objet  : Le VIDEL                                                        *
*  Auteur : DEMOMAKER/-ABSTRACT- (Ndlr: ou DMO/-AST)                        *
*                                                                           *
*  J'ai honte,car DMO avait mis tous les accents et je les ai enleves.Je ne *
* merite pas d' avoir un FALCON. Sinon cet article est excellent,on ne peut *
* pas dire que la bidouille a disparu.O fait, si vous avez des ruses ou des *
* docs sur le videl contactez DMO sur RTEL (voir article).                  *
*                                                                           *
*****************************************************************************



  
                              Amis du FALCON,bonsoir !
                       (A ma montre,il est 12h10,et alors ?)



                     
  Nous voici donc reunis pour une premiere exploration de ce genial proces-
seur video du FALCON nomme le VIDEL...
  Je tiens a signaler a tous avant de commencer que tout ce qui suivra (ex-
cepte la liste des registres du VIDEL) est le fruit d'un travail assez con-
sequent mais encore incomplet ; de plus,puisque j'ai surtout travaille en
solo sur ce point,il se pourrait que certaines erreurs se soient glissees
dans mes observations et deductions.
  Tout ceci etant clarifie,allons-y !

***************************************************************************  

  On commencera par un rapide recapitulatif des registres hardware du VIDEL
que tout le monde peut trouver dans les diverses docs sur le FALCON,notam-
ment dans les fichiers HARDWARE.DOC et FALCONR2.TXT ; malheureusement,tout
le monde ne les a pas en sa possession et,de plus,il faut bien reconnaitre
que les explications de ces documents sont plutot superficielles...
  Vous trouverez donc ci-dessous une liste de registres sous la forme :

  Adresse   : Description succinte                        (Nom officiel)
  
  Chaque registre sera repris ulterieurement pour une description plus ap-
profondie ; signalons que la partie "Nom officiel",si elle est garantie
pour les anciens registres ST ne l'est pas du tout pour les nouveaux re-
gistres FALCON (je n'ai pas encore eu acces aux docs ATARI !!!)
  
  $ffff8201 : Octet de poids fort de l'adresse ecran      (DBaseH)
  $ffff8203 : Octet de poids moyen de l'adresse ecran     (DBaseM)
  $ffff820d : Octet de poids faible de l'adresse ecran    (DBaseL)
  $ffff820a : Registre de synchronisation ST              (SyncMode)
  $ffff820e : Distance en mot de la fin d'une ligne       (LineWide)
              ecran au debut de la suivante
  $ffff8210 : Largeur d'une ligne en mots                 (LineWidth)
  $ffff8260 : Resolution ST                               (ShiftMode)
  $ffff8264 : Bit de depart (0-15) de l'ecran             (HScroll)
  $ffff8266 : Resolution FALCON                           (SpShift)
  $ffff8280 : Compteur horizontal                         (HHC)
  $ffff8282 : Timer horizontal                            (HHT)
  $ffff8284 : Fin du decodage de l'image (horizontal)     (HBE)
  $ffff8286 : Debut du decodage de l'image (horizontal)   (HBB)
  $ffff8288 : Debut d'affichage de l'image (horizontal)   (HDB)
  $ffff828a : Fin de l'affichage de l'image (horizontal)  (HDE)
  $ffff828c : SS horizontal                               (HSS)
  $ffff828e : FS horizontal                               (HFS)
  $ffff8290 : HH horizontal                               (HHH)
  $ffff82a0 : Compteur vertical                           (VFC)
  $ffff82a2 : Timer vertical                              (VFT)
  $ffff82a4 : Fin du decodage de l'image (vertical)       (VBE)
  $ffff82a6 : Debut du decodage de l'image (vertical)     (VBB)
  $ffff82a8 : Debut d'affichage de l'image (vertical)     (VDB)
  $ffff82aa : Fin de l'affichage de l'image (vertical)    (VDE)
  $ffff82ac : SS vertical                                 (VSS)
  $ffff82c0 : Reconnaissance modes ST/FALCON              (???)
  $ffff82c2 : Decodage des lignes/colonnes                (VCO)

  On a aussi deux palettes ; l'une utilisee pour les modes compatibles ST,
l'autre pour les nouveaux modes FALCON :

  $ffff8240 - $ffff825e : Palette ST
  $ffff9800 - $ffff9bfc : Palette FALCON
  
  Pendant que j'y suis et vu que ce magazine s'appelle HOW TO CODE,je me
permets de vous rappeler (ou d'apprendre aux coders debutants) que tous
ces registres sont adressable en mode absolu court...
  UN EXEMPLE,UN EXEMPLE !!!
  Oui,tout le monde ne comprenant pas ce charabia,ca s'impose...
  Imaginons donc que vous desiriez obtenir un fond d'ecran blanc (on pren-
dra ici un exemple ST,c-a-d qu'on utilisera la palette ST) ; si vous uti-
sez l'adressage absolu long,ca donnera :
      MOVE.W #$777,$FFFF8240
  L'adressage absolu court est specifie par :
      MOVE.W #$777,$FFFF8240.W
  Sur un bon vieux ST,voici comment gagner 4 cycles... (j'ai la flemme de
verifier mais je suppose que c'est pareil pour le FALCON)

***************************************************************************  

  Comme promis,nous allons maintenant reprendre tous les registres du VIDEL
un par un afin de mieux comprendre leur fonctionnement.
  Tous ? Non ! Un peuple d'irreductibles registres de synchro resiste enco-
re et toujours au gentil coder... Je m'explique : vous avez sans doute re-
marque dans mon recapitulatif des registres du VIDEL des registres aux noms
aussi barbares que HDB,VFC ou encore VSS ? Et sans doute vous etes-vous
exclame : "Il est gentil le DMO mais ca ne me renseigne pas beaucoup !"
Mais rappelez-vous le debut de cet article : je vous avais precise que mon
etude du VIDEL etait encore incomplete ; et ce sont tous ces fameux regis-
tres de synchro que je ne suis pas encore parvenu a comprendre !!!
  On touche donc ici au probleme vital pour les coders : en ce qui concerne
les demos,on evite generalement les appels au XBIOS ce qui interdit l'appel
aux fonctions telles que SetScreen qui deviennent pourtant bien pratique
pour une machine aussi complete que le FALCON... Or,ces fameux registres de
synchro interviennent directement dans la gestion de l'ecran par le VIDEL.
Fini le "CLR.B $FFFF8260.W" pour passer allegrement en basse resolution !
  Arrive ici,tout le monde respire profondement et se dit : "Heureusement,
l'auteur de cet article est arrive  et il va nous donner la solution !!!"
  DOMMAGE ELIANE,DOMMAGE ELIANE,DOMMAGE ELIANE...
  J'ai effectivement reussi a 'gommer' provisoirement ce probleme,mais ma
solution n'est acceptable que pour le developpement d'une demo et non
pas pour sa diffusion : j'ai ecrit un petit programme en GFA-BASIC qui
passe dans la resolution desiree et qui fait un dump du contenu de ces
registres de synchro... Lors des inits de ma demo,je n'ai plus qu'a fixer
ces registres aux valeurs trouvees... Parfait,me direz-vous,je ne vois pas
le probleme ! Il est pourtant simple : ces valeurs de synchro varient d'un
moniteur a l'autre !!! En tout cas,d'une TV a un VGA,je n'ai pas verifie
pour deux TV ou deux VGA ni entre deux FALCON pour un meme moniteur...
J'espere trouver bientot la solution : j'ai entrepris un mechant desassem-
blage du SetScreen mais entre A-DEBOG ST qui ne fonctionne pas bien sur
FALCON et MON-TT qui est tres peu pratique,cela risque de me prendre pas
mal de temps...
  Bon,ce 'petit' intermede etant termine,on va peut-etre enfin se mettre
au boulot,non ?

---------------------------------------------------------------------------

   Registres relatifs a l'adresse ecran : $ffff8201,$ffff8203,$ffff820d,
                                          $ffff8264 (octets)
                                          
  Ces registres devraient etre familiers a tous les anciens possesseurs de
ST bien que le registre $ffff820d ne soit apparu,si mes souvenirs sont bons
que sur les STe... A quoi sert-il ? Sur STf,les adresses ecrans etaient ob-
ligatoirement multiples de 256 ce qui manquait de souplesse... Ce registre
permet de placer l'ecran a l'octet pres ou plus exactement a 2 OCTETS pres.
En effet,l'entrelacement par mots des ecrans videos ne permet pas le posi-
tionnement au pixel pres grace a l'adresse video... C'est la ou intervient
le registre $ffff8264 qui specifie au processeur video par quel pixel il
doit commencer le decodage de l'image (entre 0 et 15 !).
  Vous savez donc maintenant positionner votre ecran la ou vous le desirez.

---------------------------------------------------------------------------

  Registre de synchronisation video : $ffff820a (octets)
  
  Il semble etre totalement inutile sur FALCON (en fait,le bit 50/60 Hz ne
sert plus a rien...)
  Bit 0 : 0 -> Synchronisation interne
          1 -> Synchronisation externe
  Bit 1 : Semble devoir etre toujours fixe a 1
  Simple,non ?
  
---------------------------------------------------------------------------

  Largeur d'une ligne en mots : $ffff8210 (mot)
  
  Je ne vois pas ce qu'on pourrait ajouter...
  Quelques exemples ?
    Mode ST BASSE : 160 octets -> 80 mots
    Mode FALCON 320*200 256 couleurs : 320 octets -> 160 mots
  Et puis on va peut-etre s'arreter la !
  
---------------------------------------------------------------------------

  Resolution ST : $ffff8260 (octet)
  
  Ce registre a conserve la meme signification que sur ST a part en ce qui
concerne la haute resolution ; celle-ci n'est plus fixee en mettant ce re-
gistre a 2... En revanche 0 et 1 correspondent toujours respectivement a
la basse resolution et a la moyenne resolution.

---------------------------------------------------------------------------

  Resolution FALCON : $ffff8266 (mot)

  Enfin un registre interessant ! Ne perdons pas de temps et penchons nous
plus avant sur les bits utilises par ce registre :
  Bit 4  : Mode 256 couleurs
  Bit 5  : 0 -> Synchronisation verticale interne
           1 -> Synchronisation verticale externe
  Bit 6  : 0 -> Synchronisation horizontale interne
           1 -> Synchronisation horizontale externe
  Bit 8  : Mode True Color
  Bit 10 : Mode 2 couleurs
  Encore une fois,je ne sais pas trop a quoi servent les bits 5 et 6 rela-
tifs aux synchronisations...
  En revanche,la description des bits 4,8 et 10 me semble assez claire !
  Precisons tout de meme que le mode selectionne est actif lorque le bit
correspondant est fixe,c-a-d positionne a 1 ! Je ne sais pas ce qu'entraine
la mise a 1 de plusieurs bits correspondant a des modes differents mais
quelquechose me dit que c'est a eviter...

---------------------------------------------------------------------------

  Decodage de l'image : $ffff8284,$ffff8286,$ffff82a4,$ffff82a6 (mots)
  
  Ces registres determinent la position a partir de laquelle le VIDEL com-
mencera et terminera a envoyer un signal au moniteur ce qui se reperera sur
ce dernier par l'arrt du bandeau noir signalant que rien ne lui parvient.
En realite vous n'avez sans doute jamais remarquer ce bandeau puisque les
valeurs d'origine pour ces registres ne le permettent pas... Neanmoins,ceux
ayant deja essaye l'utilitaire accompagnant Falcon Screen savent peut-etre
de quoi je parle...
  La question se pose donc de savoir les valeurs a indiquer...
  Si je peux vous repondre en ce qui concerne le decodage de l'image verti-
cal,il en va autrement du decodage horizontal : en effet,on doit indiquer
pour les registres de decodage vertical le nombre de DEMI-LIGNES avant le-
quel ou jusqu'auquel le decodage aura lieu... Sachant qu'il y a sur une te-
levision 625 lignes,vos valeurs seront a prendre entre 0 et 1250.Bien evi-
demment le registre de debut sera inferieur au registre de fin !
  Pour le registre de decodage horizontal,le mystere persiste,desole...

---------------------------------------------------------------------------

  Affichage de l'image : $ffff8288,$ffff828a,$ffff82a8,$ffff82aa (mots)
  
  De meme que le VIDEL commence a envoyer un signal a un moment donnee,il
commence a decoder l'image quand vous le lui indiquez... C'est le propos
de ces registres ; signalons qu'ils fonctionnent de maniere analogue aux
precedents (comptez en demi-lignes pour les registres verticaux)

---------------------------------------------------------------------------

  Reconnaissance ST/FALCON : $ffff82c0
  
  Precisons tout de suite que ce registre est une decouverte personnelle,
non documente ; je me suis en effet rendu compte que le bit 0 de ce regis-
tre etait positionne (fixe a un) lorsque l'on est dans un mode graphique
FALCON (c-a-d non compatible ST)... Ceci peut etre utile pour effectuer des
initialisations propres dans les demos ! Les autres bits de ce registre
ne m'ont pas encore revele leur secret...

---------------------------------------------------------------------------

  Decodage des lignes/colonnes : $ffff82c2
  
  Ce registre comporte trois bits utiles :
  Bit 0 : Pixels doubles ; lorsqu'il est positionne,le VIDEL ne considere
qu'un pixel sur deux et le repete deux fois afin de conserver la meme reso-
lution...
  Bit 1 : Entrelacement ; lorsque ce bit est positionne,on passe en mode
entrelace ce qui double le nombre de lignes de l'ecran mais declenche un
scintillement desagreable pour une utilisation prolongee (sauf sur un
moniteur VGA !)
  Bit 2 : Lignes doublees ; ce bit a la meme fonction que le bit 0 mais
pour les lignes de l'ecran (le VIDEL en considere une sur deux qu'il
repete deux fois...)

---------------------------------------------------------------------------

  Palette ST : $ffff8240-$ffff825e
  
  J'ose esperer que chacun sait de quoi je parle ! Rappelons simplement que
les couleurs sont codees sur un mot de la maniere suivante : $0RVB ou les
symboles R,V et B sont des groupes de 4 bits... Sur STf,seuls les 3 bits
de poids faible sont pris en compte (valeurs entre 0 et 7) alors qu'a par-
tir du STe et donc sur FALCON,les 4 bits sont utilises (entre 0 et 15).
  Bah je crois que c'est clair !

---------------------------------------------------------------------------

  Palette FALCON : $ffff9800 - $ffff9bfc
  
  Ici chaque couleur est codee sur un long mot de la maniere suivante :
$RRVVxxBB ou les symboles RR,VV et BB sont des octets... La chose a retenir
est que seuls les 6 bits de poids FORT sont pris en compte ; on a donc bien
une palette de 2^(6*3)=262144 couleurs ! Remarquez que,en consequence,les
couleurs $ffff00ff et $fcfc00fc sont equivalentes (mais preferez la premie-
re valeur pour definir un blanc pur au cas ou les 2 bits restants soient
un jour utilises dans un hypothetique FALCON 060 avec 16 millions de cou-
leurs.... Waaaaaaaaaah !)

***************************************************************************  

  Arrive ici se pose un probleme assez special : si vous avez bien lu ce
qui precede,vous vous etes peut-etre rendu compte qu'il n'etait nulle part
question de la gestion des modes 4 et 16 couleurs !! En effet,on sait spe-
cifier les modes 2,256 et 65536 couleurs ($ffff8266) mais c'est tout...
  J'avoue que ceci m'a pose des problemes pendant un certain temps. C'est
en desassemblant le SetScreen que j'ai compris la methode : le registre
de resolution FALCON ($ffff8266,toujours lui !) peut en effet recevoir la
valeur 0... Mais ceci ne rajoute qu'une possibilite,non ? Alors,cela cor-
respond-il au mode 4 ou 16 couleurs ? Respirez,c'est plus complexe que ca !
  Il faut en effet savoir que si vous fixe ce registre a 0 sans rien faire
avant,vous vous retrouverez en mode 4 couleurs... Mais comment donc passer
en 16 couleurs,alors ? Voici donc la solution : IL FAUT FIXER LE REGISTRE
DE RESOLUTION ST ($ffff8260 pour les distraits) A 1 AVANT D'ACCEDER AU RE-
GISTRE DE RESOLUTION FALCON...
  Comme dirait mon prof de maths,c'est Shadock ! Le tout est de savoir com-
ment on doit s'y prendre et,justement,nous sommes la pour ca !

***************************************************************************  

  Afin de mieux illustrer mes propos,je fournis avec l'article un source
d'initialisation du FALCON dedie aux demos ; celui-ci comporte diverses
routines qui permettront aux debutants de se concentrer sur le code de leur
demo en evitant les basses besognes d'initialisation...
  Quelques precisions s'imposent : les valeurs des registres du VIDEL 
utilisees dans ce source sont specifiques a mon FALCON ; elles ont ete
trouvees par le programme GFA evoque plus haut et qui se trouve normalement
aussi sur la disquette... Ce dernier n'est pas commente mais executez-le
apres avoir lu cet article et vous devriez le comprendre ! Remarquez enfin
que les valeurs par defaut placent le FALCON en mode 320*200 256 couleurs
ce qui peut etre change aisement en se reportant au fichier genere par le
petit programme GFA (fourni au format LST pour etre relu par la majorite
des versions du GFA-Basic...)
  En bonus,vous remarquerez que ce source comporte la fameuse routine de
replay de modules au DSP dont tout le monde parle ; d'apres ce que je sais,
ce serait la routine utilisee par SANITY dans la TERMINAL FUCK UP (je l'ai
recuperee en version 'pur rip' a la PLACE TO BE). Vous remarquerez que
mon camarade LEADER ONE l'a completee avec TOUS les effets du ProTracker
version 2.1A ce qui devrait plaire a tous ! Attention toutefois,quelques
bugs subsistent,en particulier au niveau des 'rythmes' de certains modules.
De plus,la routine de gestion du module etant en Timer A,cela peut poser
quelques problemes pour certains types de demos (plasmas...)
  Je terminerai en vous disant que ce source ne pretend pas etre l'arme ab-
solue pour une bonne demo mais il me semble qu'il peut aider les coders
debutants voire les coders confirmes cherchant un complement d'information
afin d'exploiter a fond leur machine.

***************************************************************************  

  Nous voici donc arrives au terme de ce premier article redige tout spe-
cialement pour HOW TO CODE qui deviendra vite,je l'espere,un must en ma-
tiere de diskmag !
  On se retrouvera,si vous le voulez bien,au prochain numero...
  
  Pour me contacter : 36-15 RTEL,36-14 RTEL1,36-14 RTEL2 Bal DEMOMAKER
                         ou Club ABSTRACT Pass RULES

Et pour finir,salutations amicales a : HOLOCAUST,EQUINOX,HEMOROIDS,FANTASY,
LEGACY,NEXT,DUNE,MJJ PROD,POSITIVITY,HYDROXID,SECTOR ONE,ETERNITY,EAGLES,
ACCS,REPLICANTS,CYBERNETICS,DIAMOND DESIGN,DNT et bien sur EKO !!!


              AAAA BBBB  SSSSS TTTTT RRRRR AAAAA CCCCC TTTTT
              A  A B  B  S       T   R   R A   A C       T
              AAAA BBBBB SSSSS   T   RRRRR AAAAA C       T
              A  A B   B     S   T   R RR  A   A C       T
              A  A BBBBB SSSSS   T   R  RR A   A CCCCC   T
              
                               RULES !!!
