ZuperIndex
ZINDEX
ZuperIndex
ZDICO
ZuperIndex
ZUPERINDEX
Handles Fonction TI-92 Introduction
Fonction TI-92 Utiliser les blocs mémoire
Fonction TI-92 Les blocs mémoire systèmes
Fonction TI-92 Index des fonctions Barre

Page précédente

Monter Descendre Retour Introduction

puce Les TI sont capables de créer, redimensionner, supprimer... des blocs mémoire grâce à des fonctions présentes en ROM.
Ceux-ci sont tout le temps utilisés, que ce soit pour sauver les variables, le contenu du presse-papier, les écrans GRAPH ou PrgmIO, les résultats calculés dans l'écran HOME...

puce Je vous rappel que la bibliothèque Kernel utilise aussi les handles pour exécuter des programmes Fargo.


Barre



Monter Descendre Retour Utiliser les blocs mémoire

puce Notre calculatrice garde en mémoire ces blocs mémoire en leur assignant à chacun un numéro appelé handle, ainsi qu'un pointeur. L'handle est un entier de type mot qui ne changera plus tant que le bloc existera, et ce même si d'autres blocs mémoires sont détruits.

Comme nous venons de le voir, un pointeur (adresse) est associé à chaque handle. Malheureusement ce pointeur est succeptible de changer quand d'autres blocs sont détruit ou redimensionnés, ce qui peut être fatal lors de l'exécution d'un programme Fargo car le retour d'un saut pourrais ne pas se faire au bon endroit.

puce David Ellsworth va résoudre ce problème dans la prochaine version de Fargo en chargeant les programmes Fargo en mémoire statique (à priori au sommet de la RAM avant les adresse de tios.h et le kernel), par conséquent que des blocs mémoire soient supprimés ou redimmensionnés ne changera en rien la position de notre programme.

puce Les pointeurs dont nous venons de parler sont contenu dans une table pointée par la variable tios::Heap de la bibliothèque TIOS.

Pour trouver l'adresse (type double mot ) d'un bloc il faut utiliser la formule suivante :
adresse = tios::Heap + handle * 4
puce Si le résultat vaut zéro alors l'handle actuel ne correspond pas à un bloc mémoire.
puce Sinon vous avez maintenant le pointeur du bloc mémoire voulu, le premier double mot correspond à la taille du bloc mémoire.

puce Tous les blocs mémoire sont contenus les uns à la suite des autres en mémoire dynamique, le premier étant associé à l'handle $0000 et les suivants disposés d'une manière totalement anarchique (l'handle $0023 peut être avant l'handle $0016 par exemple).

Un bloc mémoire commençant tout le temps par sa taille (type mot), l'adresse du prochain bloc mémoire (et non du prochain handle comme ils sont disposés anarchiquement) est connue par la formule :
prochaine_adresse = adresse + (adresse).w * 2
La liste est terminée quand prochaine_adresse vaut 0.


Barre



Monter Descendre Retour Les blocs mémoire systèmes

puce Les 21 premiers handles ($0000 à $0014) sont des handles systèmes, c'est à dire utilisés par les TI pour leurs propres besoins.

puce Ces handles sont toujours présent et ne sont jamais détruits, David Ellsworth conseille fortement de ne pas utiliser les handles systèmes !

A priori il n'y a pas de problème si vous utilisez les blocs mémoire de la table d'allocation de variable ou des écrans GRAPH et PrgmIO mais étant donné que leur contenu est modifié, pensez à les initialiser (effacer l'écran) de sorte à ne pas avoir un affichage bizarroïde par la suite ;o)

puce Voici les fonctions relatives à chaque handle système :

$0000$000B: table d'allocation des dossiers
$0001$000C: table d'allocation des variables de MAIN
$0002$000D
$0003$000E: entrée courante dans l'écran HOM
$0004$000F: écran PrgmIO (239x103)
$0005$0010
$0006$0011
$0007$0012
$0008$0013: écran Graph (239x103)
$0009$0014
$000A: contenu du presse-papier

puce Notez que les écrans PrgmIO et GRAPH n'ont de sauvegardé que la partie utilisateur (239x103), c'est à dire en dessous des menus déroulants et au-dessus de la ligne de status.


Barre



Monter Retour Index des fonctions

puce Il y a des fonctions présentent en ROM pour gérer les blocs mémoire, ces fonctions font donc partie de la bibliothèque TIOS.

@0002HeapFree
détruit un handle
@000BHeapFreeIndir
détruit et efface un handle
@0022HeapAllocThrow
crée un handle
@0003HeapAlloc
crée un handle
@000EHeapRealloc
redimensionne un handle


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