Bull Gamma 3

Ordinateur de première génération Bull Gamma 3

Le Gamma 3 est un calculateur électronique conçu par la Compagnie des Machines Bull et commercialisé à partir de 1952.

Bull Gamma 3
Vue intérieure du Gamma 3, montrant les alimentations sur la gauche, et les tiroirs de circuits électroniques sur la droite
Fabricant
Compagnie des Machines Bull
Date de sortie
1952
Date de retrait
1962
Fonctions
Type
Calculateur électronique, puis ordinateur (Gamma ET)
Génération
Première génération
Unités vendues
Plus de 1200
Caractéristiques
Alimentation
3 x 220V (unité centrale), consommation de 3kW (UC seule)
Processeur
Circuits logiques à tubes et diodes au germanium, 281 kHz, 48 bits, bit-série
Mémoire
7 registres de 48 bits (12 caractères BCD), mémoire tambour de 49 à 98 ko (Gamma ET), mémoires à ligne à retard de 64 à 128 mots
Mesures
Dimensions
155 cm x 150 cm x 68 cm
Masse
900 kg

Initialement conçu comme accélérateur électronique pour les tabulatrices électromécaniques, à l'instar de l'IBM 604, il fut progressivement enrichi de nouveaux dispositifs jusqu'à devenir un ordinateur de première génération (Gamma AET, 1955, puis ET, 1957), plus précisément une machine Von Neuman à programme enregistré[1]. Les termes d'ordinateur et d'informatique n'existant pas encore, Bull désigna le Gamma ET comme un "ordonnateur".

Au cours des dix ans de sa carrière, cette machine considérée comme charnière permis la transition entre la mécanographie et l'informatique, et entre le calculateur et l'ordinateur[2].

Le Gamma 3 fût un succès commercial, avec plus de 1200 unités produites, faisant également de ce dernier le premier ordinateur produit à plus de 1 000 exemplaires[3],[4].

Historique

modifier

Jusqu'aux années 1950, la Compagnie des Machines Bull, à l'instar de son rival IBM, commercialise majoritairement des tabulatrices à carte perforée destinées à la gestion des stocks, la paye, et la comptabilité.

Ces tabulatrices réalisent les opérations arithmétiques via une série de roues de totalisation, incrémentées par un dispositif électro-mécanique. Seule l'incrémentation, et donc l'addition, est supportée; les soustractions et multiplications s'avèrent donc particulièrement lentes[5].

Afin d’accroître la vitesse de calcul, et donc de ne pas retarder la lecture des cartes perforées lors des opérations plus complexes, un accélérateur pouvant s'affranchir des limites électro-mécaniques devient nécessaire.

À partir de 1949, la Compagnie Bull s'intéresse aux tubes à vide pour leur vitesse de commutation par rapport aux roues totalisatrices et aux relais électromécaniques. Le calculateur est conçu à partir de circuits logiques comprenant environ 400 tubes, 8000 diodes au germanium et des registres de 48 bits constitués de lignes à retard électriques, afin de réduire la dépendance aux tubes électroniques, plus fragiles[6]. L'ensemble est cadencé par une horloge à une fréquence de 281 kHz[7], une vitesse alors significativement supérieure aux 50 kHz de l'IBM 604, et plusieurs ordres de grandeur plus rapide que les dispositifs électromécaniques. La vitesse d'exécution pour l'addition de deux nombres binaires varie entre 0,6 ms et 10 ms, avec une vitesse moyenne de 2 ms[7]. Le Gamma 3 est connecté à la tabulatrice par un câble branché en lieu et place de son tableau de connexion (instructions du programme); le programme est donc installé sur le Gamma 3 plutôt que sur la tabulatrice.

Néanmoins, si le Gamma 3 est programmable par un tableau de connexion amovible analogue à ceux des tabulatrices, il n'en reste pas moins un périphérique de ces dernières et non l'inverse. De plus, bien qu'électronique, binaire et programmable avec un jeu d'instruction Turing-complet, le Gamma 3 ne pouvait fonctionner par programme enregistré et sa programmation dépendait du tableau de connexion.

