Table
d'allocation de
dossier / variable
Fonction Introduction
Fonction Table d'allocation de dossier
Fonction Tables d'allocation de variable
Fonction Formats des variables en RAM
Fonction Extensions

Page précédente



 

Monter Descendre Retour Introduction
puce Dans la manipulation des variables (fichiers), il convient de différencier deux parties fondamentalement différentes bien que complémentaires :
    puce La variable elle-même contenue dans un bloc mémoire, celui-ci contient son type, sa taille et les données.

    puce Son référencement dans la table d'allocation de variable (Variable Allocation Table), ceci est vital car il permet de retrouver son emplacement exacte dans la mémoire et donne son attribut (variable protégée, cachée...).

puce Il n'y a pas qu'une table d'allocation de variable étant donné que la TI-92 utilise un système de dossiers, eux-mêmes référencés dans une table d'allocation de dossier (Folder Allocation Table), celui-ci est très simple car il n'y a qu'un niveau de dossiers. A chaque dossier est donc associé une table d'allocation de variable.




 

Monter Descendre Retour Table d'allocation de dossier
puce La table d'allocation de dossier est contenue dans un bloc mémoire, son numéro est défini par la variable FOLDER_LIST_HANDLE de la bibliothèque TIOS et a pour numéro $0B sur TI-92 et TI-92II.

Pour connaître son pointeur associé, utilisez la macro tios::DEREF de la bibliothèque TIOS.

PROGRAMMATION
tios::DEREF FOLDER_LIST_HANDLE,A0 ; le pointeur est dans le registre A0

puce Voici une capture d'écran du logiciel Hexview 2.5 de Benoît Scherrer, celle-ci montre une partie de la table d'allocation de dossier que nous allons utiliser comme exemple (à droite l'équivalent avec le Var-Link) :

puce puce

puce Notez que le dossier zguide est représenté plusieurs fois, j'ai créé des dossiers qui le précédaient dans la FAT, ils ont ensuite été détruits mais la mémoire n'est pas initialisée quand le bloc mémoire est redimmensionné (le dossier Zguide recule donc dans la mémoire à chaque fois en laissant son ancienne place intacte).

puce Cette table commencera toujours par un mot contenant le nombre de dossiers maximum avant de devoir redimensionner la table d'allocation de dossier.

Le TIOS rajoute 10 à ce maximum quand il est dépassé, respectez cette convention !

Etant donné qu'un dossier est défini par 12 octets, il suffit d'augmenter ou de réduire la taille du bloc mémoire de 120 octets à chaque que le maximum est dépassé ou que le maximum inférieur (il y a moins de dossier que le maximum-10) est atteint.

puce Ensuite nous avons un mot contenant le nombre total de dossiers dans la TI-92 (y compris main).
puce Comme je viens de vous l'expliquer, le reste de la table est constituée de paquets de 12 octets, chacun représentant un dossier. Voici la structure d'un dossier avec $00 comme départ :

$00 à $07nom du dossier, terminé par un caractère nul s'il est inférieur à 8 caractères.
$08octet devant être un caractère nul mais la plupart du temps il prend la valeur $08 !
$09octet contenant le numéro d'attribut du dossier,le bit 7 est armé pour un dossier
le bit 4 armé cache le dossier
le bit 3 armé vérouille le dossier.
$0Amot dont la valeur est l'handle de la table d'allocation de variable du dossier.

puce La formule pour accéder au départ de la structure d'un dossier a partir du départ de la table d'allocation de dossier est :
<départ de la table> + #4 + #12*<dossier n°>





 

Monter Descendre Retour Tables d'allocation de variable
puce Les tables d'allocation de variable (une par dossier) sont contenues dans des blocs mémoire, pointés par des handles dont le numéro est défini dans la structure du dossier associé (elle-même contenue dans la table d'allocation de dossier).
Pour connaître son pointeur associé, utilisez la macro tios::DEREF de la bibliothèque TIOS.

PROGRAMMATION
MOVE.l $00E764,D0 ; l'adresse où est l'handle est maintenant dans le registre D0
tios::DEREF D0,A0 ; le pointeur de l'handle à l'adresse $E764 est maintenant dans le registre A0

puce Voici une capture d'écran du logiciel Hexview, celle-ci montre une partie de la table d'allocation de variable du dossier main que nous allons utiliser comme exemple :

puce puce

puce Cette table commencera toujours par un mot contenant le nombre de variables maximum avant de devoir redimensionner la table d'allocation de variable.

Le TIOS rajoute 10 à ce maximum quand il est dépassé, respectez cette convention !

Etant donné qu'une variable est définie par 12 octets, il suffit d'augmenter ou de réduire la taille du bloc mémoire de 120 octets à chaque que le maximum est dépassé ou que le maximum inférieur (il y a moins de variables que le maximum-10) est atteint.

puce Ensuite nous avons un mot contenant le nombre total de variables dans le dossier.

puce Comme je viens de vous l'expliquer, le reste de la table est constituée de paquets de 12 octets, chacun représentant un dossier. Voici la structure d'une variable avec $00 comme départ :

$00 à $07nom de la variable, terminé par un caractère nul s'il est inférieur à 8 caractères.
$08octet devant être un caractère nul mais la plupart du temps il prend la valeur $08 !
$09octet contenant le numéro d'attribut de la variable,le bit 4 armé cache la variable
le bit 3 armé vérouille la variable.
$0Amot dont la valeur est l'handle de la variable elle-même.

puce La formule pour accéder au départ de la structure d'une variable est :
<départ de la table> + #4 + #12*<variable n°>

PROGRAMMATION
tios::DEREF D0,A0 ; l'adresse de la variable associée à l'handle dans D0 est dans A0
ADDA.w #4,A0 ; saute le premier double mot
MOVE.l #12,D2 ; on doit faire des sauts de 12 pour chaque variable
MULU D2,D1 ; multiplie la variable n° ? dans D1 par 12 dans D2, le tout dans D1
ADDA D1,A0 ; on ajoute le résultat pour pointer à la variable n° ?





 

Monter Descendre Retour Formats des variables en RAM
puce La dernière étape, après avoir récolté toutes les informations sur les dossiers (noms, attributs et adresses) et la plupart d'entre elles pour les variables (noms, attributs et adresses) est de trouver celles restantes, c'est à dire la taille est le type.

puce Voici une capture d'écran du logiciel Hexview montrant une variable au hasard, nous allons l'utiliser comme exemple :
BLABLA

puce Voici la structure d'une variable quelle qu'il soit :
$00 à $01mot dont la valeur est la taille de la variable -2 octets.
$02 à $02+$nsection de données.
$n à $n+$01octet dont la valeur est le type de la variable.

puce La formule pour connaître le type est :
<départ de la variable>+<taille>

PROGRAMMATION
tios::DEREF D0,A0 ; l'adresse de la variable associée à l'handle dans D0 est dans A0
ADDA.w (A0),A0 ; ajoute la taille de la variable à l'adresse initiale
MOVE.b (A0),D0 ; le premier octet de D0 contient le type de la variable





 

Monter Retour Extensions
puce L'assembleur permet tout, des programmeurs comme Benoit Scherrer ont par exemple trouvés la possibilité de cacher les variables ainsi que les dossiers au Var-Link.




 

 

Lisez la section sur les droits d'auteur et la license d'utilisation avant de distribuer Zguide.

Zguide © 1998, Florian DREVET. Tous droits réservés à l'échelle mondiale