ZuperIndex
ZINDEX
ZuperIndex
ZDICO
ZuperIndex
ZUPERINDEX
Table
d'allocation de
variables Fonction TI-92 Introduction
Fonction TI-92 Table d'allocation de dossier
Fonction TI-92 Tables d'allocation de variable
Fonction TI-92 Formats des variables en RAM Barre

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

Barre



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


Barre



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.w		#$0025,D0	; numéro du handle dans le registre D0
	tios::DEREF	D0,A0		; pointeur de l'handle #$25 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	; 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° ?

Barre



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 :

puce

puce Voici la structure d'une variable quelle qu'il soit :

$00 à $01mot dont la valeur est la taille de la section de données + 2.
$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>+1

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

Barre



 

 

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

Zguide © 1998 - 1999 par Florian DREVET. Tous droits réservés