                     *---------------------------*
                     * Documentation dveloppeur *
                     *---------------------------*
                     *      Systme vido        *
                     *           de              *
                     *       CENTScreen          *
                     *    compatible DOLMEN      *
                     *---------------------------*

                                                   Auteur: Sacha Hnatiuk
                                                      ASM: Sacha Hnatiuk
                                                   C: David Ren-Loiseau
                                                    Hotline de 21h  23h
                                                      du mardi au samedi
                                                          au 344-746-330
Introduction
------------

  Les informations prsentes ici sont tires de la documentation officielle
de DOLMEN. Je rappelle que ce n'est qu'un extrait et que des informations
peuvent ne pas tre prsentes.

Les fonctionnalits
-------------------

  Dans cette partie, nous retrouvons toutes les fonctions XBIOS concernant 
la vido pour le Falcon 030. Elles intgrent en plus une volution de 
CENTscreen 2 en apportant quelques modifications pour tre plus en phase avec 
Dolmen.

  On a donc accs aux rsolutions tendues, qui sont d'ailleurs compatible 
avec celle de CENTscreen 2, via un fichier descriptif dans le dossier 
DOLMEN.SYS (ou de boot pour CENTScreen 3), nomm VIDEO.DAT (quelle
originalit!). Nous avons donc toutes les possibilits existant dj dans
CENTscreen:
    
    - multiples rsolutions par type de rsolution.
    - cran virtuel
    - conomiseur d'cran coupant compltement l'cran et compatible Energy 
      Star
    - dlai de dclenchement de l'conomiseur en secondes et aussi par 
      raccourci clavier
    - rveil de l'cran sur un vnement du clavier, de la souris, du
      joystick et du Midi

  Plus les nouvelles:
    - retard du dclenchement de l'Energy Star par un passage en veille 
      normal (utile pour les coupures courtes dans le cas d'un assemblage, 
      par exemple)
    - extinction et rveil pilotable par logiciel. C'est par ces fonctions 
      que les drivers clavier, souris ou autres peuvent rveiller ou 
      teindre l'cran.
    - l'appui de la touche alternate pendant un changement de rsolution 
      dsactive le mode de destination. C'est une option ultime car elle 
      peut modifier la rsolution de dpart ( celle du sytme ?! ) au retour 
      d'un changement de rsolution. C'est pour a que cette option ne 
      marche qu'une fois   chaque appui.
    - diffrentes mthodes de scrolling pour l'cran virtuel:
      - scrolling par effet de bord: le scrolling a lieu au moment ou la 
        souris sort de la zone visible.
      - scrolling diffrentiel: la zone visible est positionne 
        proportionnellement  la position de la souris dans l'cran virtuel, 
        cad que plus on se rapproche des bords, moins on scrolle.
      - scrolling central: la zone visible est centre sur la souris.
    - de nouvelles fonctions pour grer la vido

Fonctionnement des changements de rsolution
--------------------------------------------
  Principe de base
  ----------------
  
  Le principe de fonctionnement est trs simple: pour un type de 
rsolution standard, comme le 640*480 en 16 couleurs, zro  plusieurs 
rsolutions peuvent tre adjointes. Une seule videmment peut agir  la 
fois! Ce qui, quand un programme fait un changement de rsolution, provoque 
le passage dans cette rsolution tendue.

  Les fonctions
  -------------
  
  La fonction principale, fonctionnant systmatiquement avec les 
rsolutions tendues, est Setscreen (XBIOS 5). Elle est d'ailleurs charge 
de mettre  jour les diffrentes valeurs des variables systme lies  la 
VDI.

  Les autres fonctions touchant aux rsolutions tendue, comme Vsetmode et 
Vgetsize, travaillent par dfaut avec les rsolutions standards sans 
modifier quoi que ce soit au niveau du systme. Nanmoins, l'appel  ces 
fonctions avec un mode code vido modifi, permet de faire une incursion en 
mode tendu et d'initialiser la VDI au passage. Car, il faut savoir que
Vsetmode n'initialise pas la VDI

  Exemples
  
  Pour mieux comprendre le problme, un petit exemple pris dans une dmo:
    - rcuprer la rsolution en cours par Vsetmode
    - rcuprer les adresses physique et logique
    - passer une rsolution standard par Vsetmode (comme le 320*240 en true 
      color)
    - changer les adresses crans par Setscreen (sans changer la 
      rsolution)
    - ... on est dans la dmo... maintenant retour au bureau...
    - remettre les adresses crans par Setscreen
    - repasser le mode vido d'origine par Vsetmode

  Et voil, c'est tout! Une petite variation plus rapide et permettant de 
rcuprer l'cran du systme  la fin:
faire un Setscreen avec les adresses sauvegardes et le mode vido 
d'origine

  Dans le dernier cas, vous allez nous dire: "oui, c'est facile, le 
Setscreen passe systmatiquement les modes tendues et donc le retour se 
passe bien! Mais comment fait-on pour le Vsetmode?". C'est l toute 
l'astuce: le mode sauv au dbut contient des bits supplmentaires dans les 
emplacements rservs.

  Un particulirement est toujours prsent: c'est bit 15 qui correspond au 
mode actif. Justement la modification  apporter au mode code vido 
consiste  mettre le bit 15  1 (pas besoin de plus). Donc, si vous ne 
modifiez pas le mode code rcupr, le fait de le redonner avec Vsetmode  
la fin repassera l'cran en mode tendu et rinitialisera la VDI du coup. 
Et a marche plutt bien d'aprs les tests effectus sur plusieurs jeux, 
dmos et logiciels graphiques ncessitant de changer de rsolution.
Problmes

  Si un mode tendu ou non ne peut pas tre pass  cause de la taille de 
l'cran demande pour le faire (uniquement avec Vsetcreen en passant 0 comme 
adresses), la fonction tente de passer un cran standard . Si celui-ci ne 
passe pas, non plus, on quitte la fonction (D0=-1) et il n'y a pas de 
changement de rsolution effectu. La rsolution pourra tre repasse par 
la suite, elle n'est pas dsactive.

  Le bit 15 et Magic...
  ---------------------
  
     Magic pose encore une fois plus de problmes qu'il n'en rsout et
oblige donc CENTscreen, encore une fois,  corriger un bug: dans le fichier
Magx.inf, une ligne stipule le type le code vido  passer pour le Falcon.
Malheureusement ce mot n'est pas un simple nombre mais le regroupement de
plusieurs informations: rsultat, Magic le converti btement en ascii
dcimal (lisible pour les humains...) et arrive mme  crer un nombre
ngatif! Ce miracle arrive car il pense que le mode vido est un entier
sign, eh oui...

     Le problme, c'est qu'au prochain changement de rsolution o
il tentera de lire ce mot, il plante!!! Donc, CENTscreen s'arrange pour
ne plus renvoyer d'informations importantes dans ce mot, sous Magic
uniquement, car il y a que lui qui marche pas...


