dimanche 6 novembre 2016

La TI-89, une calculette au top pour la génération Y

La grosse TI-92 sera restée sans véritable concurrente pendant 3 ans, jusqu'à ce que Texas Instruments dévoile sa TI-89 en 1998. L'embonpoint de la TI-92 avait certainement limité sa diffusion dans les cartables. Pour lever toutes les objections, la TI-89 embarque le même logiciel, mais dans un gabarit proche de la TI-85. Cet air de famille est entretenu avec ses coloris noir/gris/bleu/jaune, et sa disposition de clavier typiquement "Texas". Avec un écran LCD dorénavant précis et bien contrasté, elle atteint parfaitement sa cible marketing : les élèves et les profs vont se l'arracher. La nouvelle TI-89 réussira même à convaincre certains clients fidèles de Texas qui possédaient déjà une TI-92 de première génération ! De nos jours, dix-huit ans plus tard, la TI-89 est encore en vente dans sa version nommée "Titanium" à un tarif assez élevé, compris entre 140 et 200 euros, en fonction des vendeurs. Cela dit, sans aller jusqu'à remettre en cause l'utilité d'une calculatrice formelle aussi chère dans l'enseignement, comme n'hésitent pas à le faire certains de ses détracteurs, force est de constater que l'adjectif "indispensable" n'est pas celui qui convient le mieux à la TI-89.

Le modèle que j'ai sous les yeux est une TI-89 avec le hardware version 2, probablement produite en 1999. Son cœur, à base de Motorola 68000, a été porté à 12 MHz. Après les premiers instants d'hésitation, classiques avec les calculettes haut de gamme, on apprécie la convivialité remarquable de l'engin. Bien entendu, la lecture du manuel, encore en version papier à l'époque, restera bien souvent obligatoire. Le TI-Basic 68k est un langage "facile". Il est néanmoins plus puissant que le TI-83 Basic qui est une variante plus répandue, grâce à son positionnement bas de gamme.

Pour parler un peu d'ergonomie, globalement bonne sur cette TI, on peut tout de même regretter que la saisie alphanumérique soit un peu laborieuse. Mais c'est comme sur toutes les calculettes graphiques à la disposition verticale. Dans le même ordre d'idée, certaines polices microbiennes manquent parfois un peu de lisibilité à l'écran, tout comme la sérigraphie du clavier, qui reste néanmoins dans la norme. Enfin, dernier détail, je trouve dommage que la séquence [Off] puis [On] ne revienne pas exactement dans le même contexte logiciel. Par exemple, on ne revient pas sur le "Program editor" après Off/On, mais directement sur l'écran "Home". Étonnamment, cette même fonctionnalité est bien active lorsqu'on laisse la mise en veille automatique agir, puis que l'on rallume la machine.

Une TI-89 hardware version 2


Comme à l'habitude, pour compléter ce test, j'utilise mon programme de test de primalité simpliste :

premier(n)
Prgm
int(\/(n))->j
If fPart(n/2)=0 Then
Disp 2
Else
 For i,3,j,2
  If fPart(n/i)=0 Then
   Disp i
Return
  EndIf
 EndFor
Disp 1
Endif
EndPrgm


Caractères spéciaux :
\/ correspond à la touche racine carrée
-> correspond à la touche STO>

Le test sur 524287 s’exécute sur la TI-89 en un peu moins de 7 secondes ; un score un peu meilleur que la TI-92, et équivalent à la TI-85. Pour aller un peu plus loin cette fois-ci dans les tests de performance, j'ai écrit un programme de recherche des nombres de Keith. Ils sont beaucoup plus rares que les nombres premiers, et il n'existe pas de formule directe pour les trouver. La seule méthode connue actuellement reste donc la recherche exhaustive. À partir de la saisie d'un entier n1 quelconque, le programme ci-dessous teste si n1 est un nombre de Keith, ou bien affiche le nombre de Keith immédiatement suivant.

