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.
|