Site

. Les News
. Le Forum
. L'équipe et les projets
. Les Tutoriaux
. IRC
. La boite à outils
. Les routines et algos indispensables
. Les liens


Les News de TI-FR







 

 



FAT-VAT

La VAT (variable allocation table) et la FAT (folder allocation table) sont une seule et unique table qui liste les variables et dossiers de votre calculatrice.Nous la décrirons en quatre parties:

1) La table des dossiers

Pour toutes les ROMs actuelles, cette table des dossiers est associée à l'handle #$0B.
Donc quand on fait:  moveq.w #$B,d0
                              tios::DEREF d0,a0

On obtient dans a0 l'adresse de la table des dossiers; Elle a le format suivant:
  0(a0).w = nombre maximum de dossiers avant une modification de taille du handle #$B
     2(a0).w = nombre actuel de dossiers
  Et on a toujours: 2(a0).w <= 0(a0).w (inferieur ou egal) 

Apres ce petit en-tête, nous avons la liste, composée des noms des dossiers, de leur état, et de leur liste de variables associées:
  Avec    addq.l #4,a0
  On obtient l'adresse du debut de la lliste dans a0, dont le format et le suivant:
     0(a0) to 7(a0): le nom du dossier (max: 8 caracteres)
     8(a0).b : une fin de chaine de caractere (nul)
     9(a0).b : le byte(octet) de statut
     10(a0).w : l'handle de la table de variables associée

Voici un exemple en hexadecimal:

00 0A 00 03 64 6F 63 73  ....docs   -> nb dossiers max=$000A=10; nb dossiers actuels=$0003=3
00 00 00 00 00 80 00 2E   ........      -> handle du dossier 'docs' = $002E 
67 61 6D 65 73 00 00 00  games...
00 80 00 2F 6D 61 69 6E  ....main
00 00 00 00 00 80 00 0C   ........

Le byte d'etat à le format suivant:
     <76543210>:  7 est toujours activé pour un dossier
                           4 est activé si le dossier est caché
                           3 est activé quand le dossier est protégé (locked)

 Par exemple, on peut avoir:
  6D 61 69 6E 00 00 00 00                00                    80                 00 0C
      nom= "main"                       caract. nul      byte de statut        handle
Donc le nom du dossier est 'main', il n'est pas protégé, pas caché et son handle est#$C(en fait pour le dossier 'main' c'est toujours #$C) 

2) Les tables des variables

Elles sont pratiquement les même que la table des dossiers: elles ont le meme en-tête, le mêmeformat de liste..La seule chose qui change et le byte de statut: le bit 7 n'est jamais activé pour une variable

On peut par exemple avoir:
  66 69 6C 65 6C 69 62 00             00                        00              00 16
          nom="filelib"               caract. nul          byte de statut       handle

Donc le nom de la variable est 'filelib', elle n'est pas protégée, pas cachée et son handle est#$16

3) Quelques caracteristiques des variables

Si on a l'handle de la variable dans d0, on peut faire: 
     tios::DEREF d0,a0

Et on obtient l'adresse du contenu de la variale dans a0, toutes les variables ont le même format:
     0(a0).w = taille de la variable   Mais ce n'est pas la vraie taille de la variable: on doit lui rajouter #2 

 Et on peut faire:
      move.w (a0),d1 et on a:

     1(a0,d1.w) = le byte de type de catte variable qui peut etre un de ceux-ci:

$DC -> PRGM ou FUNC
$D9 -> MAT ou LIST
$E0 -> TEXT 
$2D -> STR 
$DD -> DATA 
$E1 -> FIG 
$DF -> PIC 
$DE -> GDB 
$E2 -> MACR 
toutes les autres valeurs -> EXPR

A)Pour distinguer les variables PRGM et FUNC: 
     cmp.b #$19,-5(a0,d1.w)

 Si -5(a0,di.w)ne vaut pas #$19, alors la variable est de type FUNC, sinon elle est de type PRGM.

Maintenant, on va vouloir distinguer les programmes FARGO de ceux en Ti-BASIC, faisons:
     cmp.l         #$4150504C,8(a0)   ;comparer avec "APPL"
  beq \Fargo II prog
  cmp.l         #$00503130,2(a0)    ;comparer avec "P10"
  beq \Fargo I prog
  cmp.l         #$444C4C20,8(a0)   ;comparer avec "DLL "
  beq \Fargo II library
  cmp.l         #$004C3130,2(a0)    ;comparer avec "L10"
  beq \Fargo I library

B)Pour distinguer les variables MAT et LIST:
     cmp.b  #$D9,0(a0,d1.w)

 Si 0(a0,d1.w) vaut #$D9, alors la variable est de type MAT, sinon elle est de type LIST

4) Quelques autres formats de variables:

A)TEXT variables

 Supposons que l'on ait l'handle d'yune variable TEXT dans a0, avec:
      tios::DEREF    d0,a0        on obtient l'adresse de cette variable dans a0

 A partir de là, on a le format suivant:
    (a0).w  = Taille(-2) de la variable
    2(a0).w  = position du curseur dans l'editeur du Tios ou dans XeTal
    de 4(a0).w à la fin = le texte qui à le format suivant:
     #13 = retour à la ligne
     #20 = début d'une ligne (il est situé au tout debut du texte ou toujours suivant #13)
     #0 = fin du texte
      A la fin d'une variable TEXT, on a #$E0, qui nous dit que c'est une variable TEXT.

B)variables PIC
 Si l'adresse de la variable est dans a0, on a:
   (a0).w = taille(-2) de la variable
   2(a0).w = hauteur de l'image
   4(a0).w = largeur de l'image
  de 4(a0).w à la fin = l'image
   Si un bit est activé, le pixel est allumé, sinon il est éteint.
  A la fin d'une variable PIC, on a #$DF, qui nous dit que c'est une variable PIC.

C)variables STRING
 Si l'adresse de la variable est dans a0, on a:
     (a0).w= taile(-2) de la variable
    2(a0).b = un caractère nul (#0)
    de 3(a0).b à la fin= la chaine qui se termine par un caractère nul (#0)
  A la fin d'une variable PIC, on a #$2D, qui nous dit que c'est une variable PIC.
 




©Tous les programmes presents sur ce site sont soumis à l'autorisation de leur programmeurs respectifs pour toutes modifications. La mise en page a necessité un certain travail, il serait donc plus correct de ne pas la plagier.