La Casio FX-201P est une calculatrice scientifique programmable sortie en 1976. Elle est donc contemporaine des HP 65 et Texas Instruments TI SR 52 ou Texas Instruments TI SR 56. C'est aussi la première calculatrice de poche programmable de la marque. A la même époque, sont aussi sorties : la Casio FX-202P (une 201P avec mémoire continue), la Casio PRO X1 (une 201P avec lecteur de cartes magnétiques) et la Casio PRO 101 (une machine programmable sans fonctions scientifiques avec plus de mémoire que les autres et mémoire continue).
L'affichage est de type VFD (Vacuum Fluorescent Display). Il peut afficher 14 chiffres, mais les 3 à gauche servent pour indiquer le n° de pas de programme en cours (en mode programmation) ou le n° de la mémoire qu'on vient d'utiliser. Les 10 chiffres de droite sont quant à eux utilisés pour les calculs.
Elle dispose de 127 pas de programmes, de 11 mémoires numériques (de 0 à 9 + une mémoire accessible directement [M+] dite mémoire indépendante) et d'une mémoire pour l'adressage indirect. Sa mémoire est volatile, c'est-à-dire qu'elle est réinitialisée à l'extinction de la machine. Le langage n'est pas un LMS (Langage Machine Spécialisé) ni un Basic, mais une sorte de FORTRAN. Le FORTRAN est un langage informatique spécialisé dans le calcul scientifique qui bien que différent du Basic lui ressemble. Il était assez pratiqué dans les années 70 et au début des années 80 mais quand j'ai fait mes études d'informatique au début des années 90 je n'en ai jamais entendu parler.
La machine possède les fonctions scientifiques habituelles et des 3 modes angulaires. Mais comme à l'accoutumée ce qui m'intéresse c'est la programmation, donc je n'en dirai pas plus.
Elle a 3 modes de fonctionnement :
Le mode "Manual" qui permet de faire des calculs et d'utiliser chacune des 11 mémoires.
Le mode "Comp" (pour Compute) qui permet d'exécuter les programmes en appuyant sur la touche START, de faire des calculs mais ne permet pas d'utiliser les 11 mémoires !!!
Le mode "Write" qui permet de saisir les programmes.
Petit aparté pour parler des mémoires. Le stockage en mémoire passe par la touche [ENT] et le rappel par [ANS] (sur les futures productions Casio, la touche ANS permettra de rappeler le résultat du dernier calcul). Lors du stockage en mémoire, le n° de mémoire s'affiche à gauche et une diode rouge s'allume au-dessus de la mention ENT. Même chose lorsqu'on rappelle le contenu d'une mémoire sauf que que la diode s'affiche au-dessus de la mention ANS. Du jamais vu avant ni après.
ci-dessus stockage (8989 ENT 9) et rappel (ANS 9) de la valeur présente en mémoire 9
Lorsqu'on entre un programme sur les Hewlett-Packard et les Texas Instruments non alpha-numériques, les mnémoniques (codes des touches) correspondent aux coordonnées verticale et horizontale de la touche pressée. Par exemple le code 65 correspondra à la touche de la 6ème rangée et de la 5ème colonne.
Sur la Casio, c'est un tout autre système qui a été utilisé. Les codes des commandes apparaissent sous les touches. L1 correspond à [+/-], E2 à [ENT].
Mnémoniques Γ1 à Γ6
Ce système en vaut un autre même si je préfère celui avec les coordonnées des touches. Comme il n'y a pas de touche de fonction seconde, l'inverse et PI ne peuvent être utilisées dans un programme car Γ2 correspond à GOTO en mode WRITE et L2 à K (constante). C'est assez étrange à mon avis. L'édition des programmes se fait avec la touche CHECK qui est l'équivalent de SST sur HP ou TI. Par contre il n'y a pas de BST. La suppression d'un pas se fait en appuyant sur la touche [C] cela passe la machine en mode insertion pour une seule instruction. Autrement l'appui sur une touche écrase ce qui y était avant . Attention à ne pas appuyer sur la touche [AC] (all clear) car elle efface le programme !!!
Exemple de mnémoniques (L2 6 E4). 005 indique que l'instruction E4 est le 5ème pas de programme.
La programmation est un peu bizarre, déroutante au premier abord. Par exemple si on entre : 1 = 2 + 3 cela signifie qu'on additionne les valeurs des mémoires 2 et 3 qu'on stocke dans la mémoire 1. Mais comment fait-on pour ajouter 3 dans la mémoire 1 me direz-vous ? Et bien on utilise la fonction K (pour constante). On aura : 1 = K3. Si on veut stocker 1.2345678 au aura : 1=K1.2345678. Cette notation peux faire penser à celle utilisée en Basic puisqu'on a <variable> = <expression>. Mais en Basic la fonction précède la valeur (exemple A = COS(B)) alors qu'avec la 201P on aura 1 = 0 COS.
Chaque touche compte pour un pas. Il n'y a pas d'instructions combinées comme sur les HP ou les TI et elles sont séparées entre elles par : comme en Basic. A noter que le programme doit se terminer par :. L'entrée des données se fait en utilisant [ENT] et les sorties se font exclusivement par l'affichage du contenu d'une mémoire [ANS]. Il n'y a pas de registre d'affichage x comme sur les TI et HP qui contient le résultat du calcul en cours et qui permettrait de visualiser un résultat intermédiaire (pas d'instruction PAUSE ou R/S des HP et des TI). Les entrées doivent être validées par la touche [ENT] ou la touche [ANS]. Idem pour la visualisation des données en sortie.
L'entrée des données peut être "optimisée". A la séquence ENT 1 : ENT 2 : ENT 3 : qui demande de saisir des valeurs qui seront mises dans les mémoires 1, 2 et 3 on peut préférer ENT 1 : 2 : 3 : qui est plus économe. Même chose pour la visualisation des résultats. On préfèrera ANS : 1 : 2 : 3 : à ANS 1 : ANS 2 : ANS 3 :.
La machine connaît les sauts inconditionnels et conditionnels. Dans les deux cas ils se font vers un label (instruction ST# suivie d'un n° de 0 à 9). Pour les premiers il y a l'instruction GOTO <vers label> (exemple : GOTO 1) et pour les seconds il y a l'instruction IF. Cette instruction est très puissante car elle prend en compte toutes les combinaisons possibles. De plus je la trouve très élégante.
La syntaxe de la commande est : IF <var> = <var ou constante> : va à l'étiquette n si < : va à l'étiquette n si = : va à l'étiquette n si >
- IF 1=K0 : 1 : 2 : 3 va à l'étiquette 1 si le contenu de la mémoire 1 est < à 0, va à l'étiquette 2 si le contenu de la mémoire 1 = à 0, va à l'étiquette 3 si le contenu de la mémoire 1 > à 0.
IF 1=K0 : 1 : 1 : 2 va à l'étiquette 1 si le contenu de la mémoire 1 est <= à 0 et à l'étiquette 2 sinon.
IF 1=K0 : 1 : 2 : 1 va à l'étiquette 1 si le contenu de la mémoire 1 est <> de 0 et à l'étiquette 2 sinon.
IF 1=K0 : 1 : 2 : 2 va à l'étiquette 1 si le contenu de la mémoire 1 est < à 0 et à l'étiquette 2 sinon.
etc... Malin !!!
La Casio FX-201P gère aussi l'adressage indirect. Pour ce faire elle a un "registre" I dédié qui contient le n° de mémoire (de 0 à 9) de l'indirection et une mémoire nommée IM qui contient la valeur. La mémoire IM peut être utilisée comme n'importe quelle autre. Exemple : I = K3 : ENT IM : IM = IM x K30 : ANS IM :. Dans cet exemple les opérations portent sur la mémoire 3.
Elle donne aussi la possibilité d'utiliser des sous-programmes. Ces sous-programmes commencent par l'instruction SUB# suivi d'un n° d'étiquette et ils ne peuvent en appeler un autre. Le n° d'étiquette est commun aux labels et aux sous-programmes ce qui fait qu'un n° utilisé pour un label ne peut l'être pour un sous-programme et vice versa. Etrangement l'appel d'un sous-programme se fait avec un GOTO et encore plus étrange il n'y a pas d'instruction RETURN qui indique la fin d'un sous-programme comme c'est le cas avec HP ou TI. La machine sait qu'il que le sous-programme se termine s'il n'y a plus d'instructions après la dernière ou bien si l'instruction qui suit la dernière est le début d'un sous-programme. Avec l'exemple ci-dessous si on entre 10 la machine affichera 1110.
ENT 0 : GOTO 1 : GOTO 2 : GOTO 1 : GOTO 2 : ANS 0 :
SUB#1: 0 = 0 x K10: SUB#2: 0 = 0 + K10: |
Pour Cette machine offre une fonctionnalité que (là aussi) je n'ai jamais vue sur une autre machine (même Casio). Il s'agit du Manual Jump (MJ pour les intimes). Tout d'abord il ne peut y en avoir qu'un dans un programme et je n'ai pas bien compris son utilité puisque qu'une étiquette et un label peuvent faire la même chose. Mais un petit exemple vaut mieux qu'un long discours. ENT 1 : MJ ENT 2 : 3 : 4 = 1 + 2 + 3 : ANS 4 :. Ce programme demande la saisie de 3 nombres qui sont sommés dans la mémoire 4 qui est affichée à l'écran. Si après l'affichage du résultat on appuie sur MJ alors le programme exécute l'instruction qui suit le MJ programmé et donc demande la saisie de la seconde valeur.
Côté vitesse, mamie n'est pas une foudre de guerre. Le programme 0=K0:ST# 1:0=0+K1:GOTO 1: est exécuté 288 en 60 secondes.
Au final cette machine est déjà intéressante parce que c'est l'ancêtre de toutes les calculatrices programmables Casio. Mais elle l'est plus encore par son modèle de programmation unique qui (heureusement) n'a pas eu de descendance.
Toutefois elle a pour moi des défauts qui font que je préfère les HP ou les TI de la même époque. Ces défauts sont :
-
le fait que les chiffres utilisés seuls font références aux mémoires (absence d'instruction MR x) et qu'on doive donc préfixer les constantes par K (qu'il est très facile d'oublier) pour ne pas les confondre avec les mémoires,
-
le système de mnémoniques que je trouve beaucoup moins parlant que celui des HP ou des TI,
-
l'édition des programmes qui est plus que rudimentaire,
-
le séparateur d'instructions qui prend 1 pas à chaque fois qu'il est utilisé. Ceci revient à plus ou moins diviser par 2 le nombre de pas réellement disponibles. De ce fait il y a de 60 à 80 pas de programmes plutôt que 127. La Casio FX-502P qui suivra quelques années plus tard aura un langage où chaque instruction est un pas de programme et donc plus besoin d'avoir un séparateur d'instructions.
Petit programme qui calcule une factorielle : C'est bizarre. Non ?