La HP 67 est une calculatrice scientifique programmable commercialisée en 1976. Elle est l'héritière de la HP 65 sortie en 1974 qui a été la première calculatrice à avoir un lecteur / enregistreur de cartes magnétiques. Elle est aussi la sœur au format "poche" de la HP 97. L'exemplaire que je possède a été fabriqué la 12ème semaine de 1976 et a été vendu le 6 novembre 1976 (soit 37 ans presque jour pour jour par rapport à la date de rédaction de cet article).
Comme toutes les HP de l'époque, elle fonctionne selon la logique RPN (Reverse Polish Notation = NPI en français = Notation Polonaise Inverse). Années 70 obligent, son affichage est composé de LED. Il est possible d'afficher 10 chiffres + 2 exposants. Le clavier est composé de 35 touches dont 3 (f, g et h nommées "touches préfixes") servent à accéder aux fonctions et commandes de même couleur. On peut dire que le clavier est surchargé.
Les 5 touches du haut (A, B, C, D et E) permettent de lancer directement une routine programme si au moins un label correspondant a été programmé. Dans le cas contraire ce sont les fonctions écrites au-dessus qui le sont et il suffit d'un seul label programmé pour que ces fonctions soient inopérantes pour toutes les touches.
Elle possède 224 pas de programmes et 26 mémoires volatiles. Il n'est pas possible de partitionner la mémoire entre pas de programmes et registres. Programmes et données peuvent être enregistrés grâce au lecteur / enregistreur de cartes magnétiques. Une carte magnétique contient deux pistes, une sur chaque face, qui permettent de sauvegarder 112 pas de programmes chacune soit la moitié de la mémoire. En plus des instructions la carte sauvegarde aussi le mode angulaire, l'état de flags et le format de l'affichage et avec la fonction W/DATA il est possible de sauvegarder le contenu des registres de mémoire.
Celui qui équipe ma machine n'est plus fonctionnel. Il est atteint de la maladie de la "Gummy Wheel" car avec le temps le galet d'entraînement en matière plastique s'est détérioré et est devenu collant. C'est a priori aisément réparable mais cela équivaudrait à sacrifier la plaque arrière des coefficients de conversion pour pouvoir démonter la machine. Et ça il n'en est pas question.
Le modèle de programmation est assez complet. Sous-programmes (jusqu'à 3 niveaux), branchements conditionnels et inconditionnels, boucles contrôlées et flags répondent présents. Les tests sont complets (x=y, x<>y, x>=y, x<y, x=0, x<>0, x>=0 et x<0) et permettent de comparer le registre d'affichage (x) au registre y de la pile opérationnelle ou bien directement à la valeur 0. A noter qu'il n'y a pas les inverses des tests. Les tests sont complétés par 4 indicateurs binaires (flags).
Les pas de programmes sont combinés comme sur la TI 57 ou la HP 33E ce qui signifie que la pression de plusieurs touches ne compte que pour un seul pas. Par exemple STO + 3 ne comptera que pour un seul pas de programme contre 2 sur une TI 58C.
La machine a donc 26 registres de mémoire. Ces derniers sont divisés entre registres primaires (6 mémoires) et secondaires (10 + 10 mémoires). Les registres primaires correspondent aux touches de A à E et I et aux registres de 20 à 25. Les secondaires correspondent aux touches 0 à 9 et à la fonction [P><S] (visible sous la touche CHS). Cette dernière échange les valeurs des registres 0 à 9 avec celles des registres de 10 à 19 qui ne sont pas accessibles autrement. En clair, il est impossible d'y mettre une valeur directement (quoique). En outre ces registres sont utilisés lors des calculs statistiques. L'entrée et l'extraction des données se font avec les traditionnels STO et RCL. Il est possible de calculer directement en mémoire (comme sur la TI 57) avec par exemple 10 STO + 0 qui ajoutera 10 à la valeur de la mémoire 0.
On passe du mode RUN au mode programmation et inversement grâce à l'interrupteur W/PRGM - RUN. Il y a donc 224 pas de programmes numérotés de 001 à 224 bien que lorsqu'on passe en mode programme on voie 000 et non pas 001. Un programme commence par un LBL (label) et finit par la commande RTN (return). 20 labels (étiquettes) sont disponibles et vont de A à E, de a à e et de 0 à 9. Il est possible de lancer un programme associé à un label alphabétique et appuyant directement sur la ou les touches adéquates. Par contre pour lancer un programme lié à un label numérique, il faut faire GSB (GoSuB) étiquette. A l'intérieur d'un programme, les branchements (GTO) ou les appels de sous-programmes (GSB) se font obligatoirement vers une étiquette et s'il est possible de taper GTO . nnn (nnn est un pas de programme) c'est uniquement pour se positionner directement sur un pas spécifique afin de lancer l'exécution via R/S par exemple ou bien pour éviter d'appuyer sur SST pour aller au pas de programme désiré.
En plus des tests de conditions il y a donc 4 indicateurs binaires ou flags qui permettent aux programmes de prendre des décisions. Les commandes sont SF pour Set Flag (on dit aussi qu'on arme un drapeau), CF pour Clear Flag (désarmement d'un drapeau) et F? qui exécute l'instruction suivante s'il est armé ou bien la saute s'il est désarmé. Les flags sont de 2 types. F0 et F1 qui sont armés et annulés uniquement par les commandes SF et CF et F2 et F3 qui sont désarmés une fois testés. Bien entendu il est possible d'utiliser CF sur ces 2 drapeaux. Le flag F3 a aussi une autre particularité; il est armé dès qu'on appuie sur un chiffre ou quand des chiffres sont introduits dans les registres de mémoires par le lecteur de cartes magnétiques. De cette manière et grâce à l'instruction PAUSE qui admet les entrées au clavier il est possible de simuler le INKEY$ du Basic et faire une boucle qui attend l'introduction d'un nombre avant de continuer le déroulement du programme. Le programme ci-dessous additionne 2 chiffres car il n'y a qu'une PAUSE. Avec 2 PAUSE il est possible d'entrer 2 nombres à 2 chiffres.
001 LBL A 002 GSB E 003 ENTER 004 GSB E 005 + 006 RTN 007 LBL E 008 F? 3 009 RTN 010 PAUSE 011 GTO E |
001 31 25 11 002 31 22 15 003 41 004 31 22 15 005 61 006 35 22 007 31 25 15 008 35 71 03 009 35 22 010 35 72 011 22 15 |
Néanmoins certaines restrictions sautent grâce à l'adressage indirect qui permet d'accéder ou de modifier la valeur d'un registre en fonction de la valeur d'un autre. Si avec les pockets basic ou les TI 58/59 l'adressage indirect se fait à partir de n'importe quelle variable (STO IND 01), la HP 67 a un registre nommé I qui peut être utilisé comme un registre primaire ou comme registre d'indirection. On lui affecte une valeur via l'instruction ST I (h STO) et on rappelle sa valeur avec RC I (h RCL). Par exemple si on fait 4 [ST I] et qu'ensuite on saisit 12345 [STO] [(i)] alors RCL 4 affichera 12345. De cette manière il est possible d'accéder aux fameux registres secondaires de 10 à 19. Ainsi 12 ST I puis RCL (i) affichera la valeur du registre secondaire 12. Le calcul direct en mémoire fonctionne aussi. 25 STO + (i) ajoutera 25 au registre pointé par le registre I. Dans l'exemple précédent RCL 4 donnera 12370. Les GTO et GSB bénéficient eux aussi de l'indirection. Nous avons vu qu'il y avait 20 labels possibles; de 0 à 9, de A à E et de a à e. Les labels de A à E équivalent aux labels de 10 à 14 et ceux de a à e aux labels de 15 à 19. Donc si le registre I a une valeur comprise entre 1 et 19 alors GTO (i) ou GSB (i) branchera le programme vers le label correspondant. Mieux encore, si I a une valeur négative alors GTO (i) ou GSB (i) enverra le pointeur de programme -I pas de programmes en arrière. A quoi cela sert-il ? Je ne sais pas.
Les itérations (ou boucles contrôlées) sont gérées par les instructions DSZ et ISZ. DSZ décrémente la valeur du registre I et saute le pas suivant si I = 0. ISZ incrémente le registre I et saute le pas suivant si I = 0. DSZ et ISZ peuvent décrémenter ou incrémenter un registre en indirection. Pour cela il faut appuyer sur g DSZ ou g ISZ. Par exemple si I = 4 et RCL 4 donne 12370 g DSZ suivi de RCL 4 affichera 12369.
La mise au point des programmes est facilitée par les commandes SST et BST qui permettent de se déplacer dans un programme mais aussi par le GTO . nnn qui permet de se positionner directement sur un pas de programme. Cette possibilité contrebalance le fait que BST est accessible via la pression de 2 touches ( g SST). L'insertion d'instructions est automatique. Il suffit de se placer sur un pas de programme et les nouvelles instructions s'insèreront à sa suite. Pour supprimer un pas de programme, il suffit de se placer dessus et d'appeler l'instruction DEL (h CLx).
Côté vitesse, ce n'est pas un foudre de guerre. Le programme LBL A 1 STO + 0 GTO A est exécuté 223 fois en une minute, ce qui la met derrière la TI 57 LED qui exécute un programme équivalent 300 fois dans le même laps de temps.
Que dire en guise de conclusion ? C'est une machine que je trouvais belle avant de l'avoir alors qu'elle est magnifique. C'est assurément la plus belle de ma collection (et la plus complète).
Voir aussi : Photos de ma HP 67