HP48 Gx,
Introduction, Astuces et prise
en main rapide
par Walter Cédric (en cours)
SOMMAIRE:
Présentation du clavier:
La Pile de Calcul
La
programmation en RPL (Reverse Polish Lisp)
Ses
caractéristiques:
1.
En RPL STANDARD
2. Le RPL SYSTEME :
(SYS-RPL en Anglais)
3. Le LANGAGE MACHINE
CONCLUSIONS générales
LA MACHINE A PLANTE,
que faire ?
NOTIONS DE PROGRAMMATION :
Prendre les données sur la pile.
A. Avec la pile de
calcul
C.Avec
les variables Locales
D. Commande INPUT
E. Les
menus de Saisies
Les déposer sur la pile.
LES BOUCLES DANS LES
PROGRAMMES
STRUCTURE DE TEST
LES OBJETS DE LA HP48
LES LIBRAIRIES
LES ENTREES SORTIES
Sur votre machine, il y a deux façon de lancer des
applications :
- Pour les nuls, passer par les menus déroulants |> + touches
- Pour les utilisateurs avancés : <| + touches.
Présentation du clavier :
<-| 7 Application SOLVE (résolution d'équations).
Equations différentielles/ systèmes linéaire/ finance.
<-| 8 Application Plot (tracer) elles sont de six types :
fonctions / coniques / polaires / paramétriques / vérités
/différentielles.
<-| 9 Applications symboliques : Taylor / réduction /
développement.
<-| time Gestion du temps, calcul sur les dates...etc
<-| stat Statistiques a 1 ou 2 variables.
|-> units Unités SI <-| Conversions entre les différentes
unitées.
|-> IO Gestion des ebntrées sorties par Infrarouge (IR) ou
série (WIRE).
|-> MATRIX Applications matrix-writer similaire à un tableur.
<-| EQUATION Application equation Writer : permet de rentrer
des équations complexes comme sur un tableau.
Remarque : Toutes les applications inter-agissent entre elles et redéfinissent le clavier
Ca déroute, mais à l'usage vous saurez l'apprécier......
On rentre d'abord les arguments (opérandes) puis les opérateur
(+-*/ etc). Ce principe est appelée NOTATION POLONAISE INVERSE
(RPN) et est non ambiguë et ne nécessite pas de parenthèses.
AVANTAGES :
- On ne travaille jamais sur plus de deux nombres a la fois.
- La pression sur une touche execute la fonction ( plus besoin de
touche ==.
- On voit les résultats intermédiaires et le déroulement du
calcul.
- Les résultats intermédiaires sont stockés automatiquement.
- Le calcul est effectué comme on le ferais à la main.
- Il n'est pas nécessaire de refaire un calcul en entier :
correstion des erreurs aisées.
- Tout les autres types de données (matrice, nombres complexes)
suivent ces rêgles.
- Les calculs dans les programmes c'est Idem.
Remarques
Tant que vous avez de la mémoire, vous pouvez stocker des
objets dans la pile.
C'est une pile (d'assietes?) mais elles se charge et se vide par
le bas.
Cette notation Polonaise a été développé par le
mathématicien Polonais Jean Lukasiewiez (1878-1956).
La programmation en RPL (Reverse Polish Lisp)
Ses caractéristiques :
La notation RPN reste valable,
Elle fait appel a un jeu d'instructions réduit qui peut être
tapées au clavier.
La programmation est structurée,
propre :
- Pas de saut indexé dans un programme,
- Un programme s'exécute de haut en bas,
- On ne peut sortir inopinément d'une boucle,
- Des fonctions, procédures appelés par leurs
noms.
(Du moins en RPL standard).
1. En RPL
STANDARD:
Vous possédez ce langage dès que vous achetez la machine.
Ce langage est sécurisé au maximum, il est impossible de
planter la machine, le ON ou ON-C reste toujours possible, mais
cela se paye par un temps d'éxécution long dus aux tests
et vérifications diverses que fait la machine. Il reste
néanmoins très puissant et convient à toutes les
applications mathématiques ou physiques.
Il comporte environ 3300 instructions ou routines
accessibles par les menus ou programmes.
C'est ce langage qu' Hewlett Packard a bien voulu nous fournir.
2 Le RPL SYSTEME : (SYS-RPL en Anglais)
Dans la ROM de la HP, on trouve des milliers de routines
écrites en langage machine (LM ou ASM), seule langage que le
micro-processeur comprend, et que le RPL appelle après avoir
tout vérifié. Il devient alors évident que le fait de
court-circuiter ces vérifications fait gagner 5 à 6x de temps
machine en particulier sur les boucles itératives. Mais
voila, pas de nom pour chaque routine car ce ne sont que
des adresses basés en ROM (512Ko) sur Gx. Impossible dès lors
de les connaitre tous, heureusement J. Michel Ferrard en a
répertorié 6000 et leur a atttribué des mnémonics explicites.
Son ouvrage fait référence dans le monde de la hp48.
Il n'y a presque aucune limite et on peut modifier le
système d'exploitation de la hp48.
Conclusions :
+ Rapide (6X en moyenne),
- Illisible (nécessité d'un compilateur),
- Pas de droit a l'erreur : par ex sans objet sur la pile
:
DROP
-------> erreur too few argument
#3244h SYSEVAL -------> Memory Clear
+ Compact : une routine complexe en RPL peut se résumer
à 1 adresse si elle existe donc à 2.5 octets et en plus elle
est plus rapide.
+ Des milliers de nouvelles fonctions.
Encore plus bas près du CPU :
3.
Le LANGAGE MACHINE :
Son utilisation nécessite un compilateur sur HP ou PC
sinon il faut rentre des chiffres binaires.
Il faut connaitre parfaitement le fonctionnement intrinséque
de la machine (logiciel et électroniquement).
C'est illisible sans un source commenté.
La taille du programme est ridicule mais il faut compter des
dizaines d'opérations élémentaires pour faire quelque chose.
CONCLUSIONS
générales :
1. Les trois façons de programmer ci-dessus se valent , car il
faut tenir compte du temps de développement, des phases de
débuggage.
Ex : Inversons les N premiers niveaux de la pile :
RPL "normal" 31.5
octets 5.997 secondes.
RPL "système" 12.5
octets 3.368 secondes.
LM
72 octets 0.019 secondes.
2. Ne JAMAIS éditer un code (LM) ou du sys-rpl,
cela soit le détruit soit plante la machine.
3. Dès que la machine ne reconnait pas un objet elle le remplace
par le mot EXTERNAL sur la pile, un seul mot Prudence.
LA MACHINE A PLANTE, que faire ?
Essayer dans l'ordre (gravité croissante)
| ON
| ON + C relacher
|------------------------------------- destruction des données
en dessous de cette ligne.
| ON+A+F
relacher
|
| Reset sous patin
droit
|
|Inverser les piles 2 Secondes |
Comment Marche La HP48 ?
En voila une bonne question, bon ...Euh dans les grandes lignes
(il y a des bouquins de 250 pages sur le sujet).
Disons que la hp gère des objets, que chaque objet
contient en son sein le moyen de traitement adéquat (en fait son
prologue).
Ceci permet d'additionner avec la touche + indifférement
des complexes, tableaux, listes, chaines de caractères,
expression algébriques ....etc
La programmation est facilité par rapport aux autres langages
qui utilisent une instruction précise pour chaque type d'objet.
Elle utilise et gère la pile de données de façon dynamique.
- Un programme commence toujours par << et se termine
par >> pour éviter qu'il s'éxecute automatiquement. On le
stocke et on peut le ré-utiliser a l'infini.
- C'est une collection disparates d'objets.
Le but d'un programme est de prendre des données (entrées ou
input) , d'effectuer un traitement et de fournir un résultat
(sorties ou output).
Prenons un exemple : le carré d'un nombre et regardons les différentes façons de prendre des objets.
Selon le cas :
Les données sont sur la pile et dans le bon ordre : on utilise
les variables locales ou globales ou la pile.
On crée un menu de saisie
On pose des questions a l'utilisateur commande input.
A.
Avec la pile :
C'est facile, rapide car elle ne contient que des
adresses, le programme est compact mais difficile
à lire car il faut s'imaginer les nicveaux dans la tête.
<< DUP * >> ou plus compact encore << SQ
>>
B. Avec les variables globales :
C'est plus lisible, ça ressemble à la programmation type
pc mais c'est encore moins propres : on encombre le
répertoire courant de variables qu'il faut purger à la fin du
programme. C'est plus lent, car la hp fait une recherche
séquentielle des variables.
<< 'nbre' STO nbre nbre * 'nbre' PURGE
>> ou << 'nbre' STO 'nbre*nbre' EVAL 'nbre'
PURGE >>
C.Avec les variables Locales :
Les variables n'existent que dans votre programme, elles
ont un noms et la hp se depeche de façon transparente de les
remplacer par un adresse : plus rapide et la maintenance est
aisée. Elles se déclarent avec ->.
ex : << -> nbre << nbre SQ
>> >>
D.
Commande INPUT :
Syntaxe :
"Texte qui sera afficher" {"texte affiche en
ligne de commande" caractere_alpha} INPUT
ex :
<< "discriminant trinôme réel ou complexe" {
"delta : " alpha} INPUT OBJ-> "delta"
->TAG >>
c'est lent et à résever aux programmes complexes.
E.
Les menus de Saisies :
Pratique pour les saisies multiples et consécutives et
calqué sur le SOLVER.
Nécessite des variables globales.
Ex : Menus de saisie pour le calcul de delta et de ses racines. Commentaires en vert.
<< {{"A" << 'a' STO >>} {'B' <<
'b' STO >>} {'C' << 'c' STO >>}} TMENU cree un menu temporaire
HALT stoppe le programme attend
->cont pour continuer.
'b^2-4*a*c' EVAL 'd' STO calcule
delta
'(-b+d^0.5)/2*a' EVAL "r1" ->
TAG racine 1
'(-b-d^0.5)/2*a' EVAL "r2" ->
TAG racine 2
d rappelle delta
"delta" ->TAG le taggue
{ a b c d } PURGE >> nettoie
et fin
Grâce à la hp ce programme marche que delta soit négatif
ou non (elle connait sqrt(-3).
mais je n'ai pas testé delat négatif.
pour le fun : en sys rpl :
<< { a {] b {} c {} } TMENU #15146h SYSEVAL HALT et le reste idem
Le menu est blanc, un appuie sur la touche stocke automatiquement
l'objet du nivo 1.
Différentes façons de les rendre sur la pile :
A. Taggue :
Il est parfois intéressant de tagguer les résultats au
lieu de laisser des nombres sur la pile sans significations.
essayer : (prend trois nombres sur la pile)
<< -> a b c << 'b^2-4*ä*c' EVAL >> et
<< -> a b c << 'b^2-4*ä*c' EVAL
"DELTA" ->TAG >>
On peut tout tagguer : listes, chaines etc on peut même
spécifier l'unité ex: << "en
m/s" ->TAG >>
LES BOUCLES DANS LES PROGRAMMES :
elles sont de différents types :
1. Les boucles dont on connait les deux index et
l'incrément :
index : valeur du compteur au début ou a
la fin.
incrément : nbre qui sera aditionner a
l'index lors de chaque scrutation.
ex : on répéte 5 fois.
<< 1 5 START prog NEXT >> incrément fixe de
un.
<< 1 5 START prog n STEP >>
incrément positif ou négatif de n.
NOTA : la boucle est toujours effectué au moins une fois.
2. les boucles d'interceptions d'erreurs :
Permet d'intercepter une erreur dans le corps de votre programme
et de renvoyer ou d'éxecuter un autre programme...
ex : << IFERR DUP si une erreur ici
THEN "manque qq chose, mec" DOERR END >>
doerr prend un chaine sur la pile et provoque l'erreur plus un
bip
3. Les boucles indéfinis qui attendent qu'une condition
soit vraie :
ex DO clause répétée
UNTIL END
WHILE REPEAT END
ex : DO prog UNTIL KEY END boucle et attend une
touche.
4. On a besoin de prendre connaissance de l'index :
<< 1 5 FOR
X X 1 DISP 0.5 WAIT NEXT (ou 1 STEP)>>
X est le nom du compteur
1 disp affiche en ligne 1 la valeur de X
Lue au moins une fois.
but : orienter vers un sous-programme en fonction du résultat d'1 ou plusieurs test. Dans tous les cas de figure, soit la clause de test est vérifié (vrai=true=1) soit elle est fausse (faux=false=0).
IF clause_test THEN clause_Vraie ELSE clause_Fausse
END.
ex : << IF delta 0 < THEN "delta
négatif" ELSE "delta positif" END >>
Un réduction est possible mais on perd en lisibilité IFTE (IF
THEN END)
ex idem :
<< delta 0 < << "delta
négatif" 1 DISP >> << "delta positif"
1 DISP>> IFTE >>
Structure choix parmi : CASE END (= case of en
Pascal)
CASE
test1 THEN prog1 END
test2 THEN prog2 END
test3 THEN prog3 END
END
Execute le programme correspondant à testn vrai.
LES
OBJETS DE LA HP48 :
La hp48 gère des entités appelés objets, il en existe
28....
Les 18 premiers sont accessibles, les autres (avec *) ne le sont
pas sans programmes de créations dédiés.
| 0 Réels (Real) | 10^-499 à 9.99.10^499 |
| 1 Complexes | (1,1) |
| 2 Chaines de carctères (string) | "abcdefg" |
| 3/4 Tableau (array) | [1 2 ] |
| 5 Listes (list) | {1 2} |
| 6 Nom Globaux (global name) | 'temp' |
| 7* Nom locaux (local name) | |
| 8 programme (program) | << DUP >> |
| 9 Expressions algébrique (algebraic ex) | 'COS(X)' |
| 10 Entier binaire (binary integer) | #AFh |
| 11 Objet graphique (graphic) | graphic 25x25 |
| 12 Noms taggués | 45 : toto |
| 13 Unités (units) | 15_m/s |
| 14* Noms Xlib (Xlib Name) | XLIB 986 0 |
| 15 repertoire (directory) | DIR END |
| 16* Librairie (Library) | Library 1000 : exemples |
| 17 Backup | Backup toto |
| 18 | |
| 19 | |
| 20* Entier système (system binary) | <15h> |
| 21* Réel long (Long real) | Long real |
| 22* Complex long (Long complex) | |
| 23* Linked array | Linked array |
| 24* Characters | Character |
| 25* Programme asm | Code |
| 26* Librairie Data | Library data |
| 27* Reservé 1 | |
| 28* Reservé 2 | |
| 29* Resevé 3 | |
| 30* Reservé 4 |
A Savoir :
Tous les objets * ne sont pas d'une utilité folle, par exemple
il n'exite qu'un seul librairie data dans la machine (pour le
minehunt) mais c'est un objet libre et le programmeur peut y
mettre ce dont il a envie. Les Linked array n'existent pas en ROM
mais prenent tout leurs intérêt dans les tableaux de grande
taille car :
- Les objets doivent être du même type, mais si il sont
identiques, ils n'ont pas besoin d'être répétés.
Les plus importants :
- Le code object qui contient le programme en langage
machine,
- Les entiers systèmes qui participent de façon importante dans
le fonctionnement interne de la machine.
Introduction :
C'est un objet : l'instruction TYPE renvoie 16.
C'est sans aucun doute l'objet le plus complexe de la hp48.
Il n'est pas possible, à priori, que l'utilisateur puisse le
créer.
De nombreux programmes le permettent néanmoins, citons LIB to
LIB, CRLIB ... ou permettent de les casser LIBEX ou LIBtoLIB.
Définition :
Une librairie est une collection d'objets hétéroclites qui
n'ont plus besoin d'être modifiés.
But :
- On peut protéger ses applications de l'utilisateur
lambda.
- On peut étendre le jeu d'instruction de la machine, le domaine
de visibilité d'une librairie est totale (pour peu
qu'elle soit attachée à HOME).
- On ne montre que les programmes principaux
(protégés) et pas les sous-routines beaucoup trop dangeureuses.
- La distribution d'un soft est facilité (1 objet
au lieu de 20, 30; 500 programmes dans un répertoire).
- De par sa structure interne, l'accés au programme est
très rapide.
- On ne met en librairie que des programmes
finalisés.
Ou les stocker ?
Dans les ports 48G : 0 sur Gx : 0, 32
Comment ?
Dès qu'une librairie est sur la pile, on voit Library 1000 :
Exemple
Il suffit de faire X sto ou X est le numéro de port. et
d'éteindre la machine ou de faire ON-C
La librairie contient un objet de configuration qui va s'executer
et attacher la librairie ou affiicher un message, bipper ...etc).
Les enlever de la mémoire ?
Se placer sous home, il faut connaitre son numéro le mettre dans
la pile taggue du numéro de ports correspondant et faire
successivement DETACh puis PURGE.
Problèmes types : J'installe une lib mais je ne
la vois pas dans le menu librairie :
Avez vous éteint la machine?
L'objet de configuration est déficient essayer X ATTACH ou X
MENU. INVALID CARD DATA !
La librarie est corrompue ou mal faite par l'auteur, pas de
solution sinon de sauver tout ce que l'on aime dans la machine et
de faire ON-A-F car la mémoire centrale est corrompue et le
système ne vous la rendra pas !
Il vous faut acquérir les fonctions de bases propres au RPL :
DUP : duplique l'objet du nivo 1.
DUP : duplique nivo 1 deux fois.
n DUPN : duplique n fois le nivo 1.
DROP : efface le nivo 1.
n DROPN : efface les n premiers nivo.
CLEAR : efface toute la pile ne jamais utiliser dans un
programmes : on laisse la machine dans le même état avant
l'éxecution.
SWAP : permute nivo 1 et 2.
n PICK : copie objet du nivo n.
n ROLL : Prend objet nivo n.
n ROOLD : replace l'objet nivo 1 au nivo n.
->NUM : evalue l'expression algébrique.
le reste prendre votre bouquin.