![]() ![]() ![]() |
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...).
![]() ![]() ![]() |
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
![]() |
![]() |
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.
Ensuite nous avons un mot contenant le nombre total de dossiers dans la TI-92 (y compris main).
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 à $07 | nom du dossier, terminé par un caractère nul s'il est inférieur à 8 caractères. | |
$08 | octet devant être un caractère nul mais la plupart du temps il prend la valeur $08 ! | |
$09 | octet 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. | ||
$0A | mot dont la valeur est l'handle de la table d'allocation de variable du dossier. |
![]() ![]() ![]() |
PROGRAMMATION
MOVE.w #$0025,D0 ; numéro du handle dans le registre D0 tios::DEREF D0,A0 ; pointeur de l'handle #$25 dans le registre A0
![]() |
![]() |
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.
Ensuite nous avons un mot contenant le nombre total de variables dans le dossier.
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 à $07 | nom de la variable, terminé par un caractère nul s'il est inférieur à 8 caractères. | |
$08 | octet devant être un caractère nul mais la plupart du temps il prend la valeur $08 ! | |
$09 | octet contenant le numéro d'attribut de la variable, | le bit 4 armé cache la variable |
le bit 3 armé vérouille la variable. | ||
$0A | mot dont la valeur est l'handle de la variable elle-même. |
PROGRAMMATION
tios::DEREF D0,A0 ; adresse du handle 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 ADDA D1,A0 ; on ajoute le résultat pour pointer à la variable n° ?
![]() ![]() ![]() |
Voici une capture d'écran du logiciel Hexview montrant une variable au hasard, nous allons l'utiliser comme exemple :
Voici la structure d'une variable quelle qu'il soit :
$00 à $01 | mot dont la valeur est la taille de la section de données + 2. |
$02 à $02+$n | section de données. |
$n à $n+$01 | octet dont la valeur est le type de la variable. |
PROGRAMMATION
tios::DEREF D0,A0 ; adresse du handle dans A0 ADDA.w (A0),A0 ; ajoute la taille de la variable à l'adresse initiale MOVE.b 1(A0),D0 ; le premier octet de D0 contient le type de la variable
Zguide © 1998 - 1999 par Florian DREVET. Tous droits réservés