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

La Pile de Calcul :

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.

NOTIONS DE PROGRAMMATION :

- 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.
 

STRUCTURE DE TEST :

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.

Les LIBRAIRIES :

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 !
 

LES ENTREES SORTIES :
 

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.