mpo39(n1)
Prgm
newList(10)->n
Loop
int(log(n1))+1->l
n1->m
0->s
For i,l,1,(-)1
mod(m,10)->n[i]
s+n[i]->s
int(m/10)->m
EndFor
Loop
i+1->i
If i>l
1->i
2*s-n[i]->m
s->n[i]
m->s
If s>=n1
Exit
EndLoop
If s=n1
Exit
n1+1->n1
EndLoop
Disp string(s)&" est un Keith"
EndPrgm


Caractères spéciaux :
-> correspond à la touche STO>
(-) correspond à la touche grise (-)

Commentaires sur les variables :
- 'l' correspond au nombre de chiffres de 'n1'
- la liste 'n' contient les chiffres de 'n1'
- 's' contient la somme des chiffres de 'n1'
- ensuite, à partir du deuxième Loop, 'n' contient les termes de la suite de Keith (une sorte de suite de Fibonacci). Pour optimiser le calcul de la somme, j'ai considéré la formule suivante :
n[i] = 2*n[i-1] - n[i-l]

Avec la commande "Disp" (avant-dernière ligne du programme), je souhaitais afficher le résultat (variable et texte) sur une ligne unique. J'ai découvert que ce n'est ni trivial, ni spécialement bien documenté dans le manuel Texas. Le symbole '&' est accessible indirectement, via un menu et la touche [CHAR].

J'avais posté ma version en Basic Casio des années 80 sur le forum Silicium.org en 2014. Elle est certes plus compacte, mais moins bien structurée :

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


Enfin, pour comparaison dans la catégorie 68k, voici une version de 28 lignes en GFA Basic pour Atari ST :

DIM n%(10)
DO
  INPUT "N?",n1%
  PRINT TIME$;"  ";
  DO
    l%=INT(LOG10(n1%))+1
    m%=n1%
    s%=0
    FOR i%=l% TO 1 STEP -1
      n%(i%)=m% MOD 10
      ADD s%,n%(i%)
      DIV m%,10
    NEXT i%
    REPEAT
      INC i%
      IF i%>l%
        i%=1
      ENDIF
      m%=SHL(s%,1)
      SUB m%,n%(i%)
      n%(i%)=s%
      s%=m%
    UNTIL s%>=n1%
    EXIT IF s%=n1%
    INC n1%
  LOOP
  PRINT s%;" est un Keith.  ";TIME$
LOOP


Avec le nombre 7000 en entrée, les temps de calcul jusqu'au nombre de Keith suivant (7385) sont les suivants :

- 7min52s sur Casio FX-850P
- 3min58s sur TI-89
- 2min12s sur Casio Z-1
- 4s sur Atari 1040 STF (GFA Basic interprété)

Calcul des nombres de Keith en GFA Basic sur Atari ST


Ce résultat ne peut donc que confirmer la relative lenteur du TI-Basic. Et, malheureusement, la TI-89 d'origine n'embarque pas d'autre langage qui puisse être exploité sans faire appel à un ordinateur externe.

samedi 16 avril 2016

Le retour de Texas Instruments avec la TI-92

Au début des années 90, HP avait un temps d'avance sur ses concurrents, grâce à sa technologie, et au savoir-faire déployé sur ses calculatrices haut de gamme. Mais, en septembre 1995, Texas Instruments revient au tout premier plan avec son modèle phare, la TI-92. Pour atteindre l'objectif fixé, les ingénieurs ont mis de côté le processeur Z80 de la TI-85. Celui-ci restera néanmoins encore la norme pendant plus de vingt ans sur les modèles TI de millieu de gamme. En 1995, pour la première fois, ils choisissent de faire rentrer dans une calculette un Motorola 68000 en version HCMOS. Pour Motorola, ce succès dans les calculatrices grand public sera, en quelque sorte, une renaissance de cette famille de CPU. En effet, à l'époque, la carrière du 68k en tant que coeur de micro-ordinateur venait de s'arrêter. Les derniers Atari Falcon 030 et Macintosh 68k ont étés produits vers 1994. Et en parallèle, Commodore faisait faillite, malgré une diffusion honorable de l'Amiga 1200.