Le mode code vido
------------------

  Le mode vido est dfini par un mot de code, qui est un champ de bits:

    xxxx xxxF SOPV 8NNN

      x: bits tendus (voir plus loin)
      F: flag vertical
         0=off
         1=entrelac (RGB) / Double ligne (VGA)
      S: flag ST compatible (ne plus utiliser)
      O: flag overscan (RGB) (inutilis car incontrlable)
         0=off
         1=on
      P: flag PAL (RGB)
         0=NTSC
         1=PAL
      V: flag VGA
         0=moniteur RGB
         1=moniteur VGA
      8: flag 80 colonnes (correspond  un ancien concept o les crans font
         40 colonnes (320 pixels) ou 80 colonnes (640 pixels) de 
         large!)
         0=40 colonnes
         1=80 colonnes
      N: exposant de 2 pour le nombre de plan
         0=1 plan
         1=2 plans
         2=4 plans
         3=8 plans
         4=16 plans (Near True Color)

  Note: quelques modes n'existent pas comme le 80 colonnes 16 plans en 
        VGA ou le 40 colonnes monochrome.

  A titre indicatif, voici les bits tendus retourns dans le mode code 
vido en rsolution tendue:

      bit 15: mode vido actif pour les anciennes fonctions
      bit 14: mode standard (mode protg contre l'effacement)
      bit 13: validation de l'horloge externe
      bit 12: horloge externe 32 ou 36 MHz sur CENTurbo 2 rev A
      bit 11: cran virtuel actif ou non
      bit 10: conomiseur actif ou non
      bit  9: mode energy star actif ou non

Implantation
------------

  Quelques points sont important concernant l'implantation de la partie 
vido.

  Vecteurs
  --------
  
  Plusieurs vecteurs systme sont mis en place:
    - gestionnaire de l'conomiseur d'cran chan avec le vecteur ETV_TIMER 
      ($400), ce vecteur remplit plusieurs offices:
      - compter le delai avant l'extinction normale (et l'activer dans ce 
        cas)
      - compter un delai supplmentaire pour l'extinction complte (Energy 
        Star)
      - muler la VBL en mode Energy Star. Ce dernier est obligatoire, car 
        en mode Energy Star, il n'y a plus d'interruption VBL.
        Cette mulation installe, donc, une VBL  50Hz.

    - gestionnaire de l'cran virtuel: comme son nom l'indique, il permet  
      l'cran virtuel de fonctionner. Pour cela, 2 modes sont proposs: 
      l'cran bouge quand le pointeur de la souris arrive sur un bord 
      d'cran, l'cran suit le mouvement de la souris proportionnelement au 
      rapport cran virtuel/cran physique ou l'cran suit systmatiquement 
      les mouvements de la souris.
      Il est install en $70, contrairement  Dolmen ou il se trouve en
      queue VBL. La raison est trs simple. La VDI (NVDI aussi) prends
      trop de temps en VBL pour afficher la souris (entre autre) et ainsi
      le changement d'adresse cran pour l'cran virtuel se faisait en plein
      affichage de l'cran vido.

    - plusieurs vecteurs systme comme ikbdvec, midivec, mousevec et joyvec
      sont dtourns pour contrler le rveil de l'conomiseur. Attention
      aux logiciels trs sales (Digital traker dans les plus rcents qui nous
      agrmente de conseils sur l'utilisation prhistorique du clavier et
      du Midi) qui dtournent le vecteur clavier. Une fois dtourn, le rveil
      de l'conomiseur risque de ne pas se faire, car le Timer C continue lui
      de tourner et finira donc par mettre l'cran en veille!
      Donc quand on met du dsordre dans le systme, on le fait compltement
      et pas  moiti.

  Les nouvelles fonctions
  -----------------------

  Ces fonctions ont t implantes pour faciliter la gestion de la vido 
et de ces nouvelles possibilits.

  Un tableau est utilis par plusieures fonctions pour passer les 
paramtres vido :

    mot: handle
    mot: mode vido type Falcon
    mot: largeur de l'cran physique.
    mot: hauteur de l'cran physique.
    mot: nombre de plans.
    mot: largeur de l'cran logique.
    mot: hauteur de  l'cran logique.
    mot: temps en seconde avant la mise en veille.
    mot: temps en seconde avant l'activation de l'energy star aprs la mise 
         en veille.
    octets: nom du mode vido (32 caractres au maximum) termin par un 0.

  La notion de handle est la principale nouveaut de ces fonctions car on 
n'utilise plus les mots de code vido mais un identificateur de rsolution, 
voire directement la rsolution, sans connatre les rsolutions implantes 
dans le systme.

  Les modes vido
  ---------------
  
  Pour manipuler les rsolutions disponibles, les fonctions suivantes sont 
usites:

    Vread: pour connatre le mode vido en cours.
    Vwrite: pour changer les rsolutions.
    Vattrib: modifie les attributs d'un mode vido.
    Vcreate: ajoute un nouveau mode vido.
    Vdelete: efface un mode vido.
    Vfirst: fournit les paramtres du premier mode vido disponible.
    Vnext: fournit le mode suivant.
    Vvalid: vrifie l'intgrit d'un mode vido.
    Vload: recharge le VIDEO.DAT.
    Vsave: sauve les paramtres vido dans le VIDEO.DAT.

  Pour passer une nouvelle rsolution, il faut utiliser Vcreate et cela de 
2 faons: par un handle ou par la rsolution voulue.

  Le handle est prioritaire et seulement les paramtres de l'cran virtuel 
peuvent alors tre utilis. Cette mthode oblige de connatre les 
rsolutions et leurs handles respectifs grce  Vfirst et Vnext. Si un mode 
dfini par un handle doit tre rappel plus tard, il est fortement 
conseill de le contrler par Vvalid, et de le rechercher le cas chant.

  La deuxime mthode est plus souple mais ne permet pas de fixer 
exactement la taille de l'cran physique car le systme cherche la taille 
la plus proche de la demande et complte avec une partie virtuelle si 
besoin est, sans pour autant l'activer.

  Il est possible de spcifier, dans le mode vido Falcon, les attributs 
du mode voulu ( si un mode vido correspondant  la demande a pu tre 
trouv ). Ces attributs sont identifis par les flags set, eco, eco2 et virt.
Le dernier flag, validant l'cran virtuel, trouve une application pratique 
lors de la recherche de mode vido suivant la rsolution et dont on ne 
dsire pas le complment en virtuel.

  Les modes obtenus sont modifiables  volont sans pour autant altrer 
l'original. Si l'on veut modifier durablement les attributs d'un mode 
( flags ) ou ses paramtres ( eco, eco2 et virt ), il convient d'utiliser 
Vattrib.

  Un flag dispose d'un traitement spcial: le flag_set. C'est grce  ce 
bit que les fonctions Setscreen, Vsetmode et Vgetsize savent quel est le 
mode tendu actif par rsolution, car ce bit est prsent dans un seul mode 
par rsolution  la fois. Ainsi, quand on veut changer le mode par dfaut 
pour les anciennes fonctions, on utilise Vattrib qui modifiera ce bit pour 
le mode choisi mais dsactivera aussi l'ancien pour viter tout conflit.

  Il est possible d'effacer un mode vido par Vdelete. Cette opration ne 
