Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » GFA-Basic TI68K » Documentations » Manuel du gestionnaire d'exécution des tokens (TEM) (8 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
geogeo Ecrit le: Vendredi 22 octobre 2004 à 23:24 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Avant de ma lancer dans le codage du gestion d'execution des tokens codé 100% en ASM68K et qui aura pour but d'exécuter un programme écrit en GFA-Basic, j'ai décidé de regrouper dans une sorte de manuel toutes les informations sur ce programme et d'expliquer la hiérarchie d'une source en GFA-Basic au stade d'exécution (bref le bas niveau du GFA-Basic).

Cette documentation a pour objectif de permettre la création de futurs librairies (orientées graphismes, API, de communication hardware I2C, de gestion des fichiers...). Et pourquoi pas de carrément compiler un programme en GFA-Basic.

Je viens de commencer à rédiger le manuel aujourd'hui, il reste beaucoups de choses à définir et à clarifier, n'hésitez pas à donner votre avis, critiquer et donner votre avis ou encore des améliorations possibles.

Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°1   Marquer comme non lu.
Kevin Kofler Ecrit le: Samedi 23 octobre 2004 à 00:07 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


À mort les .doc sur Internet!

Organisation du Gestionnaire d?Exécution des Tokens (TEM = Tokens Execution Manager) en GFA Basic sur TI68K.

Le TEM est le programme de base capable d?exécuter les OP-Codes d?un programme en GFA-Basic (préalablement tokenisé en tokens de commandes et de fonctions puis ensuite tokenisé en tokens d?exécution). Le TEM est donc la dernière étape d?interprétation d?un programme GFA-Basic. Son objectif est d?exécuter très rapidement les op-codes (les tokens d?exécution), de se rapprocher d?un modèle d?exécution proche de la machine et de pouvoir à tout moment interrompre l?exécution du programme. (Il est à noter que le TEM sera capable de générer des erreurs d?exécution mais sans pour autant permettre au programmeur de repérer très rapidement une erreur). Le TEM sera codé 100% en ASM68K et aura la possibilité d?exécuter des fonctions externes contenues dans des bibliothèques.


I. Description des variables :

Entier signé sur 32 Bits (vInt, tInt) = var% ou var%()
Booléen sur 8 bits (vBool, tBool) = var! ou var!()
Flottant sur 80 bits (Flottants de Texas) (vFloat, tFloat) = var ou var()
Chaîne de caractères de 0 à 32767 octets (vString, tString) = var$ ou var$()

Les variables et tableaux sont repérés à partir d?un index codé sur 8 bits de l?index 0 à 255. Les variables ont un espace mémoire statique crée lors de l?exécution du TEM contrairement aux tableaux où l?espace mémoire est statique.

L?espace mémoire de base alloué pour les variables est de 256*sizeof (float)+256*sizeof (long)+256*sizeof (bool)+256*(sizeof (void *)+sizeof (unsigned short)) = 5376 octets. Il faut noter que cette espace mémoire ne contient que des données pour des variables numériques dans le cas des chaînes de caractères on obtient des descripteurs. Cet espace sera nommé :
MEM_VARS découpé en :
VAR_FLOAT [] ;
VAR_INTEGER [] ;
VAR_BOOL [] ;
Accès direct aux données
VAR_STRING [] ;
Passage par descripteur.

L?espace mémoire de base alloué pour les tableaux est de 256*4*(sizeof (void*)+sizeof (unsigned short)) = 6144 octets. Cet espace mémoire sera nommé :
MEM_TABS découpé en :
TAB_FLOAT [] ;
TAB_INTEGER [] ;
TAB_BOOL [] ;
TAB_STRING [] ;
Passage par descripteur.


Ainsi 6144+5376 = 11520 octets sont nécessaire pour pouvoir stocker les variables et les tableaux. Il est à noter qu?un gain de mémoire peut être effectué dans le cas d?un stockage d?informations dans l?en-tête d?un fichier en phase d?exécution contenant des tokens d?exécution et portant l?extension GTK. Ainsi il suffira d?allouer n variables et n tableaux.

Il reste à noter qu?un espace mémoire supplémentaire devra être créé pour accueillir le contenu des chaînes de caractères et des tableaux pointé par les descripteurs. Un descripteur est stocké sur 6 octets avec 4 octets pour l?adresse et 2 octets pour des informations supplémentaires différentes suivant une chaîne de caractères ou d?un tableau. Un espace mémoire sera alloué pour chaque chaîne et pour chaque tableau.


Descripteur d?une chaîne de caractères :

Une chaîne de caractères doit toujours être de taille paire.

4 octets = Adresse pointant vers le premier caractère de la chaîne de caractères, chaîne de caractère qui doit se terminer par le caractère NULL.
2 octets = Taille de la chaînes de caractères.

Au début de la chaîne de caractères on trouve :
x octets = La chaîne de caractères.
?1 octet? = Octet de remplissage pour obtenir une chaîne de caractères toujours de taille paire. (Facilite les copies).
4 octets = Adresse du début du descripteur nommée ?BackTrailer? dont l?objectif est de dynamiser le transfert de données, c?est-à-dire à partir d?une simple adresse pointant sur le premier octet de la chaîne de caractère pouvoir modifier le descripteur dans le cas ou la chaîne de caractère à subit un changement d?adresse dans la mémoire ou encore de taille. Le BackTrailer a pour objectif d?accélérer sensiblement le processus de Garbage Collection (la collecte et l?effacement des zones mémoires qui ne sont plus utilisées).


Descripteur d?un tableau :

