samedi 26 janvier 2013

Le Graal pour un élève ingénieur en informatique : la CASIO Z-1

Je teste aujourd'hui la très surprenante CASIO Z-1. C'est une machine plutôt rare en France, qui est sortie vers 1991 au Japon (peut-être 1992 ?). On considére que c'est une déclinaison "low cost", spéciale pour l'éducation Japonaise, de la FX-890P (1991). Sur les rares articles qui concernent cette série sur le net, on peut lire que l'écran, d'une résolution identique à celui de la PB-1000, est d'un meilleur contraste sur les FX-890P et Z-1GRa.

Le CPU de cette Z-1 est un Intel 80L188EB, cadencé à la modeste fréquence de 3,68 MHz ; et non 8 MHz comme je le pensais au début (fréquence maximale supportée par ce CPU). En effet, sur la carte mère de la Z-1, un oscilateur externe à 7,37 MHz est connecté à la broche CLXIN du CPU (schéma extrait du manuel  https://app.box.com/s/pwuubkr3nkxccpbolzvp ; la résolution de l'image est moins bonne en prévisualisation que si vous la téléchargez carément). Et comme l'indique la datasheet Intel, l'oscillateur doit opérer à deux fois la cadence requise par le processeur. Cela dit, c'est déjà plus rapide que la plupart de ses contemporaines. Intel a souvent été au top sur le rapport performance/prix dans son histoire. Alors, on peut critiquer certaines mochetés des architectures x86 (gestion de la RAM, registres internes, etc.), et on peut toujours comparer avec l'élégance des architectures Motorola, ou autres. Mais si on regarde la réalité du marché des calculettes, le Motorola 68000 en version CMOS ne sera réellement exploité qu'à partir de la deuxième moitié de la décennie 90 par Texas Instrument.

En lisant d'autres articles (forum http://www.silicium.org/forum/viewtopic.php?f=64&t=31900), il semblerait bien que cette Z-1 contienne également une mystérieuse puce nommée COMET. On peut s'autoriser à penser qu'il s'agit du hardware nécessaire au fonctionnement du langage CASL, défini par le ministère de l'éducation japonais. Cela dit, comme les quatre manuels, que je possède, n'existent qu'en version japonaise, il m'est difficile d'écrire le moindre programme en CASL !

À propos de l'ergonomie générale du Z-1, on est proche de la PB1000, donc j'adore ! Physiquement, la machine est assez épaisse, plutôt massive. Du coup, elle est stable. Le clavier est vraiment sympa pour taper du code. On pourrait juste regretter la perte de l'accès direct à la touche [Memo]. Mais il nous reste quand même les essentielles fonctions de recherche et de copier/coller (basiques). Plus gênant : on a perdu le gestionnaire de fichiers qui permettait de nommer les programmes avec des noms plus parlants que P0 à P9 et F0 à F9.

La Casio Z-1 et son confortable clavier, au look "japonais".

L'usage courant est toujours fluide et très efficace. On bascule entre les diffŕents modes (calcul & programmation) avec un nombre réduit de touches. Voici un cas d'usage :

1) à partir du mode calcul direct, pour reprendre l'édition du dernier code source C, 3 touches :
  [MENU][3][S] (S pour Source)
2) pour lancer ce programme, 3 touches :
  [SHIFT][SUB MENU][R] (R pour Run)
3) pour le rééditer à la ligne de l'erreur (si erreur il y a), 3 touches :
  [SHIFT][EDIT][ENTER]

Il y a juste un petit piège en mode éditeur : si on oublie qu'on a appuyé sur la touche [S] rouge qui maintient le Shift enfoncé (contrairement à l'autre [SHIFT], que l'on doit utiliser simultanément avec une autre touche, à deux doigts), et si on ne fait pas gaffe à l'indicateur [S] allumé sur le bord gauche de l'écran ; alors il peut arriver que l'on efface toute la ligne courante (L.CAN = Line Cancel) en appuyant juste sur [BS]. Le "Undo" sur ce type d'action n'a pas été implémenté, dommage !

Pour fixer tout de suite les idées sur les performances, voyons ce que donne mon programme habituel sur le 7ème nombre premier de Mersenne (M7 = 524 287), en Basic :

10 INPUT"N?",N
20 J=INT(SQR(N)):I=2
30 IF FRAC(N/2)=0 THEN80
40 FOR I=3 TO J STEP 2
50 IF FRAC(N/I)=0 THEN80
60 NEXT I
70 BEEP:PRINT"1":GOTO10
80 PRINT I:GOTO10


