02.07.99
Bibliothèque n°502 : EXT48 v2.4
Auteur: Yoann DESIR
e-mail: YoannDESIR@yahoo.com
page web : http://www.multimania.com/ydesir/hp48gx/hp48gx.html
Cette bibliothèque permet la programmation en Externals à l'aide de
mnémoniques.
La version EXT48v2.4i contient une entrée INFO EXT48 qui regroupe toutes les
indications nécessaires à son utilisation.
Toutefois, la version EXT48v2.4, moins gourmande en mémoire, nécessite quelques explications...
Tout d'abord, les données nécessaires au fonctionnement d'EXT48 sont contenues dans le fichier "Vars2.05", que vous devez exécuter dès son transfert sur la HP. Dès lors, les données sont tranférées dans deux nouvelles variables du répertoire caché de HOME.
Remarquez que l'entrée "Crvar", nom XLIB visible dans la version "light", mais caché dans la version complète, permet de créer un fichier suceptible de remplacer "Vars2.05" à partir des informations-mnémoniques que vous utilisez actuellement et qui sont stockées dans le répertoire caché de HOME.
Mais trève de plaisanteries ...
EXT48 by Y.Désir
Version 2.4
Programmation en RPL système
Vive la HP48G(X)!
->Prg: Crée un programme ou une liste à partir d'une chaîne de caractères
contenant des mots appellés "mnémoniques".
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.
Avant : |
Après : |
![]() |
![]() |
Prg->: Réalise l'opération réciproque de ->Prg. 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.
mn->: Opération réciproque. Intérêt: récupérer l'instruction système correspondant au mnémonique fourni sans l'exécuter.
TABLE DE CONVERSION DES OBJETS EN MNEMONIQUES
Réel | 0 | <1h> | 1.25E234 | "1.25E234" |
Complexe | 1 | <2h> | (1.23548698,2E-245) | "(1.23548698,2E-245)" |
Chaîne | 2 | <3h> | "ABC" | C$ 5 "ABC" |
"A C" | C$ 7 &"A B"& | |||
Tableau | 3 ou 4 | <4h> | [ 1 2 3 ] | "&[1 2 3]&" |
Liste | 5 | <5h> | { 1 A 1_kg } | "\47A20........" |
Nom global | 6 | <6h> | 'A' | "vA" |
'A B' | "&vA B&" où "v" est ASCII 120 | |||
Nom local | 7 | <7h> | 'A' | "£A" |
'A+B' | "&£A+B&" | |||
Programme | 8 | <8h> | << DUP >> | "\D9D20........" |
Expression | 9 | <9h> | 'A*X^2+B*X+C' | "'A*X^2+B*X+C'" |
Binaire | 10 | |
# 3223h | "#3223h" |
Graphique | 11 | |
Graphic 1 x 1 | "&GROB 1 1 00&" |
Taggué | 12 | |
:1: A | "\CFA20........" |
Unité | 13 | |
1_kg | "'1_kg'" |
Nom XLIB | 14 | |
XLIB 232 15 | "&XLIB 22 15&" |
HEAD | "HEAD" | |||
Répertoire | 15 | <2Fh> | DIR END | "\69A20........" |
Bibliothèque | 15 | <8Fh> | Library 502: EXT48... | "\69A20........" |
Backup | 17 | <9Fh> | Backup A | "\26B20........" |
Fonction | 18 | <8h> | INV | "INV" |
Commande | 19 | <8h> | DUP | "DUP" |
Entier-système | 20 | <1Fh> | <1h> | "<1h>" |
Réel long | 21 | <3Fh> | Long real | "¥1.23456789012345E49999" |
Complexe long | 22 | <4Fh> | Long Complex | "¥(1.E-49999,0)" |
Linked Array | 23 | <5Fh> | Linked Array | "\A0A20........" |
Character | 24 | <6Fh> | Character | "K_A" |
Character | "K_\65" | |||
Library Data | 26 | |
Library Data | "\88B20........" |
AddM: Ajoute le mnémonique du niveau 2 défini par l'adresse en ROM au niveau
1 sous forme d'entier binaire b < # 80000h.
Le mnémonique ne doit pas être connu, mais une même adresse peut correspondre
à plusieurs mnémoniques...
RnMn: Renomme le mnémonique du niveau 2 en un mnémonique au niveau 1.
ClrM: Efface le mnémonique présent au niveau 1.
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.
GetM: Génère la liste des mnémoniques connus de taille r, r réel au niveau 1 avec r < 21.
![]() |
![]() |
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.
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 EXT48 Version 2.4.
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'.
Le flag utilisateur n°12 détermine ( désarmé ) si à chaque redémarrage à
chaud, les paramètres du sytème de saisie automatique d'objets dans la
syntaxe de EXT48 sont redéfinis.
En effet, en mode USER, il est possible, si le flag utilisateur n°12
n'est pas armé, de saisir des objets, des suites d'instructions à partir
de la ligne de commande après avoir lancé l'environnement - en mode USER -
à l'aide de [alpha] puis [SPC].
Après saisie, taper [ENTER], toujours en mode USER, et ->Prg est appliqué
directement à la ligne de commande saisie...
Il est important de noter que tout caractère de code ASCII < 33 - donc, espaces et retours chariot compris - sépare deux mnémoniques. Pour inclure des mnémoniques contenant des caractères de code ASCII < 33, ajouter des délimiteurs "&" autout du mnémonique en question, comme dans : Chaînes, tableaux, noms globaux et locaux, noms XLIBs...
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.