Un tableau peut contenir tout simplement des valeurs numériques mais aussi des chaînes de caractères, dans ce dernier cas il faudra se référer au descripteur de chaînes de caractères pour pouvoir lire un tableau de chaînes de caractères.

4 octets = Adresse de début du tableau.
2 octets = Nombre de dimensions du tableau (0 dimension signifie que le tableau n?a pas été déclaré).
Au début du tableau on trouve sur 4 octets le nombre d?éléments dans chaque dimension soit :

x 4 octets = Nombre d?élément de la dimension x, on commence par la dernière dimension. Il ne faut pas oublier que les indices commencent à 0 ainsi un tableau A(2,3) se verra d?une dimension de 4 élément puis de 3 éléments stocké sur 4 octets à chaque fois dans l?ordre de lecture commençant par la dernière dimension.

x octets = On trouve ensuite le contenu des différents éléments du tableau les uns à la suite des autres dans le cas de tableaux numériques.

Pour les tableaux de chaînes de caractères, on n?obtient pas directement le contenu des chaînes de caractères, mais leurs descripteurs. Ces descripteurs de chaînes de caractères ont le même format et la même fonction que ceux décrits précédemment.


II. Pile d?exécution (ES = Execution Stack) :

La pile d?exécution a pour objectif de regrouper les adresses et les types de données à exécuter à une ligne n. Elle joue le rôle d?un accumulateur qui contient les données en attentes de traitement. Cette pile devra contenir un maximum de 50 items.

Chaque item est représenté sur 8 octets :
1 octet = Opérande.
OPRD_RESULT = Correspond à un résultat d?un calcul ou d?une opération au niveau des chaînes de caractères.
OPRD_NUMBER = Nombre stocké dans la source.
OPRD_STRING = Chaîne de caractères stockée dans la source.
OPRD_VAR = Variable.
OPRD_TABLE = Tableau.
OPRD_POINT_VIRGULE = Point virgule dans le cas d?un PRINT par exemple.
OPRD_APOST = Apostrophe dans le cas d?un PRINT par exemple.
OPRD_ENDTAG = Informe la fin des arguments d?une fonction.
1 octet = Type de l?opérande.
TYPE_NONE = Pas de type (Ce type est rarement utilisé)
TYPE_FLOAT = Flottant.
TYPE_INTEGER = Entier.
TYPE_BOOL = Booléen.
TYPE_STRING = Chaîne de caractères.
2 octets = Informations supplémentaires, dans le cas d?un tableau l?accès à un indice n+1, si cette information est égale à 0, on a affaire à un tableau sans indices soit par exemple A().
On utilise aussi ces 2 octets pour stocker la taille d?une chaîne de caractères.
4 octets = Adresse de la données (peut être une données directe ou un descripteur).

La pile ES possède un pointeur qui renvoie le numéro du dernier item dans la pile : ESP (Execution Stack Pointer).

La pile ES aura une taille de 50*8 = 400 octets.


III. Tampon de données (DT = Data Tampon) :

Cette zone mémoire a pour objectif de contenir les résultats de calculs numériques intermédiaires. Les données sont inégalement réparties. Une données occupe un espace mémoire variable dépendant de son type (10 octets pour un flottant, 4 octets pour un entier et 2 octets pour un booléen (dont 1 octet de remplissage pour obtenir des adresses paires)).

Le tampon DT possède un pointeur renseignant sur le nombres d?items dans la zone mémoire noté DTP (Data Tampon Pointer) et possède aussi un numéro d?offset permettant de pouvoir écrire la données suivante soit DTO (Data Tampon Offset).
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°2   Marquer comme non lu.
geogeo Ecrit le: Samedi 23 octobre 2004 à 01:18 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


lol Kevin faut savoir être patient dans la vie. :p
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°3   Marquer comme non lu.
geogeo Ecrit le: Dimanche 24 octobre 2004 à 22:14 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Pas de suggestions? #ouin#
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°4   Marquer comme non lu.
geogeo Ecrit le: Mercredi 27 octobre 2004 à 19:42 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Est-il possible d'utiliser la pile A7 pour contenir la pile ES du GFA-Basic (pile qui contient les infos des tokens) mais sans pour autant que les sauts viennent détruires certaines partie de cette pile ou encore donner des informations fausses?
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°5   Marquer comme non lu.
Kevin Kofler Ecrit le: Mercredi 27 octobre 2004 à 19:43 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Stack frame...
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°6   Marquer comme non lu.
geogeo Ecrit le: Mercredi 27 octobre 2004 à 20:33 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Ah ouai mais je perd un registre ok!
Une dernière chose si j'empile quelque chose sur la pile genre move.w %d0,-(%SP) je risque d'écraser les données de ma pile ES! Désolé j'ai beaucoup regarder la notice sur link mais y a vraiment pas d'infos très détaillées là dessus.
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°7   Marquer comme non lu.
Kevin Kofler Ecrit le: Mercredi 27 octobre 2004 à 21:23 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


C'est pour ça qu'il faut réserver un endroit de la pile exclusivement pour ta pile ES (comme un gros tableau local, quoi). Ou alors tu utilises un bloc alloué.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°8   Marquer comme non lu.
geogeo Ecrit le: Mercredi 27 octobre 2004 à 21:26 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Ouai je vois, pour l'instant j'utilise un bloc alloué mais bon ma pile fera que 400 octets au maximum!
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
  :: Index » GFA-Basic TI68K » Documentations » Manuel du gestionnaire d'exécution des tokens (TEM) (8 réponse(s))
Pages : 1/1     « [1] » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 174.33ms avec 18 requetes