lundi 25 septembre 2017

Elle est libre la WP-34S

Au rythme où je publie les articles dans ce blog, je risque d'avoir du mal à couvrir l'ensemble de ma collection ; même si elle s'agrandit plutôt lentement. La calculatrice que je teste aujourd'hui, bien que très proche des productions HP, n'a jamais été commercialisée officiellement par la marque. Il s'agit de la fameuse WP-34S, que j'ai acquise en 2013. Mon exemplaire est basé sur le hardware de la HP-30b ; mais la HP-20b (à ne pas confondre avec la HP-20S) conviendrait également. La principale différence entre la HP-30b (calculette financière) et la WP-34S (avec S comme scientifique) provient du firmware de cette dernière, qui est diffusé sous licence GPLv3. Ce logiciel a été développé par deux allemands et un australien, tous trois probablement nostalgiques des calculettes RPN : Walter Bonin, Marcus von Cube, et Paul Dale. Mais d'autres contributions au projet sont également notables. Par exemple, celles des américains Eric Rechlin et Gene Wright, qui ont respectivement réalisé les overlays en vinyl, et diffusé des câbles de programmation spécifiques. Dans la genèse de la WP-34S, on peut aussi mentionner le rôle important de Cyrille De Brébisson (HP) qui, dès 2008, avait mis à disposition l'indispensable kit de développement (SDK). Celui-ci était initialement prévu pour la création par les équipes HP du firmware officiel de la HP-20b. Cette démarche, louable, reste exceptionnelle chez les fabricants de calculettes. Et elle ne devrait pas se développer outre mesure dans les années à venir ; peut-être à cause des nouvelles règles aux examens, qui tendent à verrouiller de plus en plus les calculatrices autorisées.

La HP-30b originale a été fabriquée en Chine entre 2010 et 2012 environ. Cependant, grâce aux stocks des distributeurs, il a été possible d'en acheter des neuves au moins jusqu'en 2014. En 2017, on trouve assez facilement des produits reconditionnés à partir de 30€ environ. Cette calculatrice est l'une des rares sur lesquelles on peut flasher un firmware personnalisé, non contrôlé par le constructeur. En sus, quelques améliorations hardware sont possibles. Par exemple, sur la mienne, un cristal de quartz 32,768 kHz et deux condensateurs ont été soudés sur la carte mère. Cette modification permet au firmware de la WP-34S d'accéder à une horloge interne précise. La fonction chronomètre, qui n'est pas si courante sur les calculatrices, est ici directement accessible en deux touches : [CPX] puis [R/S]. Certains utilisateurs de la WP-34S ont également ajouté un port infrarouge pour pouvoir connecter une imprimante. D'autre part, il existe un adaptateur USB interne pour la WP-34S, développé par Harald Pott. Il permet de se passer du câble série d'origine, à la connectique très spécifique. Je possède un exemplaire de ce fameux câble HP qui est équipé d'un bouton "Reset" et d'un bouton "Erase". Comme il n'est plus fabriqué, il pourrait dorénavant être difficile de s'en procurer un. Seulement voilà : on se rend compte rapidement que la WP-34S n'est pas spécialement prédisposée à l'échange régulier de données avec un ordinateur. Néanmoins, ce câble m'a permis de mettre à jour sans encombre le firmware de ma WP-34S en version 3.3. On peut noter que l'ouverture du boîtier de la calculette par l'arrière ne nécessite pas d'outil. Le branchement se fait ensuite avec la prise perpendiculaire à la machine ; ce qui est moyennement pratique, comme on peut le constater sur la photo ci-dessous.

Câble WP-34S (RS-232 prise DB9)

Les piles sont de banales CR2032 montées en parallèle. Lorsqu'elles sont en fin de vie, cette connectique permet de les changer une par une sans effacer l'espace des 2 Ko de RAM sauvegardés par piles. L'afficheur LCD sur deux lignes, malgré une bonne lisibilité, reste quelque peu décevant de nos jours. En effet, la petite matrice graphique, en haut, ne fait malheureusement que de 43 x 6 pixels. Les nombres sont affichés la plupart du temps sur la ligne du bas à segments classiques (12 chiffres de mantisse + 3 chiffres d'exposant).

L'afficheur LCD de la WP-34S