Une première évolution vers l'ordinateur apparaît avec le Programme Par Carte (PPC), apportant la possibilité d’exécuter un programme chargé par carte perforée, plutôt que câblé sur un tableau de connexion. Ce concept est également expérimenté par IBM avec l'extension CPC (Card Programmed Calculator) ajoutée au 604[8]. Néanmoins, bien que cela permette le fonctionnement de programmes de taille arbitraire plutôt que limités au nombre de connexions du tableau de branchement, le programme n'est toujours pas exécuté en mémoire vive, sa vitesse d'exécution dépend donc de la vitesse de lecture des cartes perforées du programme.

Le Gamma 3 connaît une nouvelle mise à jour en 1955 avec l'apparition d'un tambour magnétique d'une capacité de 49 ou 98 ko (64 ou 128 pistes de 8 blocs de 16 mots de 48 bits)[9],[10], quantité remarquable pour l'époque. Jusqu'à trois instructions pouvaient être stockées par mot sur le tambour, permettant ainsi d'accueillir 24 576 ou 49 152 instructions[11]. Cette nouvelle version était appelée Gamma 3 A.E.T (Armoire Extension Tambour, ou Extension Tambour).

Les programmes étaient enregistrés dans la mémoire de l'A.E.T. par groupes de 48 instructions, appelés 'séries'. Lorsque nécessaire, une série était transférée du tambour vers un groupe de mémoire intermédiaire agissant comme un cache d'instructions, ce qui permettait à l'ordinateur de récupérer chaque instruction une par une et de les transférer dans son registre d'instructions. Il est intéressant de noter que les instructions, en particulier les adresses, pouvaient être modifiées dans l'unité arithmétique de l'ordinateur, tout comme n'importe quelle autre donnée. Cette capacité a ouvert la voie plus tard à l'adressage indirect ou indexé[11]. Le cache d'instructions a également résolu le problème rencontré avec l'IBM 650, qui nécessitait une optimisation de l'agencement des instructions sur le tambour pour éviter que sa latence ne ralentisse l'exécution du programme[12].

Avec la possibilité de charger et d’exécuter des programmes en mémoire, le Gamma ET (Extension Tambour) devient le premier ordinateur français[13]. La tabulatrice est désormais un périphérique d'entrée/sortie et le Gamma ET l'unité centrale. La mécanographie cède alors progressivement sa place à l'informatique pour le traitement de l'information[14]. Le Gamma ET se positionne en concurrent de l'ordinateur IBM 650, de conception très similaire.

Le premier client à recevoir un Gamma 3 est le Crédit Lyonnais de Saint-Étienne en 1952. Le Gamma 3 et ET fût ensuite employé tant en informatique de gestion au sein de grandes entreprises, qu'en calcul scientifique, notamment au sein du CERN et CNRS alors naissants[15].

Bull ne traversa jamais l'Atlantique malgré son partenariat avec Remington Rand - Univac et la création d'une version "américanisée" disposant d'une alimentation électrique à 60 Hz[11].

Le Gamma 3 fût un succès commercial en Europe avec environ 1200 unités vendues, dépassant les ventes de l'IBM 650[16]. Le Gamma 3 étendu se comparait très favorablement à son concurrent : l'espace mémoire était quatre fois plus grand et permettait de stocker douze fois plus d'instructions, tandis que la vitesse de traitement était généralement plus élevée[11]. Ce succès a incité IBM à concevoir le modèle 1401 en réponse[16].

Organisation de la mémoire

modifier

Le Gamma 3 comprend trois types de mémoires, toutes basées sur des mots de 48 bits ou de 12 caractères BCD

