WANG 452

English Version
WikipédiA



Un modèle américain estampillé de 1973. Un superbe calculateur scientifique, programmable et rapide!

Capacités Clavier Calculs arithmétiques Calculs scientifiques Les registres La programmation Mémoire



Capacités
C'est une étonnante calculatrice programmable :
  • Précision sur 13 chiffres, notation scientifique jusqu'à 10^99
  • Calculs scientifiques et statistiques.
  • 16 registres, accès direct et indirect
  • Programmation conditionnelle + un niveau de sous-programme.
  • 64 pas de programme extensibles à 320.
Il y a un connecteur d'extension permettant d'ajouter un lecteur de cartes, le WANG C-10 ou C-11.
Par contre, je ne l'ai jamais vu... Dommage!

Cette série de calculatrices, WANG 400 (avec différents modèles 400, 450, 452, 462) contient une carte mère et différentes cartes filles. Deux sont importantes: Il est à noter que les machines WANG 400 se distinguent l'une de l'autre uniquement par le contenu des ROMs.

Ceci est parfaitement détaillé et expliqué sur le site de
Rick Bensene à cette adresse (en anglais).


Clavier
Le clavier est séparé en 5 zones:
  • Au centre, le pavé numérique pour l'entrée des nombres.
  • Autour du pavé, deux séries identiques d'opérateurs arithmétiques vers les accumulateurs de gauche et de droite.
  • Au dessus, 16 touches multifonctions.
  • Tout en haut, un sélecteur permettant de définir la signification des 16 touches.
  • Vers la droite, une série de touches utilisées principalement lors de la programmation.


Calculs arithmétiques
Calculons l'expression suivante :

On note qu'il faudra conserver des résultats intermédiaires. Organisons nous ainsi: Note: A l'allumage, la machine est dans un état indéterminé. Un appui sur PRIME (touche rouge) la remet à zéro.
Note Accumulateur gauche Accumulateur droit Affichage
Premier calcul intermédiaire
8.9 STORE 43 + 12 ÷=
+4.325000000000
Qu'on stocke à droite STORE
+4.325000000000
Second calcul intermédiaire
52 STORE 4.1 ×=
+213.2000000000
Qu'on ajoute à droite +
+217.5250000000

Précisions:

Calculs scientifiques
Pour cela, il nous faudra utiliser les 16 touches multifonction. Pour leur assigner le rôle des fonctions scientifiques qu'on voit notées sur les deux bandes en fond blanc et noir, on utilisera la bascule blanche ou noire (avec SP vers le bas).
Pour les fonctions blanches, SP vers le bas
et la touche blanche K(x) appuyée
Pour les fonctions noires, SP vers le bas
et la touche noire k(x) appuyée
Calculons l'expression suivante :

Il suffit d'un accumulateur, on prendra le gauche!
Note Accumulateur gauche Affichage
On passe en fonction blanche π
 STORE
+3.141592653590
Calcul du dénominateur
5 X!
+120.0000000000
On divise !
÷=
+.0261799387799
On passe en fonction noire
√X
+.1618021593800

Quelques fonctions particulières:
  • En JAUNE, quatre fonctions avec un opérateur constant "a". Cette valeur "a" est simplement celle de l'accumulateur gauche.
  • En ROUGE, les conversions de coordonnées polaires et rectangulaires.
    • x dans l'accu gauche, y à l'affichage REC->POL renvoit l'angle à droite et le rayon à l'affichage.
    • rayon dans l'accu gauche, l'angle à l'affichage POL->REC renvoit x à l'affichage et y à droite.
  • En VERT, les fonctions statistiques à une variable, pour commencer il faut effacer les registres avec Clear Regs.
    • Pour chaque valeur de la série, on l'écrit à l'affichage et n, Σx, Σx² l'ajoute à la liste en renvoyant le nombre n de données rentrées. On a alors:
      • Registre 0 = n
      • Registre 1 = Σx, la somme des données
      • Registre 2 = Σx², la somme des carrés
    • A tout moment, l'appui sur x̄, σ², σ calcule la moyenne, la variance et l'écart type, on a:
      • Registre 3 = σ², la variance pondérée n-1
      • Registre 4 = σ, l'écart type pondéré n-1
      • Affichage = moyenne, Σx÷n