Ces limitations ont pour conséquence, par exemple, que la lecture complète de tous les chiffres significatifs nécessite de faire défiler avec la flèche jaune ou la flèche bleue. Par ailleurs, ces dernières ne sont pas en accès direct sur le clavier ; ce n'est pas très ergonomique. La forme des touches physiques de la WP-34S ressemble à celle des touches de la HP-28S, mais la machine chinoise du XXIe siècle est à cent lieues du silence et du confort de la "vraie HP" fabriquée aux USA en 1988. Et malgré des dimensions d'écrans LCD comparables, on regrette, bien entendu, de ne pas disposer d'un affichage graphique similaire à celui de la HP-28S. Enfin, pour terminer sur ma description sommaire du hardware de la WP, on peut noter que son CPU est un ARM 7 fabriqué par Atmel. Il est cadencé à une fréquence variable comprise entre 32 KHz (économie d'énergie) et 40 MHz. Cette valeur élevée est une excellente surprise sur une calculatrice positionnée plutôt en bas de gamme. Pour le logiciel embarqué, on devra toutefois se contenter des 128 Ko de la ROM "flashable" et de 6 Ko de RAM au total ; ce qui la rapproche du Sharp PC-1500 de 1984 que j'ai testé précédemment.

À l'usage, les concepts en notation RPN implémentés sur la WP-34S reprennent ceux qui avaient fait le succès de la toute première machine programmable que j'ai testée dans ce blog, à savoir la HP-25 de 1976. La programmation en mode séquence de touches est relativement simple, bien qu'elle puisse déboucher sur du code spaghettis, à partir d'une certaine complexité.

Mon packaging WP-34S de collectionneur n'aurait pas été complet si je n'avais pas commandé le gros manuel broché de Walter Bonin (version imprimée pour le firmware 3.2). Ses 244 pages en couleur au format "US letter" pourront êtres lues sans lunettes par les néo-presbytes, dont je fais partie. Et en complément, il existe un manuel aide-mémoire, d'un format plus en adéquation avec la petite taille de la WP-34S, écrit par Andrew Nikitin : http://nsg.upor.net/sys/wp34s/pocket-reference.html. Avec les retouches de zpalm, je m'en suis imprimé un exemplaire en double face sur papier classique (pliage, découpage au massicot, et deux agrafes au milieu).

Comme la bibliographie sur la WP-34S n'est pas colossale sur le net, je vous recommande le visionnage de la présentation de Marcus Von Cube au HHC 2011: "How WP 34S Came Into Existence", et également la présentation de Jake Schwartz au HHC 2012 : "The WP-34S and the HP Calculator Way" (vidéo).

Mon programme habituel, sur ce blog, de test de primalité, est à peu près identique à celui que j'avais écrit pour la HP-15C en 2012. Ici, j'ai supprimé les commentaires, mais je n'ai pas cherché à optimiser quoi que ce soit, pour ne pas fausser la comparaison. Le programme ci-dessous occupe donc également 39 pas. D'autre part, on peut utiliser des labels numériques sur la WP-34S, mais sur deux caractères :

001  ENTER
002  STO 00
003  2
004  STO 02
005  /
006  FP
007  x=0?
008  GTO 02
009  3
010  STO 02
011  ENTER
012  RCL 00
013  \/x
014  IP
015  STO 01
016  LBL 00
017  x>=? Y
018  GTO 01
019  GTO 03
020  LBL 01
021  RCL 00
022  ENTER
023  RCL 02
024  /
025  FP
026  x=0?
027  GTO 02
028  2
029  STO+ 02
030  RCL 02
031  ENTER
032  RCL 01
033  GTO 00
034  LBL 02
035  RCL 02
036  RTN
037  LBL 03
038  1
039  RTN

Dans le listing ci-dessus, j'ai représenté la touche racine carrée par "\/x".


Avec le nombre 524287 en entrée, le résultat 1 (=> nombre premier) s'affiche en à peine plus d'une seconde sur la WP-34S. Pour obtenir une mesure plus précise, j´ai ajouté quelques instructions qui permettent de faire appel à l'horloge interne de la calculette : j'obtiens une durée d'exécution comprise entre 11 et 15 ticks en mode FAST (1 tick = 0,1 seconde), et jusqu'à 17 ticks en mode SLOW. C'est la calculatrice la plus rapide que j'aie testé jusqu'à présent ! Seul l'Atari ST faisait mieux... mais il ne peut pas fonctionner sur une seule pile 3V, et sa consommation est très supérieure à 0,25 mW.