L'interface homme-machine de la TI-92, ainsi que l'ensemble logiciel embarqué en ROM, sont totalement nouveaux et, pour tout dire, révolutionnaires ! Pour preuve, la TI-92 est évoquée dans "L'encyclopédie de la Web culture" en page 84, dans la définition du mot Geek, à côté d'autres "formidables progrès technologiques" comme Atari, Internet et Linux. Sa prise en main est globalement très intuitive ; et la courbe d'apprentissage probablement plus rapide que sur les HP. La collaboration de Texas Instruments avec l'Université Joseph Fourrier a permis d'inclure des fonctions intéressantes pour l'enseignement de la géométrie. D'autre part, le calcul formel est intégré avec un portage 68k du fameux logiciel Derive. Quelques années auparavant, vers 1991, je me souviens qu'une version de Derive pour MS-DOS était installée sur les PC 386 du centre de calcul de l'Université Montpellier II, lorsque je fréquentais cet établissement. Cela dit, je n'ai jamais réellement exploité à fond ce logiciel. J'ai passé plus de temps à programmer en Turbo Pascal 5.0, et en Basic (GFA, 1000D, C61). En 1998, Texas Instrument mettra sur le marché un module d'extension nommé "Plus", pour accroître encore la puissance de la TI-92. C'est le modèle original, avec cette extension optionnelle, que j'ai actuellement sous les yeux. Sa ROM est restée en version 1.01. La TI-92 Plus "complète d'origine" ne sortira qu'en 1999, avec un écran LCD au contraste amélioré.

Étonnamment, cette TI-92 partage plusieurs points communs avec ma vieille PB-1000 :
- ses dimensions respectables, à la limite de la règlementation ; même si celle-ci ne fera plus mention des 21x15 cm à partir de 1999.
- son poids élevé. Avec les piles et le module d'extension, elle atteint 629g sur ma balance, un record !
- sa disposition générale, en mode paysage
- son clavier qwerty très ergonomique ; bien que la virgule, quand on la cherche avec les autres symboles, près du point virgule, soit un peu difficile à trouver
- le faible contraste et la sensibilité aux reflets de son écran (pourtant non tactile)

En fait, la médiocrité de cet écran LCD, n'est pas très surprenante pour l'époque. La HP-48SX et la TI-85, ne font pas mieux en contraste, par exemple. Cela dit, sa résolution de 240×128 pixels, plus que doublée par rapport aux meilleurs pockets de la génération précédente, est plutôt confortable.

Les facteurs de la fonction factor() ne sont plus limités à 65521 sur la TI-92 Plus.  

Mon petit programme de test ci-dessous, en TI-Basic, est quasi identique à celui que j'avais écrit pour la TI-85, à quelques détails de syntaxe près. Par exemple, le symbole double égal '==' disparait. D'autre part, pour plus de rigueur, les boucles "for" doivent dorénavant se terminer par un "endfor", et les "if" par un "endif".

prime(n)
Prgm
int (\/n)->j
If fPart(n/2)=0 Then
Disp 2
Else
For i,3,j,2
If fPart (n/i)=0 Then
Disp i
Return
EndIf
EndFor
Disp 1
EndIf
EndPrgm

Caractères spéciaux :
\/ correspond à la touche racine carrée
-> correspond à la touche STO>

Par comparaison avec les Basics modernes, on peut regretter que l'indentation du programme ne soit pas automatique. A contrario, d'une façon assez inhabituelle, on remarque que des majuscules sont positionnées automatiquement sur les mots clés du Basic, et que le nom des variables est converti en minuscules.

Pour afficher le résultat du test sur le nombre 524 287, il faut 9 secondes environ sur ma TI-92 armée de son 68000 à 10 MHz. S'il s'agit d'un score équivalent à ses contemporaines, comme la HP 48G, on note qu'elle est à peine plus rapide que la PB-1000 de 1986 ! Pour exploiter pleinement cette TI-92, il faudra donc abandonner le TI-Basic.