Les registres
La WANG 452 vos apporte 16 registres numériques. Pour les utiliser, chacune des 16 touches multifonctions représente l'un de ces registres (notez le nombre au centre de l'étiquette). On indique ensuite, avec le sélecteur de fonction, ce que l'on veut faire sur le regsitre en question. La touche SP doit être en position haute sauf pour la fonction Ex (en position basse).
Les fonctions disponibles sont celles déjà connues:
  • T : Total, affiche le registre et le remet à zéro
  • + : ajoute l'affichage au registre, affiche le résultat
  • - : soustrait l'affichage au registre, affiche le résultat
  • × : multiplie le registre par l'affichage, affiche le résultat
  • ÷ : divise le registre par l'affichage, affiche le résultat
  • St : stocke l'affichage dans le registre
  • Re : affiche le registre
  • Ex : echange l'affichage avec le registre
Note: l'accumulateur gauche est le Registre 15, l'accumulateur droit est le Registre 14.

La programmation

Demandez moi un accès à mon Cloud pour obtenir le manuel d'utilisation et des shémas techniques.
Un grand merci à Jan van der Veen pour la copie d'un manuel technique qui m'a permis de compléter mes tables!
Son site se trouve ici.

Pour programmer, on bascule en mode LEARN avec l'appui de la touche correspondante.

L'affichage est celui ci-contre:
  • 4 chiffres pour le numéro du pas (de 0000 à 0063 ou 0319 selon le modèle)
  • 4 chiffres pour le code d'instruction à séparer en deux groupes de 00 à 15 chacun
Touches d'édition

  • PRIME : retour au pas zéro
  • STEP : avance d'un pas
  • SET P.C. : suivi de 4 chiffres, va au pas spécifié
  • SELECT : suivi d'une touche de fonction (ou d'un chiffre si c'est moins de 10)
    • SELECT 5 : Insère un pas, le nouveau a le code 0803 par défaut
    • SELECT 6 : Supprime le pas en cours
    • SELECT 7 : Vérifie le programme (qui doit se terminer par 0914)
    • SELECT 15 : Mode "2 touches" pour l'entrée des programmes en utilisant uniquement les 16 touches de fonctions pour générer les codes de programmation.
    • SELECT 14 : Sort du mode "2 touches".
  • Autre : Génère le code d'instruction et passe au pas suivant.


Convention pour la suite: nn représentera un numéro de registre (de 00 à 15) obtenu avec l'une des touches de fonction.

Fonctions arithmétiques

Fonction Codes
chiffres 0-9 0000 à 0009
point décimal 0010
Set Exp 0011
Change Sign 0012
Clear Regs 0014
Clear Display 0015
Fonction Codes
TOTAL reg nn 01nn
+ reg nn 02nn
- reg nn 03nn
× reg nn 04nn
÷ reg nn 05nn
STORE reg nn 06nn
RECALL reg nn 07nn
Exchange reg nn 14nn
A noter: lorsqu'on utilise l'accumulateur gauche, c'est le registre 15 qui est concerné. Pour l'accumulateur droit, c'est le registre 14.

De ce fait, la touche "+" de l'accumulateur gauche génèrera le code 0215.
La touche RECALL de l'accumulateur droit, génèrera le code 0714.
Fonction indirecte Codes
TOTAL reg *(nn) 1511 + 01nn
+ reg *(nn) 1511 + 02nn
- reg *(nn) 1511 + 03nn
× reg *(nn) 1511 + 04nn
÷ reg *(nn) 1511 + 05nn
STORE reg *(nn) 1511 + 06nn
RECALL reg *(nn) 1511 + 07nn
Exchange reg *(nn) 1511 + 14nn


Fonctions scientifiques

Fonction NoireLOGa(x)LOG10(x)LOGe(x)RAD->DEGSINCOSTAN√Xa^x10^xe^xDEG->RADSIN-1COS-1TAN-1
Codes1200120112021203120412051206120712081209121012111212121312141215

Fonction Blanche×a&PIn, Σx, Σx²REC->POLSINhCOShTANhINT÷aX!x, σ², σPOL->RECSINh-1COSh-1TANh-1ABS
Codes1300130113021303130413051306130713081309131013111312131313141315


Etiquettes et sauts

Fonction Codes Note
LABEL + touche 0900 + xxxx Place une étiquette, la touche est au choix parmi tous les codes possibles.
LABEL + f(x)nn 0900 + 10nn Cas particulier: marque le début de la fonction utilisateur accessible par f(x) + touche fonction. La fonction doit se terminer par RETURN.
LABEL + F(x)nn 0900 + 11nn Cas particulier: marque le début de la fonction utilisateur accessible par F(x) + touche fonction. La fonction doit se terminer par RETURN.


