Programme Apollo : des innovations cruciales pour créer l’informatique moderne
mar, 09/07/2019 - 13:38
Yves Grandmontagne (Programmez! 210) a levé le voile sur la conquête spatiale, le programme Apollo et comment la NASA a réussi à envoyer sur la Lune des « machines » et des hommes. Il a rappelé les énormes défis techniques qu’il a fallu relever, particulièrement sur la partie électronique : inventer un ordinateur transportable dans l’espace et créer les premiers véritables logiciels jamais codés. C'était il y a 50 ans.
François Tonic
Sur la partie fusée et propulsion, nous ne reviendrons pas sur le travail des équipes dirigées par Wernher Van Braun, le père des missiles V2 du IIIe Reich, l’ancêtre des missiles balistiques actuels. Van Braun se livre aux Américains avec plusieurs centaines d’ingénieurs durant les derniers mois de la guerre. Il va alors travailler pour l’armée américaine. Il développe les missiles balistiques du projet Atlas. Le chercheur se penche rapidement sur les lanceurs spatiaux et notamment la fusée Jupiter qui était à l’origine un missile. La mission est simple : mettre sur orbite le premier satellite américain. Chose faite le 1er février 1958. Mais Explorer 1 n’est qu’une réponse à l’URSS et à son Spoutnik, mis en orbite le 4 octobre 1957.
Le projet Saturn, un lanceur lourd, est acté avant le programme Apollo pour permettre à l’armée d’envoyer des satellites plus volumineux. Dès la création de la NASA, en juillet 1958, les responsables considèrent le projet Saturn comme stratégique. Saturn V, 11 ans plus tard, sera l’aboutissement de ce gigantesque projet.
Cette course à l’espace est une compétition URSS – USA. Les soviétiques gagnent une autre manche le 12 avril 1961 avec le premier homme dans l’espace : Gagarine et la mission Vostok 1. Cet exploit sera le tournant des ambitions américaines et du programme lunaire même si les USA imitent l’URSS le 20 février 1962 avec le programme Mercury et John Glenn, premier américain dans l’espace.
Un ordinateur “miniature” et « léger »
Les ordinateurs des années 50 et 60 étaient des monstres par le poids et les dimensions. L’énorme défi était de créer un matériel capable d’être utilisable dans l’espace sans surpoids pour la capsule et le module lunaire. L’ordinateur devait pouvoir exécuter le programme principal et les sous-routines pour réaliser des doubles ou triples opérations. La mémoire fixe (la ROM donc) était vitale car elle embarquait en dur le logiciel, avec, en plus, une mémoire effaçable. La mémoire, appelée rope memory, contenait les programmes, les données, les coordonnées. La mémoire non fixe faisait le lien entre l’interface (saisie et écran) et les programmes / données en mémoire fixe.
On a du mal à imaginer l’incroyable défi technique pour miniaturiser l’ordinateur (en dimensions et en poids) et y installer les programmes. Il a fallu inventer l’ordinateur moderne.
Apollo Guidance Computer (AGC) : le premier ordinateur transportable
Pour définition, un ordinateur possède trois grands composants : le processeur (CPU), la mémoire et les entrées / sorties. Aujourd’hui, quoi que de plus naturel que les données aillent de la mémoire au processeur et inversement, que le processeur traite des millions d’opérations par seconde. Dans les années 60, nous étions très loin des premiers ordinateurs personnels de la fin des années 70.
On ne parle pas de micro-ordinateur, le micro-processeur n’existe pas encore… Le programme spatial fut un énorme pas en avant pour l’industrie électronique : les puces et les circuits imprimés.
L’AGC représente un exploit technique : 55 cm x 33 cm pour une hauteur de 15 cm, le tout fermé d’une enveloppe impossible à ouvrir. Le tout pesant 32 kg. La puissance de la machine était limitée à 55 watts.
Le bloc AGC contenait les modules mémoires (ROPE memory), la mémoire effaçable, les capteurs, les modules logiques. A cela se rajoute le DSKY (écran + clavier). En gros, l’ordinateur de bord comportait 7 blocs : timer, générateur de séquences, le “processeur” central, la mémoire, les contrôles prioritaires, les entrées / sorties et l’alimentation.
Les astronautes communiquaient avec l’ordinateur par le DSKY composé d’un affichage et 19 boutons. L’interaction était basée sur les nombres : 2 nombres pour les verbs (actions / commandes) et nouns (données), 5 pour les données à afficher. Les données étaient affichées sur 3 afficheurs. L’astronaute voyait les verbs, nouns et programmes en cours via les afficheurs PROG, VERB, NOUN. Il pouvait saisir des combinaisons de verbs et de nouns, changer le programme à exécuter. Une centaine de combinaisons étaient utilisables, par exemple :
V50N18E.
ou encore :
27 : affiche la mémoire fixe
47 : initialise AGS (via routine 47)
Les programmes avaient un rôle précis durant la mission : le P63 correspondait à la phase de descente vers la surface lunaire, le P64 pour la phase d’approche avec l’atterrissage, etc. Ces programmes étaient exécutés à des positions précises. Les astronautes devaient les lancer via le DSKY. Dans le cas d’Apollo 14, nous avions par exemple :
P57 : alignement avec la surface lunaire
P68 : confirmation atterrissage
Les programmes P63 à 67 concernent la phase de descente vers la Lune, l’approche vers la Lune.
Les programmes sont regroupés sous l’appellation Pxx, les routines sous le nom Rxx. Les sous-routines sont nommées en Sxx.x
Exploit incroyable : l’ordinateur était capable d’exécuter plusieurs programmes à la fois.
Une mémoire fixée à la main
Encore une fois, il faut bien comprendre que les ingénieurs devaient inventer des technologies qui n’existaient pas. La mémoire a été un défi et la NASA sous-estima la taille nécessaire, ce qui compliqua le travail des développeurs.
La Core Rope Memory était la ROM de l’AGC. La technologie fut conçue par le fameux MIT Instrumentation et la société Raytheon fut chargée de la construction des modules. La ROM était construite avec les noyaux en ferrite. Les signaux passaient dans les noyaux par des fils, un noyau pouvait avoir jusqu’à 64 fils. Les noyaux n’étaient pas magnétisés dans un sens ou dans l’autre pour stocker les 0 et 1 (le fameux binaire machine), chaque noyau du rope memory était un transformateur dans une machine de fils passant le noyau ou à côté : les fils traversant le noyau stockaient le 1, ceux qui le contournaient étaient le 0.
Pour construire ces modules, des jeunes femmes travaillaient souvent par paire sur une unité mémoire, d’où le surnom de LOL (Little Old Ladies). Elles devaient passer et repasser des mètres de fils de cuivre à travers les noyaux composant le bloc.
L’AGC était un assemblage de circuits imprimés qui étaient encore rudimentaires dans leur design et leur fabrication. Leur coût était très élevé au début des années 60 mais les tarifs baissèrent énormément en quelques années, réduisant la facture de l’AGC. Ces circuits étaient indispensables pour les opérations logiques grâce à l’utilisation de modules logiques. Il s’agissait de petites puces soudées aux circuits. Une technologie nouvelle et peu testée. Le circuit imprimé fut inventé en 1958, le premier circuit disponible sur le marché était le NOR Gate (1961) comprenant 3 transistors. C’était la première fois que les circuits intégrés (et donc des puces électroniques) étaient massivement utilisés.
Bref, une des lignes directrices du projet était d’intégrer dans une puce plusieurs transistors et composants au lieu de les avoir individuellement sur une planche électronique. Les avantages étaient énormes : gain de place, consommation plus basse, coût réduit. C’est le véritable début du processeur au sens CPU et de la miniaturisation.
Les ROPE Memory furent soigneusement testées durant plusieurs mois. De nombreux bugs et dysfonctionnements furent corrigés après Apollo 11.
Un bug qui n’en n’était pas un
Durant la phase finale du premier alunissage, l’ordinateur connut un problème de fonctionnement et reboota ! Le pilotage passa alors en mode manuel. Et tout se passa bien même si les astronautes ont dû gérer une situation tendue ; mais l’Apollo Guidance Computer avait parfaitement rempli son rôle.
L’erreur, et l’alarme qui résonna (alarmes 1201 et 1202), ne venait pas des programmes. L’ordinateur reçut des données du radar de rendez-vous (utilisé pour le retour vers le Command Module) qui fut activé lors de l’atterrissage, en cas d’annulation à la dernière minute de l’alunissage. Cette action envoya de nouvelles données à l’ordinateur ce qui provoqua un dépassement de capacité. L’ordinateur était conçu pour traiter les tâches prioritaires et supprimer toutes les autres.
Finalement, l’ordinateur fonctionnait comme il avait été programmé et conçu. Et il n’a jamais connu de bugs durant la phase de descente. L’erreur venait de la procédure employée durant la descente et l’activation du radar de rendez-vous.
Un code disponible sur Github
Le code source des programmes de la mission atteint presque 2 mètres de hauteur ! Ce code fut une première fois scanné en 2003 mais plusieurs pages furent endommagées et des lignes de codes illisibles. Il a fallu corriger et recréer les codes perdus. La publication publique sur Github a été l’oeuvre d’un employé de la NASA, Chris Garry. On trouve le code pour les ordinateurs du Command Module et du Lunar Module. Plusieurs versions d’assembleur furent utilisées.
Site : github.com/chrislgarry/Apollo-11
L’ordinateur et les programmes furent progressivement testés dans les missions Apollo successives. L’ultime vérification eut lieu avec Apollo 8 qui fit le tour de la Lune (fin 1968). Les derniers programmes pour l’alunissage furent codés et installés quelques mois après mais sans que tout ait été testé.
Souvenez-vous qu’à l’époque, les programmeurs n’avaient pas les outils de tests que l’on a maintenant. Il fallait relire et relire les codes, les corriger et refaire l’opération. Les programmes étaient ensuite testés en conditions réelles dans un simulateur. La pression était sans aucun doute incroyable : car si le code ne fonctionnait pas comme prévu, les astronautes mourraient.
Des jokes dans les commentaires
Les développeurs sont parfois facétieux et ceux de la NASA n’ont pas manqué de l’écrire :
- Des références à Shakespeare Henry 6, act 2, scene 4
- Un nom de fichier au nom d’un jeu d’arcade (Pinball)
- Burn baby burn : référence au mouvement Black Power
- Des commentaires qui espèrent beaucoup : temporaire j’espère j’espère j’espère
Fiche technique
36 000 mots sur la ROM
2 000 mots sur la RAM
16-bit pour la longueur des mots
Vitesse d’horloge (oscillateur) : 2,048 Mhz
La vitesse d’horloge était divisée par 2 pour la fréquence de calcul (1,024 Mhz) et encore par 2 (soit 512 Mhz) pour assurer la synchronisation des systèmes d’Apollo.
Article publié dans Programmez! n°210
Pour aller plus loin :
F. O’Brien, the apollo guidance computer, Springer, 2010
Pour construire un AGC :
http://www.ibiblio.org/apollo/Pultorak_files/
(voir notamment les fichiers build_agc)