Parmi les autres programmes que j'ai créés pour la WP-34S, le plus long, en nombre de pas, est celui que j'avais publié en avril 2014, titré "Le petit professeur sort enfin du Texas", dans la Gazette des Pocketiquaires numéro 3 (page 55). Il s'agissait d'un remake du jeu électronique bien connu "Little Professor", édité par Texas Instruments en 1976. Dans le listing que j'ai publié, attention à la saisie de la ligne 118, par exemple, que j'ai notée de la façon suivante :

118 [alpha]IP 02

Il s'agit d'une fonction qui est est bien décrite dans le manuel :

Fonction [ALPHA]IP sur WP-34S
Petite astuce : pour accéder plus rapidement dans le catalogue de la WP-34S aux fonctions commençant par une lettre grecque comme α, on peut appuyer sur la touche [g], pour l'alphabet grec, suivie des lettres voulues. Ici, on pourra donc utiliser la séquence de touche suivante pour un accès direct à cette fameuse fonction AIP :

[h][X.FCN][g][α][I]

Il faut procéder assez rapidement entre les touches [α] et [I] ; sinon on revient aux fonctions qui commencent par 'I'.

En conclusion, le projet WP-34S était une excellente idée, dont la réalisation finale est très aboutie, malgré le hardware HP un peu limité. Certes, cette machine n'est pas destinée à tous les utilisateurs, mais les plus expérimentés sauront en extraire la substantifique moelle.

samedi 28 janvier 2017

Le Sharp PC-1500, machine mythique des années 80

L'ordinateur de poche que j'ai sous les yeux aujourd'hui est un Sharp PC-1500A. Cette machine fut fabriquée entre 1984 et 1985. Avec ce 'A', la firme d'Osaka apporte au moins quatre améliorations au PC-1500 qui avait été présenté dès 1981 :
  • la quantité de RAM d'origine a été augmentée
  • la couleur est brun plus sombre en haut de la façade alu
  • la sérigraphie est légèrement différente
  • quelques corrections ont été réalisées dans la ROM 

Le microprocesseur est toujours le LH5801 CMOS, avec son jeu d'instruction proche du Z80. Il reste cadencé à 1,3 MHz. Du côté de la RAM, le PC-1500A, armé de 8,5 Ko au total, dont seulement 6144 octets pour l'utilisateur, et 5946 octets pour le Basic, bridera toute velléité de programmation trop complexe. Un module d'extension pourra même devenir rapidement indispensable.

Loin du style rébarbatif de certaines documentations, les manuels Sharp présentent un contenu très pédagogique, avec une bonne dose d'humour. Le mini clavier qwerty du PC-1500, à touches décalées, est plutôt confortable. Cependant, pour éviter la frappe fastidieuse de certaines commandes, les concepteurs ont imaginé un système d'abréviation des commandes Basic. Les mnémoniques, à 1 ou 2 caractères, sont faciles à mémoriser. Par exemple, voici quelques instructions d'usage fréquent :

G. GOTO
I. INPUT
N. NEXT
P. PRINT
R. RUN
T. THEN

L'indication discrète du niveau des piles, par un point en haut de l'écran LCD, est assez peu fréquente pour que je la signale ici. Le mode réserve, qui permet de mémoriser des mots clés, ou des phrases, est également spécifique à cette lignée de machines.

Sharp PC-1500A