modifie que l'ordre rel des modes vido et non les handles. Par contre, au 
prochain chargement d'un VIDEO.DAT, les numros de handle pourraient changer.

  L'insertion d'un nouveau mode vient se placer physiquement  la fin de 
la liste des modes vido. Son handle est suprieur  tout ceux prsents 
actuellement. Ceci est ncessaire pour viter tout conflit avec un ancien 
handle effac.

  Une fois des modifications apportes aux modes originaux, il est est 
possible de les sauver grce  Vsave, qui crase le fichier VIDEO.DAT se 
trouvant  la racine du boot. En cas d'altration ou de changement profond 
des modes vido, il est possible de recharger les modes vido du fichier 
VIDEO.DAT par Vload. Vload provoque un recalcul des numros de handles.

  Attention! Le nouveau VIDEO.DAT charg peut ne pas contenir la mme
rsolution par dfaut que celle en cours ou carrment aucunes rsolutions
identiques. Comme les handles sont tous raffects, il faut en tenir compte.


  L'cran virtuel
  --------------

  Il est possible de dplacer l'cran ou de connatre la position de 
celui-ci grce  Vseek et Voffset. Par ailleurs, on peut fixer la mthode 
de scrolling de l'cran par rapport au pointeur ( ou tout autre systme 
pouvant fournir une coordonne ) par Vscroll.

  Attention  la souris qui peut  tout moment dplacer l'cran car le
moindre mouvement de sa part est pris en compte par l'cran virtuel.
  
  Il faut donc utilis Vlock, qui permet de bloquer vis  vis de la souris
et seulement la souris. Vseek, lui, dplace toujours l'cran.


  La veille d'cran
  -----------------
  
  Le contrle de l'allumage ou de l'exinction de l'cran peut tre pilot 
par Vopen et Vclose. C'est trs utile pour rveiller l'cran lors d'une 
requte vers l'utilisateur.

  Les moniteurs
  -------------
  
  Grce  SetMon et MultiMon, on accde enfin au contrle rel du type du 
moniteur et de la possibilit de le bloquer dans un certain type.

  La compatibilit
  ----------------
  
  C'est une des trs rares concession pour faire fonctionner des logiciels 
dont les dveloppeurs ne veulent pas en corriger les incohrences.

  Le logiciel Graoumf tracker rentre totalement dans ce cas: il fait
un vgetsize puis un Setscreen sans rallocation de l'cran. Bref, il
a faux sur toute la ligne car la bonne mthode est de faire un simple
Setscreen avec rallocation et de lire la taille de l'cran en Linea
comme tout le monde. En plus, on rcupre l'cran systme: pratique pour
ce type de softs. Dans son cas, le Vgetsize normal retourne une taille
standard et ensuite il se retrouve avec un cran virtuellement plus grand
que le physique et c'est le plantage.

  Origine du problme:

  La validation de Sizecomp fait en sorte que la taille de l'cran 
retourner par Vgetsize correspond  l'cran par dfaut et non la taille de 
l'cran standard. Car normalement, la taille d'un cran tendu doit tre 
obtenue en mettant le flag_set  1 dans le mot de code vido.

  Il est vrai qu'au dbut, Vgetsize retournait systmatiquement la taille de 
l'cran par dfaut. Mais, comme beaucoup de logiciels utilisaient cette 
fonction pour connatre la taille de l'cran qu'ils leur fallait pour 
faire ensuite un Vsetmode, il fallait retourner la taille standard par 
soucis d'conomie de mmoire. En effet, si  chaque requte pour connatre 
la taille d'un cran standard, on se retrouve avec la taille de l'cran 
tendue, qui peut tre en plus virtuel, on courrait droit  un manque 
crucial de mmoire, mme avec 14 Mo.

   Le fait de devoir faire un Vgetsize avant d'utiliser un cran dans une 
certaine rsolution, vient du fait que l'on ne connait pas la taille que 
fera le mode standard, car nulle part n'apparatront les dimensions relles
du mode vido pass. Jusqu' maintenant, la seule mthode tait de lire les 
variables LineA. C'est une chose totalement limine avec les nouvelles 
fontions !

  Mais comme il fallait pouvoir connatre aussi la taille d'un cran 
ventuellement tendu, en prvision d'un Setscreen, Vgetsize devait tre en
mesure de tout faire. C'est pourquoi, l'ide d'utiliser les bits tendus 
est apparue car, il est vrai, qu'aprs un Vsemode(-1), le mode vido tait 
conserv tel quel par la plupart des programmes.

  Voil donc, le principe adopt pour utiliser encore les vieilles 
fonctions du XBIOS. La fonction Sizecomp permet donc de laisser tourner des 
logiciels qui se retrouvent  faire btement un Vgetsize avant de faire un 
Setscreen sans rallocation d'cran et en collant leur cran au niveau de 
celui du systme dans une taille standard et ainsi provoquer un bus error 
en sortant de la RAM ou en plantant leur propre logiciel par crasement.



LISTE DES FONCTIONS XBIOS IMPLANTEES SOUS CENTSCREEN
----------------------------------------------------

  Je rappelle que le XBIOS est le trap #14, et que tout les appels systme
se passe par la pile. les ventuelles rponses sortent par d0. Normalement
le XBIOS modifie d0  d2 et a0  a2, mais pas pour les fonctions de Dolmen,
qui ne modifient que d0 et a0.

  Une fonction est dclare ici comme suit:
  
  - son nom suivi du numro pour le XBIOS.
  - une brve explication
  - la liste des paramtres  passer. Ils correspondent au rsultat sur la
    pile juste avant le trap #14. C'est aussi l'odre dans lesquels on les
    crit en C.
  - la rponse

  A la fin se trouve une liste de structures en assembleur relatif au
systme vido implant.


                *--------dbut des fonctions----------*

Getrez ($04)
------------
  
  Renvoie la rsolution courante

    C'est l'ancien appel pour connatre la rsolution courante. Dans le cas 
  des rsolutions compatibles ST, il retourne:
      0 pour ST basse
      1 pour ST moyenne
      2 pour ST haute
    Dans tout les autres cas, elle retourne 3, c'est la valeur pour les 
  modes Falcon

  Paramtres:
    Aucun

  Rponse:
    D0 (mot): rsolution
  
  ASM 1: 
	move.w	#4,-(sp)
	trap	#14
	addq.l	#2,sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
  	XBIOS	Getrez

  C:  
  	#include	<tos.h>
	int	Getrez( void )


Setscreen ($05)
---------------

  Changement de rsolution:

    Cette fonction est  utiliser en priorit pour tout changement de 
  rsolution car elle permet de rallouer l'cran et rinitialise la VDI.

    Quelle que soit l'adresse cran qui contient 0, la rallocation de l'cran
  se fera.

  Paramtres:
    Log (long): Pointeur sur l'cran logique ou 0 pour rallouer l'cran
    Phys (long): Pointeur sur l'cran physique ou 0 pour rallouer l'cran
    Rez (mot): Vaut 3 pour les rsolution Falcon
    Mode (mot): mode vido

  Rponse:
    D0 (mot): l'ancien mode vido

  ASM 1: 
	move	#mode_video,-(sp)
	move	#3,-(sp)
	move.l	#log_base,-(sp)
	move.l	#phys_base,-(sp)
	move.w	#5,-(sp)
	trap	#14
	addq.l	#14,sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
	move	#mode_video,-(sp)
	move	#3,-(sp)
	move.l	#log_base,-(sp)
	move.l	#phys_base,-(sp)
  	XBIOS	Setscreen
  C:
	#include	<tos.h>
	void	Setscreen( void *laddr, void *paddr, int rez );


