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 !

Aucun commentaire:

Enregistrer un commentaire