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