Le premier type est constitué d'un groupe de sept registres au cœur du processeur. M1 fait partie de la Mémoire Opérateur, il sert d'accumulateur et est lié au circuit d'addition-soustraction. M2 sert d'accumulateur auxiliaire pour les opérations en double précision (96 bits). M3 à M7 sont des registres à usage général dénommées Mémoires Banales. Le transfert entre ces mémoires se fait par M1. M0 est un registre spécial lié à M1 et non accessible au programmeur.

 
Structure de l'ordinateur Gamma 3 selon la documentation originale. Des blocs de code et de données provenant du tambour alimentent les groupes de mémoire (moitié inférieure). Les trois premiers groupes (0, 1, 2) sont exécutables et forment les Séries. La Série 3 est attribuée au tableau de connexions, tandis que le Groupe 3 sert de tampon d'E/S. Le code machine d'une Série est ensuite extrait de la mémoire, décodé et exécuté (moitié supérieure).

Outre ces registres génériques, le Gamma 3 comprend également six registres internes :

  • MC : Mémoire Comparaison. Ce registre contient le résultat d'une instruction de comparaison.
  • MD : Mémoire Décalage. Ce registre de décalage est utilisé à la fois pour les opérations en BCD et arithmétiques.
  • MS1 : Mémoire Signe. Stocke le signe actuel de l'arithmétique. Avec M1, MC et MD, ils forment ensemble l'opérateur du processeur.
  • NL : Numéro de Ligne, qui serait aujourd'hui appelé le Compteur de Programme.
  • RNL1 / RNL2 : Registre Numéro de Ligne, qui agit comme des registres de pile.

Afin de réduire le nombre de tubes électroniques, source fréquente de défaillances, les Mémoires Banales n'utilisent pas de bascules, mais des lignes de retard électriques[17].

Un second type de mémoire est appelé Mémoires Circulantes, qui agissent comme des tampons, car leur contenu est destiné à être échangé avec la mémoire tambour. Les Mémoires Circulantes, désignées de M8 à M15, sont implémentées à l'aide de lignes à retard magnétostrictives dans une armoire séparé dédié (l'Armoire ET). Ces huit mémoires sont regroupées par paires pour former quatre "groupes". Les groupes 0, 1 et 2 sont exécutables et désignés sous le nom de "séries", chaque série contenant un cache d'instructions de 48 instructions. Le panneau de connexion, s'il est utilisé, constitue la série 3. Cela sera utilisé au cours du cycle de vie de la machine pour fournir des extensions du jeu d'instruction.

Le Groupe 3 agit comme un tampon d'entrée/sortie. Une armoire complémentaire dénommée "Ordonnateur" (ORD) peut également être ajoutée, fournissant quatre groupes supplémentaires numérotés de 4 à 7, contenant des données mais sans possibilité d'exécution.

Enfin, la Mémoire Tambour sert de mémoire de masse, hébergeant à la fois du code et des données. Sur le Gamma 3, le code n'est pas exécuté depuis le tambour mais depuis les trois premiers groupes des Mémoires Circulantes (les séries). Bien que cela augmente la vitesse d'exécution, cela rend également les sauts de longue portée plus coûteux, car une page doit d'abord être transférée du tambour vers les mémoires MC à l'aide d'une instruction dédiée ("TB").

Le tambour est constitué d'un cylindre en duralium, long de 15 ou 30 cm, tournant à environ 2 750 tr/min. Il possède 64 ou 128 pistes de 8 blocs, chaque bloc contenant un groupe, permettant ainsi de stocker jusqu'à 1 024 séries, soit 49 152 instructions[11]. La densité d'enregistrement approchait 300 bits par pouce, utilisant la modulation de phase, ce qui était une prouesse à cette époque[11].

Jeu d'instructions

modifier
 
Tableau de code du Gamma 3, permettant de transcrire les instructions en code machine. Ainsi, l'instruction CB se traduit en TO=1,AD=15

