*********************************************************************** * EXT49: la doc de Yoann Désir, avec quelques exemples de Bebert * * Le 23 juin 2001 * *********************************************************************** Note de Bebert: J'ai repris la doc qui se trouvait dans le Zip, et j'ai enlevé quelques truc, et ajouté quelques exemples pour que tout le monde comprenne bien. ->Prg: Crée un programme ou une liste à partir d'une chaîne de caractères contenant des mnémoniques; si des mnémoniques sont incorrectes, ou s'il y a une erreur dans la "structure" du programme, cela créera un message d'erreur ... Voici quelques règles à respecter: Les programmes et sous-programmes sont délimités par "begin" au début et "end" à la fin; les listes sont délimitées par "{" et "}". Attention, tout programme ou liste entamé doit être termié par le délimiteur adéquat, sous peine de message d'erreur. Le programme ou la liste créé(e) est renvoyé sur la pile. En l'absence de "begin" ou de "{" au début de la chaîne, les mnémoniques écrits sont EXECUTES après conversion en instructions en RPL système. Les éventuelles instructions localisées après une strucutre RPL ou après une liste sont ignorées. En cas d'erreur, le mnémonique incorrect est passé en surluminescence et le source est édité en ligne de commande. Prg->: Réalise l'opération réciproque de ->Prg (ça décompile en gros ...). Les listes et les RPLs sont acceptés, mais Prg-> fonctionne aussi sur un nom global dont le contenu est converti en chaîne de carctères, ou encore sur un nom XLIB, qui voit son contenu désassemblé de même. ->mn: Convertit l'objet du niveau 1 en le mnémonique qui lui correspond, sous forme de chaine de caractères. Exemple: 2: => 2: 1: External 1: "dup" mn->: Opération réciproque. Intérêt: récupérer l'instruction système correspondant au mnémonique fourni sans l'exécuter. Exemple: 2: => 2: 1: "dup" 1: External AddM: Ajoute le mnémonique du niveau 2 défini par l'adresse en ROM au niveau 1 sous forme d'entier binaire b < # 40000h. Le mnémonique ne doit pas être connu, mais une même adresse peut correspondre à plusieurs mnémoniques... Exemple: 2: "superdup" 1: # 3188h Après avoir fait AddM, vous pouvez utiliser le mnémonique superdup dans vos programmes ... RnMn: Renomme le mnémonique du niveau 2 en un mnémonique au niveau 1. Exemple: 2: "superdup" 1: "Megasuperdup" Après avoir fait RnMn, vous ne pouvez plus utiliser superdup, mais vous pouvez utiliser Megasuperdup ClrM: Efface le mnémonique présent au niveau 1. Exemple: 1: "Megasuperdup" Après avoir fait ClrM, vous ne pouvez plus utiliser le mnémonique Megasuperdup dans vos programmes. IdxM: Recherche n, réel au niveau 1, mnémoniques contenant la chaîne présente au niveau 2 et de taille 1 à 20 caractères. Exemple: 5: => { "dup" "dup2" "Ldup" 4: "dup;~" "dup;s?" 3: "dup;b?" "dup;r?" 2: "dup" "dup;c?" "dupn(s)" 1: 10 1: "dup;ex?" } GetM: Génère la liste des mnémoniques connus de taille r, r réel au niveau 1 avec r Exemple: 1: 1 => 1: {"~"} Une liste avec juste ~ comme mnémonique ? c'est normal... il n'y a qu'une seule mnémonique d'un seul caractère ... NbMn: Donne le nombre de mnémoniques connus. KMn?: Précise si un mnémonique est connu ou non. Si oui, renvoie l'adresse à laquelle il correspond au niveau 2. DBG: Lance le debugger RPL-système. DBG prend un programme ou un nom XLIB en entrée. Appuyyer sur "SST" pour évaluer l'instruction suivante. Pour certains mnémoniques, vous aurez à editer le source généré par DBG puis appuyer sur Enter. Stat: Fournit quelques informations sur les mnémoniques connus : nombre de points d'entrée en ROM, nombre de Primitive Code Objects, nombre de Programmes en RPL-Système... Menu502: Génère un menu temporaire qui porte les principaux caracères usuels de la nomenclature de EXT49 Version 2.1. LAinit: Correspond à la variable 'LAmnémo' dans la configuration où aucun mnémonique n'est connu. 'LAmnémo' contient les caractères des mnémoniques connus. L'autre variable du répertoire caché, 'inst', porte les adresses en ROM des points d'entrée correspondant aux mnémoniques. En cas d'essai de recréer vos propres mnémoniques, partez de LAinit et d'une liste vide pour 'inst'. Il est important de noter que tout caractère de code ASCII inférieur à 33 sépare deux mnémoniques. Pour inclure des caractères de code ASCII inférieur à 33 dans un mnémonique, ajouter un caractère "&" de chaque côté du mnémonique. Les mnémoniques inconnus rencontrés par ->Prg engendrent une erreur; Les adresses inconnues détectées par Prg-> sont notées comme un entier binaire mais le préfixe est "$" : ainsi, si "swap" est inconnu, Prg-> peut renvoyer "$3223h". L'inclusion de quartets quelconques s'effectue par ajout en tête du préfixe "\" avant les quartets à insérer. L'inclusion du contenu d'un nom global s'effectue en précedant le nom du caractère d'ASCII 164. Pour éviter des problèmes en cas d’erreur, laisser la calculatrice en mode " Last Stack " coché.