Vread ($41)
-----------

  Interrogation sur le mode vido en cours

    Permet en un seul appel de connaitre l'tat actuel du mode video 
  install.

  Paramtres:
    Long: pointeur sur un tableau de paramtres capable d'accueillir ces 
          donnes:

          mot: handle
          mot: mode vido type Falcon
          mot: largeur de l'cran physique.
          mot: hauteur de l'cran physique.
          mot: nombre de plans.
          mot: largeur de l'cran logique.
          mot: hauteur de  l'cran logique.
          mot: dlai en seconde avant l'extinction de l'cran.
          mot: dlai en seconde avant le passage en Energy star aprs 
               l'extinction d'cran.
          octets: nom du mode vido (32 caractres au maximum) termin
                  par un 0.

  Rponse:
    Le tableau est rempli.

  ASM 1: 
	move.l	#Resultat,-(sp)
	move.w	#$41,-(sp)
	trap	#14
	addq.l	#6,sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
	move.l	#Resultat,-(sp)
  	XBIOS	Vread
  C:		
  	#include	<dolmen.h>
	void	Vread(VDO_PARAM *Resultat);

Vwrite ($42)
------------

  Change la rsolution de l'cran

    Il est possible d'initialiser la VDI pour pouvoir utiliser les fonctions 
  graphiques immdiatement. Cela permet aussi de rallouer l'cran qu'il faut 
  pour le mode vido voulu.

    Grce au tableau entrant (voir description au dbut du livre dans le 
  chapitre Vido), on communiquement la nouvelle rsolution que l'on dsire:

    - handle <>-1: c'est le handle d'un mode vido que l'on connait (quand 
      on restaure l'cran de dpart par exemple). On peut prciser la taille 
      de l'cran virtuel en y plaant autre chose que -1, sinon c'est le 
      mode vido par dfaut qui sera pass.
    - handle = -1: la rsolution doit tre prcise et peut tre complte 
      par la taille de l'cran virtuelle. La fonction cherche le mode vido 
      capable d'acceuillir la rsolution demande et complte par une 
      surlargeur.( cran virtuel ) si besoin est.

    Une fois la rsolution passe, le tableau de sortie contient le mode 
  effectivement pass ( pratique pour valider son mode ).

    En cas d'chec ( pas assez de mmoire pour l'cran de la VDI, handle non 
  valide ou rsolution demande trop petite ), le mode en cours est retourn 
  dans le tableau de sortie  titre d'information avec un message d'erreur en 
  prime.

  Paramtres:
    Mot: rinitialisation de la VDI si diffrent de 0
    Long: paramtres entrant
    Long: paramtres sortant

  Rponse:
    Le tableau de sortie est rempli.
    D0=0 : pas d'erreur
    D0=-1: erreur
    
  ASM 1: 
	move.l	#OutParam,-(sp)
	move.l	#InParam,-(sp)
	move.w	#$42,-(sp)
	trap	#14
	lea	10(sp),sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
	move.l	#OutParam,-(sp)
	move.l	#InParam,-(sp)
  	XBIOS	Vwrite
  C:
  	#include	<dolmen.h>
	int 	Vwrite(int InitVDI, VDO_PARAM *InParam, VDO_PARAM *OutParam);
    
Vattrib ($43)
-------------

  Modifie les attributs d'un mode vido

    C'est par cette fonction que l'on peut modifier les paramtres des modes 
  vido originaux. Il est possible de modifier seulement les flags set, eco, 
  eco2 et virt, la taille de l'cran virtuel et les dlais d'conomiseur 
  d'cran.

    Le flag_set ne pouvant tre mis qu'une seul fois par type de rsolution, 
  cette fonction se charge de dsactiver l'ancien mode. Ce n'est videment 
  utile que pour les anciennes fonctions.

  Paramtres:
    Long: paramtres entrant
    Long: paramtres sortant

  Rponse:
    Le tableau de sortie est rempli par les paramtres effectivement 
  affects.

  ASM 1: 
	move.l	#OutParam,-(sp)
	move.l	#InParam,-(sp)
	move.w	#$43,-(sp)
	trap	#14
	lea	10(sp),sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
	move.l	#OutParam,-(sp)
	move.l	#InParam,-(sp)
  	XBIOS	Vattrib
  C:		
  	#include	<dolmen.h>
	void	Vattrib (VDO_PARAM *InParam, VDO_PARAM *OutParam);

Vcreate ($44)
-------------

  Ajoute un mode vido

    Les paramtres vido rcuprs pour crer ce mode, sont directement lus
  dans les registres vidos et complts par les paramtres que le systme 
  doit connatre pour l'identifier.

    C'est grce  cette fonction que CENTVidel permet d'utiliser directement 
  un mode fraichement cr.

    Vcreate ne vrifie en aucun cas la validit des paramtres vido lus, 
  car c'est au logiciel qui insre un mode de savoir les crer correctement.

  Paramtres:
    Long: paramtres entrant
    Long: paramtres sortant

  Rponse:
    Le tableau de sortie est rempli par les paramtres effectivement 
  affects et aussi le handle mit en place.

  ASM 1: 
	move.l	#OutParam,-(sp)
	move.l	#InParam,-(sp)
	move.w	#$44,-(sp)
	trap	#14
	lea	10(sp),sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
	move.l	#OutParam,-(sp)
	move.l	#InParam,-(sp)
  	XBIOS	Vcreate
  C:		
  	#include	<dolmen.h>
	void	Vcreate (VDO_PARAM *InParam, VDO_PARAM *OutParam);


Vdelete ($45)
-------------

  Efface un mode vido

    L'effacement d'un provoquera un ragencement des modes vido mais pas de 
  leur handle. Par contre, aprs le chargement du fichier VIDEO.DAT, les 
  numros de handle peuvent changer.

  Paramtres:
    Mot: handle du mode  effacer.

  Rponse:
    D0=0 : pas d'erreur.
    D0=-1 : plus de mode  effacer.

  ASM 1: 
	move.w	#Handle,-(sp)
	move.w	#$45,-(sp)
	trap	#14
	addq.l	#4,sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
	move.w	#Handle,-(sp)
  	XBIOS	Vdelete
  C:		
  	#include	<dolmen.h>
	int	Vdelete(int Handle);