Fonction Codes Note
Goto + touche 0800 + xxxx Saute à l'étiquette xxxx.
GOSUB + touche 1507 + xxxx Saute au sous programme commençant par l'étiquette xxxx
f(x) nn 10nn Appel au sous programme défini par 0900+10nn
F(x) nn 11nn Appel au sous programme défini par 0900+11nn
RETURN 0915 Retour d'un sous programme
GOTO + déplacement 1505 + déplacement Le déplacement peut être prositif ou négatif pour reculer (+/- 127)
GOSUB + déplacement 1506 + --dd + dddd Saut à un sous programme en se déplaçant de dddddd pas (+ ou -)
GOTO indirect 1511 + 00nn saut EN AVANT du nombre de pas indiqués par la valeur absolue du registre nn.


Accès aux fonctions utilisateur


Saut conditionnel Code Action
SKIP IF X=0 0804 Saute les deux pas suivants si l'affichage est nul
SKIP IF X≠0 0904 Saute les deux pas suivants si l'affichage n'est pas nul
SKIP IF X≥0 0805 Saute les deux pas suivants si l'affichage est positif ou nul
SKIP IF ERROR 0905 Saute les deux pas suivants si erreur et efface l'erreur
Les deux pas sautés servent en particulier à l'insertion d'un saut GOTO + étiquette.
Mais ils peuvent être utilisés autrement, par exemple, le rappel d'un registre qui serait le résultat suivi d'un code STOP:
0714    rappelle l'accumulateur droit
0903    stoppe le programme.


Divers

Fonction Code Note
STOP 0903 Met fin à l'exécution du programme.
Fin de programme 0914 Marque la fin physique du programme, pas très utile sauf pour SELECT 07
Pause 0902 + 0903 Affichage pendant 0.5 seconde puis poursuite du programme.
Décalage 0902 + 10nn Multiplie l'affichage par 10^nn
Décalage 0902 + 11nn Divise l'affichage par 10^nn
Pour obtenir les codes suivants:
  • 09nn : touche SP enfoncée, sélecteur 09xx, et appuyez sur la touche de fonction nn
  • 15nn : touche SP enfoncée, sélecteur 15xx, et appuyez sur la touche de fonction nn
  • 08nn : touche SP enfoncée, aucun sélecteur, et appuyez sur la touche de fonction nn


Exemple : test de précision

0000 0002      2  
0001 0000      0  
0002 0614      STORE right	Stocke 20 à droite, ça sera le compteur. 
0003 0002      2  
0004 0615      STORE left	Stocke 2 à gauche, valeur de départ 
0005 0715      RECALL left	(début première boucle) 
0006 1207      √X  
0007 0615      STORE left	Remplace l'accu gauche par sa racine carrée. 
0008 0001      1  
0009 0314      - right		Décrémente l'accu de droite 
0010 0804      SKIP IF X=0 	c'est terminé quand on atteint zéro 
0011 1505 1510 GOTO -6 		retour début de boucle 
0013 0002      2  
0014 0000      0  
0015 0614      STORE right	Remet le compteur à 20. 
0016 0715      RECALL left	(début de seconde boucle) 
0017 0415      ×= left		met la valeur au carré 
0018 0001      1  
0019 0314      - right		Décrémente l'accu de droite 
0020 0804      SKIP IF X=0 	c'est terminé quand on atteint zéro 
0021 1505 1511 GOTO -5 		retour début de boucle 
0022 0715      RECALL left	affiche la valeur finale 
0023 0903      STOP 		Et arrête le programme 
0024 0914      END 		Marque la fin physique du programme 
Toujours le test d'Hebdogiciel.

A partir de 2, on calcule 20 fois la racine carrée.
Puis on remet 20 fois au carré.
On compare avec 2.

Pour lancer le programme, SET P.C. 0000 (retour au premier pas)
Puis touche GO.

Ici le résultat est plutôt bon!



Note pour les sauts: Sur un octet, -6 se note comme 256-6 = 250 = FA = (15)(10).


Exemple : calcul d'intégrale

0000 0900 1000 	LABEL f(x) 00	début de la fonction 00
0002 0600      	STORE 0		borne a dans le registre 0
0003 0915      	RETURN

0004 0900 1001 	LABEL f(x) 01	début de la fonction 01
0006 0601      	STORE 1		borne b dans le registre 1
0007 0915      	RETURN

0008 0900 1002 	LABEL f(x) 02	début de la fonction 02
0010 0615      	STORE 5		valeur n dans le registre 5
0011 0701	RECALL 1
0012 0615	STORE left
0013 0700	RECALL 0
0014 0603	STORE 3		au passage met x=a
0015 0315	- left
0016 0705	RECALL 5
0017 0515	÷= left		   calcule h=(b-a)/n
0018 0602	STORE 2		h dans le registre 2
0019 0000	0
0020 0604	STORE 4		intégrale à zéro
0021 0703	RECALL 3	début de boucle: rappelle x
0022 1015	CALL f(x) 15	calcule f(x)
0023 0204	+ 4		l'ajoute à l'intégrale
0024 0702	RECALL 2	
0025 0203	+ 3		ajoute h à x
0026 0001	1
0027 0305	- 5		décrémente mon compteur n
0028 0804	SKIP IF X=0	si 0, c'est fini
0029 1505 1508	GOTO -8		sinon, retour au début de boucle
0031 0702	RECALL 2	
0032 0404	×= 4		multipie l'intégrale par h
0033 0915	RETURN

