Cours On-Line : PHP, ASP, VB, C, C++ win32, HP48

CALCULETTES HP48G/GX cours de RPL Système

Comme expliqué sur la page précédente, le SYSRPL est une couche de plus bas niveau que le RPL utilisateur. C'est à dire que la couche RPL utilise des instructions de la couche SYSRPL pour fonctionner. Il faut noté que toutes les instructions du SYSRPL ne sont pas utilisable depuis le RPL ce qui permet donc aux petits curieux de farfouiller les doc des instructions SYSRPL pour découvrir des nouvelles fonctions secrètes cachées dans le coeur de leur HP48.

Sommaire

La programmation en SYSRPL offre de nombreux avantages:

  • Accès au formes internes des instructions standard RPL non protégé par des vérifications de type ou de mémoire libre donc plus rapides.
  • Possibilité d'utiliser des objets non disponibles en RPL comme les entiers systèmes , les réels long ...
  • Possibilité de contourner certaines restrictions de la HP liées au constructeur

Par ailleurs il existe aussi des inconvénients:

  • Risque d'erreur grand car sans vérification de type on peut facilement avoir des "memory clear"
  • Utiliser une instruction SYSRPL qui n'existe pas peut avoir le même effet.

Finalement qu'est ce qu'une instruction SYSRPL? C'est une adresse suivit de l'instruction SYSEVAL qui exécuté la fonction SYSRPL localisée à l'adresse donnée en argument. En général l'adresse donnée en argument est une adresse HEXADECIMALE sur 20 BITS donc entre #00000h et #FFFFFh. Veuillez voir la section ASSEMBLEUR pour avoir un détails du contenu de la RAM et la ROM de la HP48.

Avant d'attaquer sur le SYSRPL en lui même il faut d'abord introduire deux chose importantes. Sur la hp les adresses et données au niveau de la mémoire vive sont codé à l'envers sur 8/16/32/64/20 bits... C'est à dire que l'adresse #15790h en hexa sera codé dans la HP dans la mémoire comme celà: 09751

La deuxième chose à savoir c'est que la HP reconnais un certains nombres d'objets. C'est à dire des éléments qui ferments soit des chaînes de caractères, soit des programmes, soit des entier et bien d'autre encore. Nous allons ici essayer de tous plus ou moins les découvrir.

Les objets sont codés eux aussi en hexadécimal inversé dans la HP48.

    • Les différents types d'objets:
Nom du type Adresse type
Nombre réel #02933h 0
Nombre complex #02977h 1
Chaîne de caractère #02A2Ch 2
Tableau de réel #029E8h 3
Tableau de complex #029E8h 4
Liste #02A74h 5
Nom global #02E48h 6
Nom local #02E6Dh 7
Programme #02D9Dh 8
Expressions #02AB8h 9
Entier binaire #02A4Eh 10
Objet graphique #02B1Eh 11
Objet taggué #02AFCh 12
Objet unité #02ADAh 13
Nom XLIB #02E92h 14
Répertoire #02A96h 15
Librairie #02B40h 16
Object backup #02B62h 17
Fonction intégrée #02D9Dh 18
Commande intégrée #02D9Dh 19
Entier système #02911h 20
Réel long #02955h 21
Complexe long #0299Dh 22
Linked Array #02A0Ah 23
Character #029BFh 24
Objet code #02DCCh 25
Library data #02B88h 26
EXT1 #02BAAh 27
EXT2 #02BCCh 27
EXT3 #02BEEh 27
EXT4 #02C10h 27
External ................ 27

Remarque: l'adresse écrite ici constitue en fait le PROLOGUE des types d'objets c'est une adresse pérmétant de savoir ce que va être l'objet avec lequel on va travailler.

La HP48 possède un processeur SATURN 4bits pour le bus de donnée et 20bits pour le bus d'adresses. Cela signifie qu'a une adresse donnée se trouve un paquet de 4bits de données. Le nombre d'adresse utilisable par la HP est donc 2^20 adresses différentes de #00000h à #FFFFFh. Ainsi la mémoire morte (ROM) de la HP48 est d'une taille de 2^20/2 (en octets) soit 2^19 => 512Ko de mémoire.

Une HP48G à 32Ko de mémoire vive (RAM la différence avec la ROM c'est que l'on peut écrire dedans) Une GX à 128Ko de RAM. Il faut savoir que la GX permet aussi de rajouter une carte en port1 de 128Ko et une carte en port2 de 4Mo par banc de 128Ko soir 32*128Ko. Ainsi la mémoire total d'une HP48GX serait: 512+128+128+(32*128)=4864Ko (4.75Mo)

Il est donc évident qu'en pouvant adresser 512Ko on puisse pas atteindre 4.75Mo... C'est pourquoi la HP48 permet d'utiliser certaines fonctions qui permette de choisir dans quel RAM ou ROM ou PORT on écrit à un instant donné en définissant un système de priorité et de superposition de la mémoire.

    • Tableau des espaces mémoires:

On s'aperçoit que de #0h à #82000h il n'y à pas de problème de mémoire cachée mais de #82000h à #FFFFFh là mémoire ROM est cachée par la RAM, le port1 et le port2 (si jamais des cartes sont dans ces ports) Ainsi la HP48 possède une stratégie permettant d'échange le type de mémoire active pour accéder selon une priorité donnée soit au port1 soit au port2 soit à la RAM soit à la ROM. Le fait de pouvoir écrire ou lire dans une mémoire qui était cachée et qui ne l'est plus s'appelle le "bank switching".

Pour savoir à quoi servent les différentes sections mémoire, voir la partie ASSEMBLEUR.

    • Bank switching:

Un bon nombre d'instructions SYSRPL se trouvent dans la ROM entre #82000h et #FFFFFh de ce fait manipuler le changement de banc de mémoire est totalement primordiale pour faire du SYSRPL.

Pour facilité le moyen d'obtenir une fonction en ROM cachée, on peut utiliser ce que l'on appelle des pointeurs d'accès. C'est à dire, les objets de type EXT1 (#02BAAh).

Les objet de type EXTI1 ont deux champs de 5 quartet codant l'adresse de l'objet à atteindre et l'adresse de la routine qui permet d'atteindre cet objet dans la dite mémoire (cachée). Si ce second champs est à #00000h c'est que l'objet à atteindre est en mémoire et qu'il n'est pas caché.

On remarque qu'il existe 3 zone couverte dans la HP48 donc il existe aussi 3 routines pour accéder aux objets de ces zones:

      • Zone: #80000h, #8FFFFh routine en #726A1h

Cette zone est couverte par les 32Ko de RAM de la HP48G ou les 32 premiers Ko de la RAM de la GX.

      • Zone: #90000h, #BFFFFh routine en #72386h

Cette zone est couverte par la fin de la RAM de la HP48GX.

      • Zone: #C0000h, #FFFFFh routine en #70B38h

Cette zone est couverte par les PORT1 et 2. De plus il existe deux routines différentes selon que la carte est en PORT1 ou PORT2.

Pour le code sources des routines d'accès voir la section ASSEMBLEUR.

Sans l'utilisation de l'assembleur il est assez fastidieux d'essayer de programmer avec des SYSEVAL qui se situerais dans la mémoire cachée.