Le PC-1500A offre donc un environnement simplifié idéal pour apprendre la programmation et les concepts universels que l'on doit à John Von Neumann. Et avec toutes ces qualités, je m'étonne que les machines de poche japonaises n'aient jamais été retenues par l'Éducation Nationale française pour équiper les lycéens et les enseignants des années 80. J'ai retrouvé quelques prix pratiqués à l'époque :
  • Thomson MO5 : 2390 francs   (le choix de l'Éducation nationale, en 1985)
  • Sharp PC-1500A : 2200 francs
  • Casio PB-700 avec module OR-4 : 2090 francs

Par rapport à sa concurrente Casio, le graphisme sur l'écran LCD du PC-1500 est limité à 156x7 pixels. Ceci pourra éventuellement être compensé par l'imprimante traceur à 4 stylos de couleur ; la Sharp CE-150. Par ailleurs, pour les bidouilleurs, le PC-1500, grâce aux fameuses instructions PEEK, POKE et CALL, présente un avantage déterminant sur la très verrouillée Casio PB-700. En effet, celles-ci permettent l'accès total au système et au langage machine LH5801. Toutefois, on ne disposera pas du confort d'un assembleur intégré, comme c'est le cas sur la Casio PB-1000. Dans les années 80, le succès planétaire des machines Sharp a permis l'éclosion de nombreuses publications et livres qui leur étaient dédiés. Par exemple, j'ai sous la main "Basic, Système et Langage Machine - Voyage à l'intérieur du Sharp PC-1500/A" de Jean-Christophe Krust (1984). Ce bouquin détaille, entre autres, la structure mémoire de l'afficheur LCD, que je me suis amusé à redessiner en couleur ci-dessous. Les 156 colonnes de 7 pixels sont codées d'une façon que je qualifierais de "non triviale", répartis en deux blocs de 78 octets :
  • bloc 1 : à partir de l'adresse &7600 jusqu'à à &764E
  • bloc 2 : de &7700 à &774E

Chacun de ces blocs code simultanément deux parties non contiguës de l'afficheur :
  • le bloc 1 (en bleu et rose sur la figure) contrôle l'affichage des colonnes numérotées à partir de la gauche, de 0 à 38, et de 78 à 116. 
  • le bloc 2 (en vert et jaune) contrôle l'affichage des colonnes de 39 à 77, et de 117 à 155

Carte mémoire de l'afficheur LCD du Sharp PC-15000

Les octets pairs correspondent aux 4 pixels du haut de l'afficheur (exemple encadré en rouge). Tandis que les octets impairs contiennent l'information pour les 3 pixels du bas ; avec leur dernier bit qui n'est pas utilisé.

Enfin, un ultime effet Kiss Cool qui ne facilite pas la représentation mentale, chaque octet est coupé en deux :
  • les 4 bits de poids faible de chaque octet sont pour la partie gauche de l'afficheur 
  • les 4 bits de poids fort pour la partie droite, adressée par le même bloc

Comme on peut le visualiser sur la figure, j'ai choisi pour l'exemple 4 pixels de l'écran, qui peuvent être noircis en deux POKE :

10:POKE &7600,32
20:POKE &7703,81
30:IF INKEY$ <>" "THEN GOTO 30
40:PRINT POINT 118

L'instruction Basic "POINT" permet de connaître l'état des pixels affichés. Ici, le résultat retourné pour la colonne 118 sera 80 (soit 01010000 en binaire). Avez-vous suivi mon explication ? :-)

À l'instar de sa descendance, le Sharp PC-1500 ne dispose pas de la fonction modulo. J'ai donc adapté mon programme de test de primalité à partir de la version PC-E500 :

10:INPUT "N?",N
20:J=INT (SQR (N)):I=2
30:IF (N-2*INT (N/2))=0THEN 80
40:FOR I=3TO JSTEP 2
50:IF (N-I*INT (N/I))=0THEN 80
60:NEXT I
70:BEEP 1:PRINT "1":GOTO 10
80:PRINT I:GOTO 10

Avec 2701 en entrée, qui n'est pas un nombre premier, ce programme répond "34" très vite. Mais avec 524287, qui est premier, le programme répondra "1" (son plus petit diviseur)  au bout de 26 secondes. C'est un chrono dans le même ordre de grandeur que sa contemporaine, la Casio PB-700. Pour chipoter, on remarquera rapidement que certains espaces insérés automatiquement par l'éditeur sont parfois superflus sur cet écran de 26 caractères de large. Pour compléter mes tests sur le PC-1500A, j'ai également porté mon programme de recherche des nombres de Keith :

10:DIM N(10)
20:INPUT "N?",N1
30:L=INT (LOG N1)+1:M=N1:S=0
40:FOR I=LTO 1STEP -1
50:N(I)=M:M=INT (M/10):N(I)=N(I)-10*M:S=S+N(I):NEXT I
60:I=I+1:IF I>LTHEN LET I=1
70:M=2*S-N(I):N(I)=S:S=M:IF S<N1THEN 60
80:IF S=N1THEN BEEP 1:PRINT S;" est un Keith":END
90:N1=N1+1:GOTO 30

Avec 7000 en entrée, on obtient "7385 est un Keith" en un peu plus de 9 minutes. La hiérarchie établie au test précédent est respectée : malgré sa fréquence de CPU un peu plus élevée, la Sharp PC-1500 (1981) est donc un peu plus lente que la Casio FX-850P (1987).