0034 0900 1015	LABEL f(x) 15	début fonction à intégrer
0036 1215	X²
0037 0915	RETURN
Pour calculer l'intégrale
On choisit un nombre d'intervalles n et on pose
On dit finalement que , c'est la méthode des rectangles qui est très peu performante!

Dans le programme:
  • a dans le registre 0, on utilise la fonction 00 pour l'initialiser.
  • b dans le regsitre 1, on utilise la fonction 01 pour l'initialiser.
  • h dans le registre 2
  • les différents x=a+ih dans le registre 3
  • l'intégrale I dans le regsitre 4
  • le compteur n dans le registre 5, on l'initialise en lançant la fonction 2 qui calcule également I
  • la fonction 15 sera celle définie par l'utilisateur à partir du pas 0034
Comme exemple, on prend
  • 0 f(x) 00 : initialise a
  • 1 f(x) 01 : initialise b
  • 10 f(x) 02 : calcule avec 10 intervalles, I=+.2850000000000
  • 100 f(x) 02 : calcule avec 100 intervalles, I=+.3283500000000 (2 secondes !)
  • 1000 f(x) 02 : calcule avec 1000 intervalles, I=+.3332833500000 (22 secondes !)

Autre exemple avec
Avec 100 intervalles, on obtient I=+3.16... en 24 secondes.


Mémoire


Représentation d'un nombre en mémoire.

Il occupe 8 octets et est représenté en notation scientifique avec 13 chiffres. Le nibble signs n'utilise que ses deux bits de poids faible.
  • bit 0 = 1 si mantisse négative
  • bit 1 = 1 si exposant négatif
Par exemple, le nombre 452 = 4,52 × 10^2 est codé ainsi:
45 20 00 00 00 00 00 02


Codes et registres supplémentaires!

Présentons deux fonctions supplémentaires :
Fonction Code Note
RECALL 0801 + NNnn rappelle le registre NNnn à l'affichage
STORE 0901 + NNnn stocke l'affichage dans le registre NNnn
Pour les 16 premiers registres, ceci est inutile et inefficace puisqu'il faut deux pas de programme contre un seul avant. Mais, ces instructions donnent accès à de nouveaux registres qui se superposent à la mémoire programme.

  • Avec 64 pas: le registre 16 est aux pas 56-63, le registre 17 est aux pas 48-55 ... jusqu'au registre 23 au pas 0-7
  • Avec 320 pas: le registre 16 est aux pas 312-319, le registre 17 est aux pas 304-311 ... jusqu'au registre 55 au pas 0-7


Jouons avec le registre 16.

D'abord, tapez ce petit programme qui facilitera les opérations RECALL/STORE.
On utilisera la fonction 00 pour RECALL et la fonction 01 pour STORE.

Note: avec 320 pas, remplacez les mentions du pas 0056 par le pas 0312.
0000 0900 1000	  LABEL f(x) 00
0002 0801 0100	  RECALL 16
0004 0915 		  RETURN

0005 0900 1001	  LABEL f(x) 01
0007 0901 0100	  STORE 16
0009 0915 		  RETURN
Essayons ceci :
3 1/x f(x)01
pour stocker 0.33333... dans le registre 16. Editions les pas 0056 à 0063:
0303 0303 0303 0303 0303 0303 0302 0001
Cela signifie 3.333333333333 × 10^-1.

Que se passe t-il si on met autre chose que des chiffres dans ce registre16? Editons au pas 0056 avec ces codes:
1011 1213 1415 1011 1213 1415 1011 1213
Ensuite f(x) 00 pour en afficher la valeur, voyez ci-contre le résultat !

Les valeurs de 10 à 15 affichent ceci:
  • 10 : le point décimal
  • 12 : le +
  • 13 : le -
  • 11, 14, 15 : des espaces


Le mystérieux code 0013

Avec le mode "2 touches" (SELECT 15), on peut créer le code de programmation 0013 inaccessible au clavier sinon.
Que fait-il? Je m'attendais à une fonction cachée, quelque chose d'extraordinaire... Mais il agit comme "Change Sign"... Déception!

Depuis le 15 décembre 2007