Une instruction Gamma 3 est constituée d'un mot de 16 bits composé de quatre chiffres hexadécimaux : un code d'opération (TO, Type d'Opération), une adresse (AD), un ordre de début OD, et un ordre de fin OF. Le champ TO spécifie le type général d'instruction, tandis que les trois autres champs agissent comme des paramètres[10]. OD et OF définissent des positions, qui peuvent être soit des chiffres en mode binaire, soit des caractères en mode BCD. Un total de 29 mnémoniques forment le jeu d'instructions.

 
Exemple de feuille programme. La première colonne affiche les sauts et leurs adresses de raccordement. Les colonnes suivantes montrent le numéro de ligne (NL), les instructions, le contenu du registre de décalage (MD) et le contenu des quatre premiers registres.

Aucun assembleur, souvent appelé autocodeur à l'époque, n'existait pour le Gamma 3, encore moins de langages de haut niveau comme Fortran qui devaient encore être inventés. À la place, le programmeur devait d'abord créer un schéma du programme, le compléter avec des mnémoniques, convertir manuellement les mnémoniques en code machine en utilisant un tableau, puis écrire le code résultant sur une feuille de codage pour vérification avant de le perforer sur des cartes. Une fois le programme chargé dans la mémoire du tambour, le pupitre opérateur permettait au programmeur d'examiner et de déposer des données en mémoire, ainsi que de contrôler le flux du programme à des fins de débogage[10].

Les instructions résident dans les série 0 à 2 hébergée sur les Mémoires Circulantes de l'armoire ET, où le code est récupéré et décodé par le processeur (l'armoire Gamma 3). Les programmes de plus petite taille peuvent être câblés directement sur le tableau de connexion, quoiqu'il était plus commode de les perforer sur des cartes, puis les lire et les transférer dans la mémoire tambour pour les exécuter comme programme enregistré. Le tableau suivant décrit les instructions avec leurs mnémoniques et les codes machine associés :

Instruction TO AD Description
V (Variante) 0 0 Absence d'opération (NOP) si OD et OF = 0
VS (Variante Systématique) 0 0 Saut inconditionnel

NL = OD + OF

VC (Variante Comparaison) 0 1 Saut conditionnel

NL = OD + OF si MD <= 0

0 2 NL = OD + OF si MD != 0
0 3 NL = OD + OF si MD < 0
0 4 NL = OD + NF si MS1 indique positif
VCS (Variante Changement de Série) 1 0 Branche vers OD de la série OF

La séries doit être 0, 1 ou 2

1 1 VCS, puis RNL1 = AD + 1
1 2 VCS, puis RNL2 = OD + 1
VRS (Variante Retour Serie) 1 5 RNL1 -> NL

(jumps back to the address stored in RNL1)