Vfirst ($46)
------------

  Recherche du premier mode vido

    Retourne dans le tableau de sortie tout les paramtres sur le premier 
  mode vido trouv utilisable, en partant du dbut de la liste des modes 
  disponibles et correspondant aux paramtres passs en entre.

    Il est possible de dfinir un masque de recherche pouvant agir sur la 
  rsolution physique, virtuelle et le nombre de plan. Le masque entrant 
  marche de la mme faon que pour Vwrite en cherchant la rsolution capable 
  de contenir les paramtres entrants. Le mot de code vido Falcon ainsi que 
  les dlais ne rentrent pas en ligne de compte.

  Paramtres:
    long: tableau pour le masque d'entr
    long: tableau pour la sortie de la recherche du premier mode

  Rponse:
    D0=0 : le tableau est remplie 
    D0=-1 : pas de mode trouv.

  ASM 1: 
	move.l	#Mode,-(sp)
	move.l	#Mask,-(sp)
	move.w	#$46,-(sp)
	trap	#14
	lea	10(sp),sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
	move.l	#Mode,-(sp)
	move.l	#Mask,-(sp)
  	XBIOS	Vfirst
  C:
  	#include	<dolmen.h>
	int	Vfirst(VDO_PARAM *Mask, VDO_PARAM *Mode);


Vnext ($47)
-----------

  Mode vido suivant

    Cette fonction recherche la rsolution qui suit le numro de handle 
  pass en entr. Le plus simple est de remettre le handle rcupr par 
  Vfirst qui sera incrment en interne pour le mode suivant rpondant aux 
  critres.

    Les autres donnes du masque fonctionne aussi ici comme pour Vfirst.

    Pour chercher les modes suivants, il suffit de refaire un Vnext avec 
  comme handle le numro rcupr par le prcdent Vnext jusqu' ce que D0 
  vaille -1 ( plus de mode correspondant  la recherche ).

  Paramtres:
    long: tableau pour le masque d'entr
    long: tableau pour la sortie de la recherche

  Rponse:
    Le tableau est remplie. et D0=0 ou D0=-1 si pas de mode trouv.

  ASM 1: 
	move.l	#Mode,-(sp)
	move.l	#Mask,-(sp)
	move.w	#$47,-(sp)
	trap	#14
	lea	10(sp),sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
	move.l	#Mode,-(sp)
	move.l	#Mask,-(sp)
  	XBIOS	Vnext
  C:		
  	#include	<dolmen.h>
	int	Vnext(VDO_PARAM *Mask, VDO_PARAM *Mode);

Vvalid ($48)
------------

  Valide un mode vido

    Avant de passer une rsolution par Vwrite, il vaut mieux en vrifier 
  l'existance grce  Vvalid. Dans le cas contraire, une nouvelle recherche 
  d'un mode approchant est obligatoire.

    Seul l'effacement d'un mode ou un rechargement du VIDEO.DAT, qui retrie 
  les handles, ncessitent ce test.

  Paramtres:
    Mot: handle du mode  tester.

  Rponse:
    D0=0 si le mode existe toujours.
    D0=-1 le cas contraire.

  ASM 1: 
	move.w	#Handle,-(sp)
	move.w	#$48,-(sp)
	trap	#14
	addq.l	#4,sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
	move.w	#Handle,-(sp)
  	XBIOS	Vvalid
  C:
  	#include	<dolmen.h>
	int	Vvalid(int Handle);

Vload ($49)
-----------

  Charge VIDEO.DAT

    Le fichier VIDEO.DAT est situ dans le chemin de dmarrage du systme. 
  Seul le fichier se nommant VIDEO.DAT est chargeable: ainsi, pour prendre en 
  compte un nouveau fichier .DAT, il suffit de le copier dans le chemin de 
  dmarrage et de le renommer en VIDEO.DAT.

  Le chargement du VIDEO.DAT provoque le tri des handles.

  Paramtres:
    Aucun

  Rponse:
    D0=0 : pas d'erreur.
    D0=-1 : fichier introuvable.

  ASM 1: 
	move.w	#$49,-(sp)
	trap	#14
	addq.l	#2,sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
  	XBIOS	Vload
  C:
  	#include	<dolmen.h>
	int	Vload(void);

Vsave ($4a)
-----------

  Sauve les modes vido

    La sauvegarde se fait uniquement dans le fichier VIDEO.DAT qui se trouve 
  dans le chemin de dmarrage du systme. Si ce fichier n'existe pas, un 
  nouveau sera cr.

  Paramtres:
    Aucun

  Rponse:
    D0=0 : pas d'erreur.
    D0=-1 : suavegarde impossible.

  ASM 1: 
	move.w	#$4a,-(sp)
	trap	#14
	addq.l	#2,sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
  	XBIOS	Vsave
  C:
  	#include	<dolmen.h>
	int	Vsave(void);

Vopen ($4b)
-----------

  Rveille l'cran

    Permet d'allumer l'cran si l'conomiseur est en route. Cette 
  fonctionnalit peut tre utile pour prevenir l'utilisateur qu'une opration 
  est termine.

  Paramtres:
    Aucun

  Rponse:
    D0=0 : pas d'erreur.
    D0=-1 : improbable.

  ASM 1: 
	move.w	#$4b,-(sp)
	trap	#14
	addq.l	#2,sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
  	XBIOS	Vopen
  C:
  	#include	<dolmen.h>
	int	Vopen(void);

Vclose ($4c)
------------

  Eteint l'cran

    Permet d'teindre l'cran si le mode de veille est en route. Cette 
  fonctionnalit peut tre utile pour automatiser la mise veille (les crans 
  vous remercierons et le temps machine libr aussi).

  Paramtres:
    Aucun

  Rponse:
    D0=0 : pas d'erreur.
    D0=-1 : improbable.

  ASM 1: 
	move.w	#$4c,-(sp)
	trap	#14
	addq.l	#2,sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
  	XBIOS	Vclose
  C:
  	#include	<dolmen.h>
	int	Vclose(void);

Vscroll ($4d)
-------------

  Fixe la mthode de scrolling

    Cette fonction configure la mthode de scrolling de l'cran par rapport 
  au curseur.

  Paramtres:
    Mot: nouvelle mthode  employer

           0: scrolling par dbordement (mode par dfaut)
           1: scrolling diffrentiel
           2: scrolling intgral

  Rponse:
    D0 contient l'ancienne mthode.

  ASM 1: 
	move.w	#ScrollMode,-(sp)
	move.w	#$4d,-(sp)
	trap	#14
	addq.l	#4,sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
	move.w	#ScrollMode,-(sp)
  	XBIOS	Vscroll
  C:
  	#include	<dolmen.h>
	int	Vscroll(int ScrollMode);


Voffset ($4e)
-------------

  Position de l'cran virtuel

  Cette fonction retourne a position de l'cran virtuel.

  Paramtres:
    Aucun

  Rponse:
    D0 contient l'ancienne position avec dans le poids fort du long 
  l'abscisse et dans le poids faible l'ordonne.


  ASM 1: 
	move.w	#$4e,-(sp)
	trap	#14
	addq.l	#2,sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
  	XBIOS	Voffset
  C:
  	#include	<dolmen.h>
	int	Voffset(void);