Le résultat "1" est obtenu en 3 secondes environ ! 15 ans plus tard, la HP-50G programmée en RPL ne fera pas mieux.

Avec le langage C, il faut bien sûr faire attention aux types des variables : un entier de type "int" est codé ici sur 16 bits (processeur 16 bits), alors que le "long" est en 32 bits. Un autre petit truc : sur la photo de la Z-1 vous aurez peut-être remarqué qu'il manque le caractère backslash '\' sur le clavier. Backslash est utile en C pour écrire certains caractères spéciaux (\n, \r, etc.). Sur la Z-1, on peut le remplacer par le symbole ¥ (= symbole Yen, même code ASCII que backslash : CHR$(92) en Basic).

main() {
 double n,q;
 long i,j,intq;
 printf("n?");
 scanf("%lf",&n);
 j=(long)(sqrt(n));
 q=n/2;
 intq=(long)q;
 if ((q-intq)==0) {
  printf("2");
 } else {
  i=3;
  while (i<=j) {
   q=n/i;
   intq=(long)q;
   if ((q-intq)==0) {
    j=0;
   } else {
    i+=2;
   }
  }
  if (j==0) {
   printf("%ld",i);
  } else {
   printf("1");
  }
 }
}


En C, on aurait pu s'attendre à une nette amélioration des performances, mais il n'en n'est rien : mon test habituel s'éxecute en plus de 5 secondes. N'oublions pas qu'il s'agit d'un C interprété. À l'instar de toutes les autres calculettes, le Z-1 n'intègre pas de compilateur, juste un assembleur embarqué. Je sais bien que mon code C est naïf, et qu'il n'est pas non plus optimisé sur la taille. Mais si vous avez des suggestions, n'hésitez surtout pas à utiliser l'espace commentaires ci-dessous !

samedi 19 janvier 2013

La CASIO FX-7500G : un petit format et 140g seulement, avec les piles

Cette petite calculatrice m'a coûté plus de 12 € (trois piles) pour la remettre en service, mais je crois que je me suis fais un peu avoir par le commerçant du quartier. En effet, ces piles CR2025 sont moins chères sur internet. L'opération d'échange nécessite d'ouvrir la calculatrice avec un petit tournevis. Mais leur logement est bien foutu : la visserie miniature et les fixations en métal inspirent confiance. Cette conception CASIO, très compacte, est beaucoup plus rassurante que la languette de fermeture à piles mal fichue de la HP-28S, par exemple. Cette dernière est pénible à manipuler sous la pression d'un ressort, et elle vieillit assez mal. Indigne de la marque Hewlett ?

Bref, revenons à ma FX-7500G de 1988 qui fonctionne toujours parfaitement, comme toutes mes calculatrices de la même époque. Son clavier est tout plat, avec de minuscules reliefs, du style écriture braille (mais ce n'est pas du braille, dommage). Et même s'il n'est pas hyper agréable, ce clavier reste relativement fiable. Les fonctions essentielles sont bien disposées, sauf les lettres alphanumériques (normal pour ce type de calculette). En fait, il n'y a pas plus de fonctions que ce qui apparaît sur la sérigraphie. Donc, rien de très excitant : juste l'essentiel pour passer les examens, et 4 Ko de mémoire.

L'écran graphique est capable d'afficher 8 lignes de calculs (4 calculs + 4 résultats). Mais, comme sur la FX-4000P, qui est de "puissance" équivalente, il n'est pas possible de rééditer plus loin que le calcul précédent. Ce système est donc moins avancé que les 8 lignes virtuelles de la FX-850P, par exemple.

La FX-7500G extra plate

Mon petit programme de test sur les nombres premiers, est strictement identique à celui que j'avais développé pour la FX-4000P :

Lbl 0:"N":?->N:Int (\/N)->J:2->I:Frac (N/2)=0=>Goto 1:3->I:
Lbl 3:I>J=>Goto 2:Frac (N/I)=0=>Goto 1:I+2->I:Goto 3:
Lbl 1:I&Goto 0:
Lbl 2:1&Goto 0


Caractères spéciaux :

- '->' correspond à l'affectation d'une variable (au dessus de J sur le clavier)
- '\/' correspond à la racine carrée (tout en haut)
- '=>' est l'implication ([shift] [7])
- '&' est le triangle pause ([shift] [:])

 Le calcul sur le nombre premier 524 287 s'éxecute sur cette FX-7500G en 10 secondes environ. Ce qui est une excellente performance !