1 6 RNL2 -> NL
ES1 (Extraction Statique) 1 8 Envoie les positions OD à OF dans le groupe 3 (registre E/S)
ES2 (Extraction Statique) 1 9 Idem
CD (Calcul Decimal) 1 0xA Place l'ALU en mode décimale (BCD)
CO (Commutation d'Octade) 1 0xC Sélectionne l'octade (8 mots) OF
CSZ (Commutation de Seizaine) 1 0xD Sélectionne la seizaine (16 mots) OF
CB (Calcul binaire) 1 0xF Place l'ALU en mode binaire (scientifique)
BT (Banale->Tambour)

TB (Tambour->Banale)

2 Transfère le group AD depuis/vers le bloc OF de la piste OD du tambour.

La dernière position de OF sélectionne T->B or B->T

ZB (Zéro Banale) 3 Mets à zéro la mémoire AD entre les positions OD et OF
KB (Constante Banale) 4 Écrit la valeur de OF à la position OD de la mémoire AD
GG (Groupe -> Groupe) 5 0 Copie le coupe OD vers le groupe OF
IS (Introduction Statique) 5 Reçoit des données depuis un périphérique (généralement une tabulatrice) sur le canal AD
BO (Banale -> Operative) 6 0 Mets M1 à zéro, puis écrit 0 à la position 1.

Mets MD à zéro.

6 Mets M1 à zéro, puis transfère le registre AD vers M1 entre les positions OD et OF.

Mets MD à zéro.

AMD (Alteration Mémoire Décalage) 7 0 Mets MD à 1
BD (Banale -> Décalage) 7 2 Mets la position OD de M2 dans MD
IL (Intersection Logique) 7 0xA ET logique entre 1 et chaque position de M1
7 0xC ET logique entre M1 et M2
OB (Opérateur -> Banale) 8 1 Mets M1 à zéro entre les positions OD et OF
8 Décale M1, puis copie les positions OD à OF de M1 vers la mémoire AD entre les mêmes positions
CN (Comparaison Normale) 9 0 Décale M1, puis compare la position OD à 1 et place le résultat dans MC
9 Décale M1, puis compare son contenu à la mémoire AD entre les positions OD et OF. Place le résultat dans MC.
AN (Addition Normale) 0xA 0 Décale M1, ajoute 1 à la position 0
0xA Décale M1, additionne les positions OD à OF de M1 et de la mémoire AD, inscrit le résultat dans M1
SN (Soustraction Normale) 0xB 0 Décale M1, soustrait 1 de la position 0 de M1
0xB Décale M1, soustrait les positions OD à OF des mémoires M1 et AD, inscrit le résultat dans M1
MR (Multiplication Réduite) 0xC Multiplie le contenu de M1 par la mémoire AD entre les positions OD et OF, place le résultat dans M1
DR (Division Réduite) 0xD Divise le contenu de M1 par la mémoire AD entre les positions OD et OF, place le résultat dans M1
MC (Multiplication Complète) 0xE Multiplication double précision. Multiplie M1 par le contenu de la mémoire AD entre les positions OF et OF, inscrit le résultat dans M1-M2
DC (Division Complète) 0xF Division double précision. Divise le contenu de M1-M2 par le contenu de la mémoire AD entre les positions OD et OF. Le quotient est inscrit à la fin de M2, tandis que le reste est inscrit dans M1-M2.

Le tableau de branchement étant accessible via la série 3, certaines extensions et sous-programmes en tirèrent partie en étant fournis sous forme de tableau de branchement pré-câblé. Un tel exemple est l'extension "PDF" (Point Décimal Flottant), qui ajoutait deux instructions supplémentaires : BD et DCC, permettant de faciliter la manipulation des nombres à virgule flottante[18].

Le jeu d'instruction détaillé accompagné d'exemples peut encore être trouvé de nos jours dans des cours de programmation d'époque[10],[19].

Sur la fin de la carrière du Gamma 3, une équipe d'étudiants dirigée par le professeur Pierre Bacchus de l'Université de Lille développa un langage haut niveau pour ce dernier. Ce langage, appelé Auto-Programmation Bull (APB), combinait des éléments de l'assembleur du Gamma 3 avec des éléments structurés de ce qui deviendra l'ALGOL 60[20]. Il s'avera assez populaire au sein du groupe d'utilisateurs du Gamma 3 et sera plus tard porté sur l'IBM 1620[20].

Particularités historiques et techniques

modifier

Le Gamma 3 possède une ALU bi-mode, pouvant fonctionner en mode décimal (mots de 12 caractères BCD) pour l'informatique de gestion, ou binaire (mots de 48 bits) pour l'informatique industrielle et scientifique[17]. Deux instructions, CB et CD, permettent de passer de l'un à l'autre.

Le Gamma 3 fut pourvu en option d'une bibliothèque virgule flottante câblée, peu commune dans les années 1950. Ce modèle dénommé 3M était destiné au calcul scientifique et finit par être intégré par défaut au Gamma ET[11].

Les nombres à virgule flottante sont représentés sur 48 bits. Le bit le plus significatif est utilisé pour le signe, 8 bits sont utilisés pour l'exposant, et les 39 bits les plus significatifs sont réservés pour la mantisse[10].

Les premiers cours de programmation universitaires en France furent dispensés sur des machines Gamma 3 ET à la fin des années 1950 par le professeur Louis Bolliet, marquant ainsi la transition des formations fournies par les fabricants vers un cadre académique. Ces cours sont aujourd'hui disponibles en ligne[21] et ont servi à la création de simulateur de programmation.

Le Gamma 3 fût, avec l'IBM 650, le premier ordinateur produit à plus de 1 000 exemplaires[3].

Préservation

modifier

Quatre exemplaires du Gamma 3 existent encore aujourd'hui. L'un est exposé au Technikum à proximité de Frankfort[22], un autre à la Fédération des Équipes Bull à Angers[23], où il était fabriqué, et un autre au Museo degli Strumenti per il Calcolo à Pise. Enfin, l'ACONIT à Grenoble héberge un exemplaire unique du Gamma ET[9].

Voir aussi

modifier

Galerie

modifier

Références

modifier
  1. Jean Bellec, « La mécanographie », CNAM,‎ (lire en ligne [PDF])
  2. « Destin d'objets scientifiques et techniques : L'aventure du Gamma 3 (5/10 - année 2018) », sur www.echosciences-grenoble.fr (consulté le )
  3. a et b Bruno Leclerc, « From Gamma 2 to Gamma E.T.: The Birth of Electronic Computing at Bull », Annals of the History of Computing, vol. 12, no 1,‎ , p. 5–22 (ISSN 0164-1239, DOI 10.1109/MAHC.1990.10010, lire en ligne, consulté le )
  4. (en) Charles J. Bashe, IBM's Early Computers, The MIT Press, (ISBN 9780262523936), p. 461, chap.12.
  5. « tabulatrice BS120 Bull , chr3inf2, », sur www.histoireinform.com (consulté le )
  6. « Compagnie des machines Bull », sur www.feb-patrimoine.com (consulté le )
  7. a et b « Compagnie des machines Bull », sur www.feb-patrimoine.com (consulté le )
  8. (en-US) « IBM Archives: Card-Programmed Calculator », sur www.ibm.com, (consulté le )
  9. a et b « DBAconit V25.13 : », sur db.aconit.org (consulté le )
  10. a b c d et e Jean Chabrol, « Cours ET-ORD »,
  11. a b c d e f et g Bruno Leclerc, « Gamma 3 et Gamma E.T. de Bull - Du calculateur a l'ordinateur »,
  12. « The IBM 650 », sur www.columbia.edu (consulté le )
  13. « Compagnie des Machines Bull Launches the Gamma ET, the First Stored-Program Computer Produced for Sale in France : History of Information », sur www.historyofinformation.com (consulté le )
  14. INRIA, « Musée virtuel de l'informatique »
  15. « Destin d'objets scientifiques et techniques : L'aventure du Gamma 3 (5/10 - année 2018) », sur www.echosciences-grenoble.fr (consulté le )
  16. a et b « Origins of Architecture and Design of the 1401 », sur ibm-1401.info (consulté le )
  17. a et b Alain Guyot (ACONIT), « Arithmétique du Bull Gamma 3 » [PDF],
  18. Compagnie des machines Bull, « CNUM - M14926 : Gamma 3, calculateur électronique », sur CNAM-MUSEE CM0.4-BUL, (consulté le )
  19. Louis Bolliet, « Programmation Gamma - ET », Université de Grenoble,‎ (lire en ligne [PDF])
  20. a et b Pierre Mounier-Kuhn, « Algol in France: From Universal Project to Embedded Culture », IEEE Annals of the History of Computing, vol. 36, no 4,‎ , p. 6 (ISSN 1058-6180, lire en ligne, consulté le )
  21. Louis Bolliet, « Université de Grenoble - Mathématiques Appliquées - Programmation Gamma E.T », Cours universitaire,‎ (lire en ligne)
  22. (en-US) « A first generation tube calculator: BULL GAMMA 3 - technikum29 », sur www.technikum29.de (consulté le )
  23. ocgall, « Angers, depuis 56 ans, Bull pionnier en électronique ! », sur Des Mauges en Anjou ..., (consulté le )

Références externes

modifier