Vseek ($4f)
-----------

  Positionne l'cran virtuel

    Cette fonction permet de positionner l'cran virtuel . Marche aussi si 
  aucun mode virtuel est pass: les modifications n'auront pas lieu et la 
  valeur retourne sera toujours nulle.

  Paramtres:
    mot: position en x du coin en haut  gauche
    mot: position en y du coin en haut  gauche

  Rponse:
    D0 contient l'ancienne position avec dans le poids fort du long 
  l'abscisse et dans le poids faible l'ordonne.


  ASM 1: 
	move.w	#$4f,-(sp)
	trap	#14
	addq.l	#2,sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
  	XBIOS	Vseek
  C:
  	#include	<dolmen.h>
  	VPOS	result;
    	*(long *)&result = Vseek(10, 10);
	
	VPOS	Voffset(void);

Vlock ($50)
-----------

  Bloque l'cran virtuel

    Cette fonction permet d'interdire le dplacement de l'cran virtuel
  par la souris.

  Paramtres:
    mot: commande
         0: la souris peut dplacer l'cran virtuel
         1: la souris n'agit plus sur l'cran virtuel

  Rponse:
    D0 contient l'ancienne configuration.

  ASM 1: 
	move.w	#Cmd,-(sp)
	move.w	#$50,-(sp)
	trap	#14
	addq.l	#4,sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
	move.w	#Cmd,-(sp)
  	XBIOS	Vlock
  C:
  	#include	<dolmen.h>
	int	Vlock(int Cmd);

SetMon ($51)
------------

  Modifie le type de moniteur

    Cette fonction permet de basculer entre un moniteur RVB et VGA. C'est 
  possible uniquement si le systme est configur en multisynchro par la 
  fonction MultiMon.

  Paramtres:
    Mot: nouveau type d'cran
           0: SM124 ( cran prhistorique du ST )
           1: RGB ( moniteur type tl, idal pour rendre aveugle... )
           2: VGA ( un vrai moniteur pour tout faire! )
           3: TV ( RGB en pire, dont tout utilisateur est dj aveugle... )

  Rponse:
    Le type d'cran prcdent dans D0.

  ASM 1: 
	move.w	#MonType,-(sp)
	move.w	#$51,-(sp)
	trap	#14
	addq.l	#4,sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
	move.w	#MonType,-(sp)
  	XBIOS	SetMon

  C:
  	#include	<dolmen.h>
	int	SetMon(int MontType);

MultiMon ($52)
--------------

  Mode multisynchro

    C'est cette fonction qui permet d'autoriser le passage RGB<->VGA.

  Paramtres:
    Mot:
        0 : interdit les changements.
        >0 : autorise le passage.
        -1: retourne le mode de fonctionnement actuel

  Rponse:
    Le mode prcdent de fonctionnement.

  ASM 1: 
	move.w	#Cmd,-(sp)
	move.w	#$52,-(sp)
	trap	#14
	addq.l	#4,sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
	move.w	#Cmd,-(sp)
  	XBIOS	MultiMon

  C:
  	#include	<dolmen.h>
	int	MultiMon(int Cmd);

SizeComp ($53)
--------------

  Compatibilit de Vgetsize

    Grce  cette fonction, on autorise des logiciels rcalcitrant  tout 
  conseil pour fonctionner sous Dolmen.

  Paramtres:
    Mot:
        0 : interdit les changements.
        >0 : autorise le passage.
        -1: retourne le mode de fonctionnement actuel

  Rponse:
    Le mode prcdent de fonctionnement.

  ASM 1: 
	move.w	#$53,-(sp)
	trap	#14
	addq.l	#2,sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
  	XBIOS	VSizeComp
  C:
  	#include	<dolmen.h>
	int	VSizeComp(void);

Vsize ($54)
-----------

  Retourne la taille de l'cran

    Cette fonction permet de connatre la taille d'un cran suivant les
  paramtres passs dans le tableau entrant.
  
    Si -1 est pass comme paramtre pour l'handle, c'est le mode courant
  qui sera pris en compte et comme rfrence.
  
    La fonction ne prends dans les paramtres que la taille logique (sauf
  si -1) et le flag virtuel dans le mot de code vido (sauf si -1).

  Paramtres:
    Long: paramtre entrant

  Rponse:
    D0 contient la taille du mode vido entrant.
    0 en cas d'erreur (mauvais paramtres ?!)

  ASM 1: 
	move.l	#Mode,-(sp)
	move.w	#$53,-(sp)
	trap	#14
	addq.l	#6,sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
  	pea	Mode
  	XBIOS	Vsize
  C:
  	A faire...
  	

Vsetmode ($58)
--------------

  Fixe la nouvelle rsolution

    Si le bit 15 du mode vido est mis, la fonction tente de passer une 
  rsolution tendue.

  Paramtres:
    Mode (mot): La valeur -1 pour connatre le mode courant ou la valeur du 
                nouveau mode (mot)
  Rponse:
    D0 (mot): Mode actuel ou l'ancien si le mode  chang (mot)

  ASM 1: 
	move.w	#ModeVideo,-(sp)
	move.w	#$58,-(sp)
	trap	#14
	addq.l	#4,sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
	move.w	#ModeVideo,-(sp)
  	XBIOS	Vsetmode
  C:
  	#include	<tos.h>


Montype ($59)
-------------

  Demande quel type d'cran est connect

  Paramtres:
    Aucun
    
  Rponse:
    D0 (mot):
             0 -> Moniteur monochrome ST
             1 -> Moniteur couleur ST
             2 -> Moniteur VGA
             3 -> Television

  ASM 1: 
	move.w	#$59,-(sp)
	trap	#14
	addq.l	#2,sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
  	XBIOS	MonType

  C:
  	#include	<tos.h>

VsetSync ($5a)
--------------

  Fixe le mode de synchronisation vido

    Permet de valider ou non l'injection d'une horloge externe sur le Videl. 
  La synchronisation permet, elle, de mettre en phase l'affichage de Videl 
  avec une image sur laquelle on s'incruste (Genlocking).

    Cette fonction ne marche que sur RGB car pour passer sur une horloge 
  externe, il faut que la master clock du Videl soit sur 32 MHz ( ou 50 
  MHz ), sinon on a plus de Videl ! Et donc plus de VBL, ce qui plante pas 
  mal de logiciel ...

  Paramtres:
    External (mot): xxxx xxxx xxxx xHVC
                    x rserv ( 0)
                    H: synchronisation horizontale externe
                    V: idem en verticale
                    C: horloge externe

  Rponse:
    D0=0 : pas d'erreur.
    D0=-1 : improbable.

  ASM 1: 
	move.w	#Sync,-(sp)
	move.w	#$5a,-(sp)
	trap	#14
	addq.l	#4,sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
	move.w	#Sync,-(sp)
  	XBIOS	VsetSync
  C:
  	#include	<tos.h>

VgetSize ($5b)
--------------

  Retourne la taille d'un cran pour un type de mode vido
  
    Ncessaire pour connatre l'encombrement en mmoire que peut prendre un 
  nouveau mode.

    Cette fonction tient compte des modes tendus en mettant le bit 15  1. 
  Le flag size_comp ( compatibilit dans le menu vido ), fait que Vgetsize 
  retourne la taille de l'cran par dfaut actif ( tendue ou non! ).

  Paramtres:
    mode vido (mot)

  Rponse:
    D0 (long): La taille de l'cran en octets (long)

  ASM 1: 
	move.w	#$5b,-(sp)
	trap	#14
	addq.l	#2,sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
  	XBIOS	VgetSize

  C:
  	#include	<tos.h>

