Les calculateurs C 90-xx : outils des premiers dispatchings transport informatisés en France

Des calculateurs américains vendus par CAE

Les calculateurs de la série C 90-xx (C90-10, C90-40, C90-80) vendus sous la marque CAE ont été le fruit d’un accord commercial. CAE, conscient des retards de l’industrie naissante des semi conducteurs en France  par rapport à celles des Etats Unis  a renoncé à construire ses propres calculateurs et a reporté ses efforts sur l’ingénierie. Il a choisi de commercialiser des calculateurs de la gamme 9 séries de Scientific Data System (SDS) (to know more about SDS) .

Cette gamme était composée d’une série de calculateurs, conçus dans les années 60, et apparus successivement dans le temps tout en fournissant aux utilisateurs une compatibilité ascendante. Cette compatibilité sera utilisé par EDF pour passer des C90-10 (SDS 910) initiaux trop justes pour répondre aux besoins aux C90-40 (SDS 940).

La gamme SDS 9 series comportait les 910 (1962), 920 (1962), 930 (1964) et 940 (1965)

Un C 90-40 dans sa version dépouillée  avec ses armoires et son pupitre.

Les caractéristiques

Caractéristiques matérielles

Les calculateurs de la série 9xx (en savoir plus) étaient des machines basées sur des transistors au silicium, ce qui à l’époque était une technologie récente et une certaine garantie en matière de fiabilité.

Caractéristiques générales

Les calculateurs étaient à mots de 24 bits, et disposaient de plusieurs registres : A, accumulateur principal, B, extension de l’accumulateur. Selon les instructions exécutées, A et B pouvaient être utilisés chacun comme des registres indépendants ou bien groupés (par exemple sur certaines instructions de permutation circulaire).  X, registre d’index;  C, registre qui contenait l’instruction qui allait être exécutée au pas suivant.  P, compteur ordinal (14 bits) qui indiquait l’adresse mémoire en cours.  W et Y registres utilisés pour les entrées-sorties.

Il y avait aussi un indicateur de débordement (1 bit) pour gérer les dépassements de capacité lors des opérations arithmétiques.

Il est à noter que les registres étaient visualisables à l’aide de lampes sur le pupitre de l’ordinateur. Une molette permettait de sélectionner le registre visualisé. Cette visualisation n’avait, bien évidemment, de sens que lorsque le calculateur était dans l’état iddle (figé). Elle permettait notamment la mise au point et des programmes et l’introduction manuelle de patches.

 en savoir plus sur le pupitre du 90-40

Les entiers naturels étaient codés en complément à deux sur 24 bits, les flottants étaient codés sur deux mots (48 bits) avec 39 bits (dont celui de signe) pour la mantisse et 9 bits (dont celui de signe) pour l’exposant.

Le format des instructions était le suivant : ………….E..X…P…Opcode…..I……..Adresse mémoire Bit n°…. 0..1…2…3——–8….9….10————————-23 Bit 0 (E) Positionné à 1, ce bit indiquait que la référence mémoire était dans l’extension (au-delà des 16 premiers Koctets) pour peu qu’une commande (sharm) ait activé son fonctionnement. Si la commande n’avait pas été passée la référence de l’adresse était la partie basse (16 premiers Koctets) Bit 1 (X) Positionné à 1, ce bit indiquait que la référence mémoire était indexée, le contenu du registre d’index était ajouté à la référence mémoire présente dans la partie adresse. Bit 2 (P) Positionné à 1, ce bit indiquait que l’instruction était un POP (Programme Operator). Ces POP étaient des pseudos instructions (en fait des séquences de codes développées par les utilisateurs) Bits 3 à 8 (opcode) Code de l’instruction ou du POP (selon la valeur du bit 2) Bit 9 (I) Positionné à 1, ce bit indiquait que la référence mémoire était indirecte à savoir que la référence mémoire visée n’était pas celle contenue dans la partie adresse de l’instruction, mais celle contenue dans la mémoire dont l’adresse était contenue dans la partie adresse de l’instruction. Cette indirection était très utilisée combinée avec l’indexation qui dans ce cas s’effectuait avant l’indirection. Bits 10 à 23 (adresse)Ces bits contenaient l’adresse qui servait de base pour l’instruction. Machines destinées au temps réel et au contrôle de processus, elles étaient dotées d’un nombre important d’interruptions.

La mémoire

La mémoire était du type mémoire à tores magnétiques avec un temps de cycle de 8µs. Elle était physiquement limitée à 32 Koctets. (en savoir plus sur les mémoires à  tores )

Ces mémoires étaient très sensibles à la température de fonctionnement, ce qui impliquait de nombreux réglages de la tension des alimentations des fils d’écriture. Faute de quoi, des erreurs de parité mémoire survenaient et « plantaient » le calculateur concerné. Sur le site de Monceau, et malgré de nombreuses interventions, un des calculateurs fonctionnait mieux avec les portes de l’armoire mémoire ouvertes et l’autre avec les portes de l’armoire mémoire fermées. Je me souviens aussi que, jeune ingénieur analyste, lors d’une intervention sur panne électrique un dimanche, j’avais dû attendre près de trois quart d’heure après la remise sous tension, pour que le calculateur atteigne sa température de fonctionnement et ne présente plus de parité mémoire.

