Il serait difficile de parler de la HP-28S sans citer Paul Courbis et Sébastien Lalande (http://www.courbis.fr/Voyage-au-centre-de-la-HP28-c-s.html) : leur boulot de rétro-ingénierie sur cette calculette très "fermée" est énorme. À partir de la documentation technique du HP-71, entre autres, ils ont réussi le miracle de repousser les limites logicielles et matérielles de la HP-28S. La publication de leur bouquin, en 1989, lui ouvrait les mêmes possibilités que la PB-1000 : l'accès au langage machine et les interfaces d'entrées/sorties (port RS-232 bricolé).
Si vous avez lu mon article précédent, vous connaissez une partie des raisons de mon choix en faveur de la PB-1000. Vingt-cinq ans plus tard, après avoir longuement testé la HP-28S, c'est sans hésitation que je maintiens la PB-1000 sur la plus haute marche du podium des meilleures calculatrices des années 80 ! Si vous n'êtes pas d'accord, vous pouvez donner vos arguments dans la zone des commentaires ci-dessous :-)
Une des principales difficultés de la HP-28S, c'est son ergonomie. J'ai eu beaucoup de mal à m'y faire. Le simple fait que la ROM soit très chargée, avec des programmes pas toujours indispensables, rend les fonctions essentielles plus difficiles d'accès. Par exemple, il faut passer par un menu pour accéder aux fonctions trigonométriques et logarithmiques. Pour la programmation, à moins de connaître par coeur les commandes et de les taper en toutes lettres, la navigation dans ces menus hiérarchiques devient vite lourdingue.
Le langage RPL a été inspiré, de loin, par LISP et surtout par FORTH. Du coup, c'est structuré, et la fameuse instruction GOTO n'est pas implémentée. Cela dit, à mon faible niveau d'expérience avec le RPL, j'estime qu'il n'est pas spécialement plus lisible que le BASIC. Pire, les séances de debugging sur HP-28S sont affreusement laborieuses. Du coup, il vaut mieux éviter les gros programmes. Par voie de conséquence, on aurait tendance à multiplier les petits sous-programmes qui s'appellent entre eux (notion similaire à des fichiers indépendants). Mais attention, ça peut vite devenir le bordel dans le nommage et l'organisation hiérarchique utilisateur !
La HP-28S et son clavier alphabétique |
Voici une implémentation "naïve" de mon programme en RPL :
<< -> N
<< N \/ IP 'J' STO
IF N 2 / FP 0 ==
THEN 2
ELSE 3 'I' STO
WHILE I J <=
REPEAT
IF N I / FP 0 ==
THEN 0 'J' STO
ELSE I 2 + 'I' STO
END
END
IF 0 J ==
THEN I
ELSE 1
END
END 'I' PURGE 'J' PURGE 440 0.5 BEEP
>>
>>
- '->' correspond à l'affectation d'une variable locale (touche rouge et 'U')
- les symboles '<<'et '>>' sont les délimiteurs de programme
- '\/' correspond à la racine carrée (touche rouge et '-')
- '<=' est le symbole inférieur ou égal (touche rouge et 'S')
Le test sur le nombre 524 287 s'execute en 33 secondes environ, avec cette version non optimisée de mon programme, sur le CPU Saturn 4 bits cadencé à 1 MHz de la HP-28S. C'est plus lent que les dernières CASIO 8 bits que j'ai testées ! Cela dit, comme l'avaient découvert Courbis et Lalande, la HP-28S d'origine est "underclockée", probablement pour économiser les piles. Par ailleurs, on m'a fait remarquer dans les commentaires ci-dessous que le fait d'utiliser la commande STO dans une boucle est une mauvaise idée (décalages mémoire). Il est donc préférable d'exploiter la pile dans les programmes RPL.