VmodeValid ($5f)
----------------

  Valide un mot de code vido

    Cette fonction cache du TOS, permet de valider un mode vido d'aprs le 
  type de moniteur connect.

    Les bits tendus ne sont bien sr pas effacs.

  Paramtres:
    Mot: mot de code vido

  Rponse:
    D0 contient le nouveau mot de code vido passable.

  ASM 1: 
	move.w	#$5f,-(sp)
	trap	#14
	addq.l	#2,sp
       
  ASM 2:
  	include	XBIOS.EQU
  	
  	XBIOS	VmodeValid

  C:
  	#include	<tos.h>

                *--------Fin des fonctions----------*

*-------------------------------------------------------------------------*
*		STRUCTURE DU XBIOS VIDEO
*-------------------------------------------------------------------------*

		*----------*
		* Structure des paramtres du cookie "_VID"

		* le dbut est un descriptif gnral que l'on
		* retrouve dans tout les modules de Dolmen
		
		RSRESET

sys_id		rs.l	1	;nom de la librairie ou un numro
				; ex: "_VID"
sys_ver		rs.l	1	;version de la librairie
				; ex: 1.0.1 ($101)
sys_date		rs.l	1	;date de la librairie
				; ex: $01061997(01/06/1997)
sys_version	rs.l	1	;pointeur sur un texte de 4 lignes
				;de 40 caractres. Un CR+LF termine
				;chaque ligne. Le texte est termin
				;par un 0.

sys_install	rs.l	1	;routine d'installation du driver

sys_open		rs.l	1	;routine appel pour  chaque ouverture
				;d'une station
sys_close		rs.l	1	;... la fermeture
				
sys_extend	rs.l	1	; partir d'ici sont les params
				;spcifiques au driver

		*----------*
		RSSET	sys_extend

vid_maj_vars	rs.l	1	;pointeur sur les variables principales
vid_cur_vars	rs.l	1	;pointeur sur les variables courantes

vid_shut_down	rs.l	1	;routine d'extinction
vid_wake_up	rs.l	1	;routine de reveil

		*----------*

*-------------------------------------------------------------------------*

		*----------*
		* Structure des paramtres du cookie "CNTS"

		RSRESET

cnts_name		rs.l	1	;nom du cookie
cnts_version	rs.l	1	;numro de la version 
				; ex: 1.0.1 ($101)
cnts_kbd_on	rs.b	1	;flag activant le reveil au clavier
cnts_midi_on	rs.b	1	;idem pour le midi
cnts_mouse_on	rs.b	1	;idem pour la souris
cnts_joy_on	rs.b	1	;idem_pour les joysticks
cnts_tst_eco	rs.b	1	;combinaison de touches pour activer
				;l'conomiseur
cnts_turbo_on	rs.b	1	;valide le turbo de la souris

*-------------------------------------------------------------------------*

		*-------------*
		* VARIABLES COURANTES
		*-------------*

		RSRESET

vid_BUG_DAT	rs.b	1	;erreur de chargement du DAT
vid_new_dat	rs.b	1	;indique si cfg_param pointe sur
				; un mode video amlior
vid_OK_VBL	rs.b	1	;valide la VBL
vid_OK_TIMERC	rs.b	1	;valide le TIMERC

vid_monitor	rs.w	1	;type de moniteur connect
vid_pal		rs.w	1	;flag pal/ntsc
vid_xbios_mode	rs.w	1	;mode vido systme (sans params tendus)
vid_cur_mode	rs.w	1	;mode vido courant

vid_multisync	rs.b	1	;autorise le changement de type d'cran
vid_size_comp	rs.b	1	;flag de compatibilit: renvoie
				; la taille de l'cran par dfaut
				; au lieu d'attendre un mode code
				; tendu (bit 15 uniquement)

vid_vdi_chg	rs.b	1	;flag indiquant que la VDI doit etre
				; initialise
vid_col_chg	rs.b	1	;flag pour le changement de palette
vid_palst		rs.b	1	;flag indiquant que l'on est en pal st
		
vid_BIG_FLAG	rs.b	1	;flag indiquant le mode virtuel
vid_SCROLL	rs.b	1	;il faut scroler...
vid_newpos	rs.b	1	;nouvelle coordonne  prendre en compte
vid_freeze	rs.b	1	;interdit  la souris d'agir sur l'cran
				;virtuel
		rs.b	1	;rserv
vid_scroll_mth	rs.w	1	;methode de scrolling de 0  2

vid_ECO_FLAG	rs.b	1	;mode ECO actif
		rs.b	1	

vid_NIGHT_FLAG	rs.b	1	;flag indiquant que l'cran est teint
vid_ENERGY_FLAG	rs.b	1	;ENERGY STAR actif
vid_eco2_extinction	rs.b	1	;passage vers le mode energy star
vid_eco2_night_flag	rs.b	1	;cran teint sous energy star

vid_eco_delay	rs.l	1	;dure de l'ECO en 50 de seconde
vid_eco2_delay	rs.l	1	;dlai avant le passage
vid_eco_counter	rs.l	1	;compteur ECO 

*-------------------------------------------------------------------------*

		*-------------*
		* VARIABLES PRINCIPALES
		*-------------*

		RSRESET

vid_dat_adr	rs.l	1	;adresse de chargement du DAT
vid_dat_len	rs.l	1	;taille du DAT
vid_dat_len_MAX	rs.l	1	;taille maximum que le DAT pourra
				; occuper avant de redmarrer
vid_cfg_adr	rs.l	1	;pointeur sur la liste des rsols
max_handle	rs.w	1	;nombre maxi de handle

		*-------------*

vid_cfg_param	rs.l	1	;pointeur sur le mode en cours (0 sinon)

vid_screen_param	rs.l	1	;pointeur sur les params cran
vid_videl_param	rs.l	1	;pointeur sur les params VIDEL

vid_phys_adr	rs.l	1	;adresse physique
vid_log_adr	rs.l	1	:adresse logique

		*-------------*
		
vid_handle	rs.w	1	;handle du mode vido

vid_phys_w	rs.w	1	;largeur phys
vid_phys_h	rs.w	1	;hauteur phys
vid_plan		rs.w	1	;nb de plan
vid_log_w		rs.w	1	;largeur virtuelle (valeur effective)
vid_log_h		rs.w	1	;hauteur virtuelle (valeur effective)

vid_scrn_size	rs.l	1	;taille de l'cran en cours
		
		*-------------*
		* pour l'cran virtuel ...

vid_newx		rs.w	1	;nouveau x
vid_newy		rs.w	1	;nouveau y

		*-------------*

*-------------------------------------------------------------------------*

		*-------------*
		* Description du nouveau fichier .DAT
		*  pour les modes tendus
		*-------------*
		* Les modes sont reprs par une table de pointeur
		* pour les rfrencer par handle
		*-------------*

		* Adresses hardware
		
_HHT		EQU	$FFFF8282
_HBB		EQU	$FFFF8284
_HBE		EQU	$FFFF8286
_HDB		EQU	$FFFF8288
_HDE		EQU	$FFFF828A
_HSS		EQU	$FFFF828C
_HFS		EQU	$FFFF828E
_HEE		EQU	$FFFF8290

_VFT		EQU	$FFFF82A2
_VBB		EQU	$FFFF82A4
_VBE		EQU	$FFFF82A6
_VDB		EQU	$FFFF82A8
_VDE		EQU	$FFFF82AA
_VSS		EQU	$FFFF82AC

_VCO		EQU	$FFFF82C0
_VMODE		EQU	$FFFF82C2

_SYNC		EQU	$FFFF820A
_OFFSET		EQU	$FFFF820E
_VWRAP		EQU	$FFFF8210

_SHIFT		EQU	$FFFF8260
_SPSHIFT		EQU	$ffff8266

		* numro des bits du mot de code vido
		
flag_80c		EQU	3
flag_vga		EQU	4
flag_pal		EQU	5
flag_over		EQU	6
flag_st		EQU	7
flag_vert		EQU	8
flag_eco2		EQU	9
flag_eco		EQU	10
flag_virt		EQU	11
flag_extclk	EQU	12
flag_ext		EQU	13
flag_std		EQU	14
flag_set		EQU	15

		* masques pour oprations logiques
			;FSOPV8NNN
_cols		equ	%000000111
_80c		equ	%000001000
_vga		equ	%000010000
_pal		equ	%000100000
_over		equ	%001000000
_st		equ	%010000000
_vert		equ	%100000000
_eco2		equ	%1000000000
_eco		equ	%10000000000
_virt		equ	%100000000000
_extclk		equ	%1000000000000
_ext		equ	%10000000000000
_std		equ	%100000000000000
_set		equ	%1000000000000000

			;FSOPV8NNN
_setmod		equ	%110111111
_setvga		equ	%110011111
_setrgb		equ	%110101111
_setext		equ	$fe00
_setopt		equ	_set+_eco+_eco2+_virt

		*-------------*
		* struture du DAT
		*-------------*
		* C'est la description du format 1.xx
		* Entre chaque version du VIDEO.DAT, les nouveaux
		* paramtres seront rajout  la fin (donc derrire
		* le texte).
		* On passera  une version 2.xx quand un certain nombre
		* de modifications le ncessiteront.

		*-------------*
		* header 1.00
		
		RSRESET
dat_id		rs.l	1	;nom du fichier "VDAT"

dat_ver		rs.w	1	;version du format
dat_head		rs.w	1	;offset jusqu'au premier mode
				;cette offset pourra changer de
				; valeur et valoir plus ou moins
				; suivant les versions

dat_multisync	rs.b	1	;utilisation d'un moniteur multisynchro
				;pour passer du TV au VGA et vice-versa
dat_size_comp	rs.b	1	;flag de compatibilit: renvoie
				; la taille de l'cran par dfaut
				; au lieu d'attendre un mode code
				; tendu (bit 15 uniquement)
dat_scroll	rs.b	1	;mthode de scrolling (3 mthodes)
dat_kbd_on	rs.b	1	;flag activant le reveil au clavier
dat_midi_on	rs.b	1	;idem pour le midi
dat_mouse_on	rs.b	1	;idem pour la souris
dat_joy_on	rs.b	1	;idem_pour les joysticks
dat_tst_eco	rs.b	1	;combinaison de touches pour activer
				;l'conomiseur
dat_turbo_on	rs.b	1	;valide le turbo de la souris

		rs.b	1	;rserv
		
dat_modes		rs.l	0	;ici commence les modes vido

		RSRESET
dat_offset	rs.w	1	;offset au prochain mode
dat_datas		rs.l	0	;datas du modes vido

		*-------------*
		* Description d'un mode vido 1.00
		*-------------*
		
		RSRESET
dat_mode		rs.w	1	;mode code xxxx xxxF SOPV 8NNN
				; STANDARD:
				; bit 0  2: NNN (nombre de plan)
				;	0->monochrome
				;	1-> 2 plans
				;	2-> 4 plans
				;	3-> 8 plans
				;	4-> 16 plans (Near True Color)
				; bit 3: Flag 80 colonnes (8)
				; bit 4: Flag VGA (V)
				; bit 5: Flag Pal (P)
				; bit 6: Flag overscan (O)
				; bit 7: Flag ST compatible (S)
				; bit 8: Flag Vertical (F)
				; ETENDU:
				; bit 9: mode energy star actif ou non
				; bit 10: conomiseur actif ou non
				; bit 11: cran virtuel actif ou non
				; bit 12: horloge externe 32/36MHz (CT2)
				; bit 13: validation de l'horloge externe
				; bit 14: rsolution standard
				;	(non effacable mais modifiable)
				; bit 15: mode vido par dfaut

dat_physx		rs.w	1	;rsolution x relle
dat_physy		rs.w	1	;rsolution y relle
dat_plan		rs.w	1	;nombre de plan
dat_logx		rs.w	1	;rsolution x virtuelle
dat_logy		rs.w	1	;rsolution y virtuelle

dat_eco_delay	rs.w	1	;temps en seconde de l'conomiseur
dat_eco2_delay	rs.w	1	;temps en seconde du retard avant
				;l'Energy Star
		* registres VIDEL
		*  ordre imperatif pour SPSHIFT,SHIFT et VMODE
dat_videl		rs.l	0
dat_SPSHIFT	rs.w	1	;...
dat_shift_write	rs.b	1	;valide l'criture dans SHIFT
dat_SHIFT		rs.b	1	;... : uniquement en 2 plans(4 couleurs)!!!!
				; et ST Basse
dat_VCO		rs.w	1	;...
dat_VMODE		rs.w	1	;...
dat_Hxx		rs.w	8	;...
dat_Vxx		rs.w	6	;...
dat_name		rs.b	33	;commentaire de taille variable
				; termin par un 0 et align sur
				; un mot  la fin pour le mode suivant.
				;max 32 charactres+1 null pour la fin
		rs.b	1	;rserv (arrondie)
dat_maxlength	rs.l	0	;taille maxi d'un mode vido

		*-------------*


*-------------------------------------------------------------------------*

		*-------------------*
		* Structure des paramtres utiliss dans les fonctions
		* Xbios Vcreate et Vread.
		*-------------------*
		
		RSRESET
		
V_Hdl		rs.w	1	;handle du mode vido
V_mode		rs.w	1	;mode vido Falcon

V_physx		rs.w	1	;largeur physique
V_physy		rs.w	1	;hauteur physique
V_plan		rs.w	1	;nombre de plan
V_logx		rs.w	1	;largeur virtuelle
V_logy		rs.w	1	;hauteur virtuelle
v_eco		rs.w	1	;dlai de l'conomiseur
v_eco2		rs.w	1	;dlai pour l'energy star
V_name		rs.b	33	;nom du mode: texte=32+1nul
		rs.b	1	;rserv (arrondie)
V_length		rs.l	0	;taille du buffer

*-------------------------------------------------------------------------*


                      *----------FIN----------*