Les disques

Les disques utilisés dans les dispatchings étaient des disques amovibles à plusieurs plateaux dont la capacité totale était de 4 millions de caractères. Mais le codage des caractères s’effectuant sur 6 bits (BCD – 6 bits), cela correspondait à volume effectif de 3 Méga Octets.

3 millions d’octets… Comparez avec votre dernière clé USB!

Autres périphériques

en plus des périphériques cités, ci-dessus, les C 90-40 disposaient :

  • d’imprimantes rapides à rouleau de 132 caractères par ligne
  • de machines à écrire
  • de lecteurs enregistreurs de bandes magnétiques
  • de lecteurs perforateurs de ruban papier
Le dérouleur de bandes. Placer la bande dans les bras demandait une certaine habitude. Le lecteur perfo de ruban : A droite, la partie perfo avec le bac pour récupérer les petits confettis.  A gauche, la partie lecteur en haut la mécanisme enrouleur-dérouleur, et en bas le lecteur lui-même.

Ils disposaient aussi d’interfaces de communication et d’entrées sorties de type tout ou rien.

La gestion de certains périphériques était décentralisée par le biais de « canaux » (Disques, imprimante rapide… La gestion des autres s’effectuait directement au niveau de l’unité centrale (console, machine à écrire…)

Caractéristiques logicielles

Le système était notamment livré avec

  • Un système d’exploitation basique mono tâche permettant d’accéder aux ressources des calculateurs et des périphériques(Monarch) de type Batch.
  • Un macro assembleur (Meta symbol), qui était le langage le plus utilisé compte tenu des faibles capacités mémoire et de la puissance très limitée des calculateurs. (en savoir plus sur les assembleurs)
  • Un compilateur Fortran II temps réel. Ce compilateur avait la particularité de pouvoir inclure directement dans le code Fortran des instructions assembleur, ce qui permettait notamment des traitements efficaces au niveau des bits ou des quartets, relativement fréquents compte tenu de l’optimisation poussée de la place dévolue aux données. (en savoir plus sur le FORTRAN)
  • Un éditeur de lien
  • Un ensemble de drivers et handlers permettant l’accès aux divers périphériques
  • Un ensemble de programmes de tests permettant de tester classiquement les périphériques, la mémoire mais aussi chaque instruction. Une petite anecdote, j’ai vécu une panne pour laquelle les techniciens de maintenance n’arrivaient pas à lancer les programmes de tests. Après de longues heures de recherche nous avons découvert que tous les tests commençaient par l’instruction BRX (décrémentation du registre d’index et branchement à l’adresse indiquée lorsque la valeur de l’index était nulle) et en avons déduit que la carte abritant cette instruction était en panne.

Pour permettre un fonctionnement temps réel, les grands principes mis en œuvre étaient les suivants :

  • Un certain nombre de traitements était déclenchés sur interruption (fin d’entrée sortie, traitement d’acquisition, horloge…)
  • Un scheduler avait été développé. Lancé toutes les 400ms, il scrutait des tables contenant notamment des informations sur les demandes d’activation, les attentes… pour déterminer la tâche éligible.

Les tâches pouvaient être soit résidentes en mémoire centrale, soit à charger depuis le disque. Pour ces dernières trois zones de mémoire banalisées étaient réservées. Ces zones étaient nommées ZBP1, ZBP2, ZBP3. Elles étaient implantées à des adresses fixes et de tailles fixes mais différentes ZBP1 était la plus petite et ZBP3 la plus grande. A chaque programme non résident, les responsables de l’application attribuaient une des zones, ce qui influait sur l’édition de lien de la dite tâche pour lui définir une adresse d’implantation en mémoire cohérente avec celle de la zone banalisée concernée. Lors de la demande d’activation, si la zone banalisée correspondante était disponible, la tâche était chargée en mémoire et son exécution était lancée. Pour les tâches trop grosses pour tenir en ZBP3 on avait recours à la technique des overlays. On chargeait une première partie du code, puis une fois celui-ci exécuté, on écrasait ce code devenu inutile par la suite du code et ainsi de suite. Cette technique nécessitait beaucoup de soin pour organiser son code (et notamment les sous-programmes et tables de travail) afin de ne pas écraser malencontreusement des parties encore utiles.

Lâchez-vous, devenez un pro du C 90-40 : Accédez au manuel de reference 90 40 octobre 69!

Images liées:

Publications similaires

2 commentaires

  1. Merci pour cette description qui me rappelle le temps ou j’allais m’amuser au travail pour l’entretenir et le dépanner (Comme un jeu d’échec)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *