LE SYSTÈME INFORMATIQUE EMBARQUÉ



(N.D.R.) Sur cette page nous ne traiterons seulement que de l'AGC Block II, le seul ayant volé d'Apollo 7 à 17.


Le système informatique embarqué (1) du module de commande (CSS, Computer Subsystem) se compose de deux dispositifs complémentaires :
- L'ensemble DSKY (pour Display and Keyboard, affichage et clavier) et AGC (Apollo Guidance Computer ou encore CMC : Command Module Computer pour ordinateur de guidage d'Apollo) pour la partie matériel (hardware) et la partie logiciel (software).

SOMMAIRE :

Le DSKY
L'AGC
Le Software de l'AGC



L'unité centrale du système informatique embarqué et son interface (photo originale : wehackthemoon.com)


PARTIE HARDWARE

LE DSKY

Le DSKY du Block II (Display and Keyboard, abréviation DSKY prononcé "disky" pour unité d'affichage et clavier) est l'interface utilisée par les astronautes pour communiquer avec l'unité centrale de l'ordinateur du vaisseau Apollo. Les astronautes tapent les chiffres relatifs aux actions qu’ils souhaitent entreprendre et au programme qu’ils souhaitent modifier. Cette interaction "prend la forme d'une conversation grammaticale", assez facile à utiliser pour les personnes des années 60 qui n'ont jamais vu et utilisé un ordinateur auparavant.
Il permet à l'opérateur de charger des informations dans l'ordinateur, de demander des informations, de lancer divers programmes stockés en mémoire et d'effectuer des tests sur l'ordinateur et d'autres sous-systèmes du système PGNCS. Le DSKY fournit également une indication sur les changements d'état et d’avertissement susceptibles de se produire au sein de l’AGC. Il facilite donc seulement le moyen d'entrer des données au clavier dans le CMC, et d'en afficher les paramètres ainsi obtenus après traitement de celui-ci. Il a donc peu ou pas de fonctionnalités propres quand on le considère comme un système indépendant.
le DSKY (tout comme l'AGC) ont été conçus au laboratoire d’instrumentation du MIT (MIT/IL pour Massachusetts Institute of Technology / Instrumentation Laboratory) sous la direction de Charles Stark Draper.
C'est l'ingénieur Ramon Alonso et son équipe qui en sont les concepteurs. Le matériel de vol a été fabriqué par la société Raytheon. Ramon Alonso, né en Argentine et fils de linguiste, a appris l'anglais comme seconde langue. C'est cette expérience qui l'inspire à utiliser un format de nom et de verbe pour communiquer avec l'ordinateur. Utiliser le DSKY est comme avoir une conversation avec l'AGC en utilisant de minuscules phrases grammaticales, mais le DSKY n'était jamais censé voir le jour. C'était juste un prototype pour essayer de démontrer le type d'interface dont ils auraient besoin pour les missions Apollo. L'ingénieur logiciel Alan Green et son équipe ont développé le programme qui prend en charge les communications des astronautes avec l'ordinateur.

Le DSKY est un terminal petit et simple par rapport aux normes actuelles. Il est intéressant car il n'a que quelques relais de verrouillage pour piloter les affichages de segments et une simple logique de type transistor pour générer des codes-clés à partir du clavier.
Aujourd'hui, cet appareil serait fabriqué à l'aide peut-être d'un seul micro-contrôleur et serait très simple. Je reste persuadé que même de nos jours, de nombreux astronautes souhaiteraient disposer d'un appareil similaire pour communiquer avec l'ordinateur de guidage, au moins comme dispositif de secours, en cas de problème avec les écrans tactiles modernes et les écrans haute résolution. Sa petite taille, sa simplicité et son intégration au logiciel et au matériel Apollo maintiendront également cet appareil populaire à l'avenir.
Il y a 2 DSKY dans le module de commande, le premier sur le tableau de bord principal (Main Display Console) entre les sièges du pilote CM et du commandant de mission et le second dans la baie d'équipements inférieure (du côté droit du groupement optique, espace "réservé" du navigateur : la station de navigation). Les trois DSKY (en comptant celui du LM) sont électriquement identiques. En tant que tel, les deux dans le CM sont interchangeables.



Prototype d'un DSKY

Ci-dessus une vidéo (en vol) sur l'utilisation du DSKY.

Le DSKY (schéma ci-dessous à gauche) est divisé en trois sections : le tiers inférieur pour le clavier et deux autres pour les affichages. La section clavier contient 19 touches (10 touches et 9 "opération" : VERB, NOUN, CLR, PRO, KEY REL, ENTR, RESET, + et -) le mot, le signe ou le numéro d'une touche est toujours illuminé. Les 19 boutons sont codés dans une valeur de frappe de 5 chiffres et contrôlés par l'AGC. La partie supérieure gauche comporte un ensemble de 14 indicateurs d'avertissement et d'alerte, des panneaux rectangulaires avec du texte inscrit dessus qui s'allument en blanc ou en jaune. Le coin supérieur droit a un panneau électroluminescent qui comporte 4 indicateurs d'affichage d'opération (zones d'affichage de 2 digits pour les verbes, les noms courants ainsi que le programme) et 18 indicateurs d'affichage de données (3 zones d'affichage de 5 digits appelés REGISTERS, pour registres) sur la droite. Le DSKY possède également un panneau d'avertissement sur sa gauche. Il mesure 21,6 cm sur 21,6 cm par 18 cm de profondeur, pèse environ 8 kg et est alimentée en 28 V et 14 V CC par l’ordinateur. Un signal d’horloge de 800 Hz est utilisé, qui permet de générer une tension de 250 VAC (Volt Alternatif Courant) avec une fréquence de 400 Hz pour alimenter l’affichage.
Un connecteur à 91 broches (J9), une vanne de remplissage et une alimentation sont également montés à l'arrière de chaque DSKY. Le connecteur à 91 broches connecte le DSKY à l'AGC, au PGNCS et à d'autres systèmes du vaisseau.
Les connexions se font via le faisceau d'interconnexion "PGNCS A" pour le DSKY du tableau de bord principal et via le faisceau d'interconnexion "PGNCS H" pour le DSKY du poste de navigation. Une valve pneumatique de remplissage est utilisée pour pressuriser le DSKY à une atmosphère. Le module d'alimentation fournit la tension nécessaire pour allumer les indicateurs d'affichage.


DSKY désassemblé

L'échange de données entre l'équipage et l'AGC est généralement déclenché par une action de l'équipage, mais il peut également l'être par des programmes informatiques internes. Les informations échangées sont traitées par le programme DSKY.
Ce programme permet les cinq modes de fonctionnement suivants :

- Affichage des données internes. Un affichage ponctuel et un affichage à mise à jour périodique (appelé moniteur) sont tous deux fournis.

- Chargement des données externes. Au fur et à mesure que chaque caractère numérique est saisi, il est affiché à l'endroit approprié du panneau d'affichage.

- Appel et contrôle du programme. Le DSKY est utilisé pour lancer une classe de routines qui ne concernent ni le chargement ni l'affichage. Certaines routines nécessitent des instructions de la part de l'opérateur pour déterminer s'il faut s'arrêter ou continuer à un point donné.

- Changement de mode majeur. Le déclenchement de phases de mission à grande échelle peut être commandé par l'opérateur.

- Affichage de l'avertissement et de l'état du PGNCS. Le DSKY est utilisé pour afficher l'état de l'ISS, de l'OSS et du CMC et pour indiquer les mises en garde relatives au matériel et aux logiciels.



Un des deux DSKY du CM, photo Heritage Auctions

Le DSKY peut également être utilisé par des programmes internes calculés pour des sous-programmes. Cependant, toute action de l'opérateur sur le clavier (à l'exception de RSET) empêche l'utilisation du DSKY par les routines internes. L'opérateur conserve le contrôle du DSKY jusqu'à ce qu'il souhaite le relâcher. Il est ainsi assuré que les données qu'il souhaite observer ne seront pas remplacées par des affichages de données initiés en interne. En général, il est recommandé à l'opérateur de libérer le DSKY pour un usage interne lorsqu'il en a temporairement terminé avec lui : cela se fait en appuyant sur la touche KEY REL.

La section électroluminescente utilise un courant alternatif de 250V 800 Hz pour exciter les segments et les faire briller en vert, à 5300 angströms. La haute tension est commutée par de nombreux petits relais à l'intérieur de l'affichage, permettant à l'AGC d'utiliser une faible tension continue pour commuter la haute tension alternative vers les éléments d'affichage. Il fallait 37 relais pour alimenter un seul des chiffres signés à cinq chiffres.

Les voyants d'avertissement et d'alerte sont des ampoules à incandescence ordinaires de 5V CC, commandées par des relais qui sont à leur tour alimentés par l'AGC. Les voyants d'état ont un fond blanc, tandis que les voyants d'avertissement et d'alerte s'allument en jaune.

Les claviers (2 DSKY) sont rétro-éclairés par des lampes 110V AC 400 Hz, utilisant le bus AC standard du vaisseau spatial.



Voyants indicateurs de mise en garde et d'alarme sur le côté gauche du DSKY


Sur les DSKY équipant le module de commande, seuls dix voyants indicateurs sont utilisés. Sur la photo du DSKY (ci-dessus à droite) vous pouvez voir que l'espace vide où se trouveraient les quatre autres voyants sur un DSKY équipant le LM est simplement recouvert.

- UPLINK ACTY : allumé lorsque l'ordinateur reçoit des données du sol (message numérique complet de 16 bits), ou pendant le programme de navigation de rendez vous.
- TEMP : s'allume lorsque l'AGC reçoit un signal du contrôle de la température de l'IMU: celle ci est supérieure à sa norme de fonctionnement (de 52,38° Celsius à 56,83° C).
- NO ATT : allumé quand le sous-système inertiel ne fournit aucune indication.
- GIMBAL LOCK : s'allume quand l'angle d'un cardan de la plateforme inertielle est supérieur à 70°.
- STBY : allumé lorsque l'ordinateur est en mode "attente" (standby).
- PROG : allumé, il Indique que la vérification du programme a échoué. Cet indicateur est contrôlé par le programme du CMC.
- KEY REL : allumé lorsqu'un un affichage interne désire l'utilisation du DSKY.
- RESTART : s'allume lorsque l'AGC détecte un échec provisoire de matériel ou de logiciel (redémarrage du matériel et réinitialisation).
- OPR ERR : s'allume quand l'opérateur (astronaute) saisit un ordre incorrect sur le clavier du DSKY.
- TRACKER : allumé lorsque l'AGC reçoit un signal de l'OCDU (Optical Coupling Data Units) indiquant un échec.


Indicateurs d'affichage de fonctionnement


- COMP ACTY : s'allume lorsque l'AGC est occupé avec une séquence interne.
- PROG : indique la ou les fonctions du programme en cours d’exécution dans le CMC.
- VERB : indique le code du verbe saisi au clavier.
- NOUM : indique le nom du code entré au clavier.


Indicateurs d'affichage de données


- Indications d'affichage des données : Un signe + ou - signifie que les données affichées sont décimales ; aucun signe signifie que les données sont octales.



Touches du clavier

- KEY REL : libère le contrôle du clavier afin que les informations fournies par l'action du programme puissent être affichées.
- STBY : déclenche la condition de redémarrage du CMC et met le CMC en mode basse consommation. Le fonctionnement normal peut être repris en appuyant de nouveau sur STBY.
- RSET : efface les indicateurs de mise en garde et l’indicateur OPR ERR.
- CLR : efface les données contenues dans le registre de données actuellement en cours d'utilisation.
- VERB : conditionne l'AGC pour interpréter les deux prochains caractères numériques en tant que demande d'action.
- NOUN : conditionne l'AGC pour interpréter les deux prochains caractères numériques en tant que code d'adresse.
- ENTR : informe l'AGC que les données assemblées sont complètes; exécuter la fonction demandée.
- + key : entre le signe positif pour les données décimales.
- - key : entre le signe négatif pour les données décimales.
- Touches de 0 à 9 : entre les données, le code d'adresse et le code de demande d'action dans l'AGC.



Le dialogue avec l'AGC via le DSKY

Une interface bien conçue doit établir un "langage" entre l'utilisateur et la machine : un langage qui convertit les besoins et les souhaits de l'utilisateur en demandes facilement compréhensibles par le logiciel. Avec brio, le "langage" de l'AGC a été basé sur la façon dont les humains communiquent.

Voici un exemple :

Imaginez que vous soyez abordé dans la rue par quelqu'un qui possède un vocabulaire français minimal et que cette personne vous dise simplement : "Manger, pizza". Bien que grammaticalement abrupte, vous comprenez après quelques instants que cette personne veut manger, et qu'elle veut une pizza. Quelques gestes plus tard, vous l'avez dirigée vers le restaurant le plus proche. La clé de cet échange est qu'il y a une action, un verbe, et un objet, un nom.


Le dialogue est assez simple, il prend généralement la forme d'une combinaison d'un verbe (VERB), suivi d'un nom (NOUN). Les verbes, les noms ainsi que les programmes sont identifiés par des codes uniques à deux chiffres. Il y en a beaucoup à retenir, environ 45 programmes, 80 verbes, 90 noms. Une fois le verbe et le nom chargés dans les registres, une pression sur la touche Entrée indique que la saisie est acceptable et prête à être traitée. Voici un exemple de ce que pourrait être une demande DSKY (exemple : heure d'affichage de la prochaine combustion du moteur) :

- Verbe 06, Nom 33, Entrée ou, en abrégé, V06N33E.
- Taper le verbe 06 (Affiche les données décimales), le nom 33 (Temps d'allumage), terminer en appuyant sur la touche Entrée.

La définition "VERB" fait appel à un type d'action (ensembles de commandes), et la définition "Noun" précise sur quel type de donnée (ordre spécifique), ou sur quel composant ou système cette action doit être effectuée.

Dans le cas d'ordres plus complexes, le système attend que chaque donnée soit saisie et peut exécuter des routines préenregistrées (modes majeurs) permettant ainsi de gagner du temps.

Malgré les obstacles, le DSKY s'est révélé être un outil fiable et a contribué à toutes les missions habitées sur la Lune. De ses origines linguistiques modestes à un mémorial dans les étoiles, le DSKY est responsable du succès des missions Apollo


Le saviez vous ? Aujourd'hui, beaucoup de gens confondent le DSKY avec l'AGC, bien qu'il ne s'agisse que de l'interface (d'ailleurs, je ne peux m'empêcher de mentionner que le programme chargé de gérer l'écran du DSKY s'appelait "Pinball Game Buttons and Lights").

Le saviez vous (2) ? Malgré ses avantages, l’AGC n’est pas une bête facile à dominer. Pour aligner la centrale inertielle, il faut entre 30 et 130 pressions sur les touches du DSKY et plus de dix mille frappes peuvent être atteintes lors d’un voyage vers la Lune. La conséquence est que l’équipage a passé un pourcentage significatif de son temps dans l’espace à taper des instructions sur le panneau DSKY.




L'APOLLO GUIDANCE COMPUTER



Photo de l'AGC, veuillez noter l'abscence à l'arrière des modules de mémoire fixe (mémoire à cordes)

L'Apollo Guidance Computer (AGC) est un ordinateur numérique embarqué conçu pratiquement à partir de zéro spécifiquement pour être utiliser à bord du vaisseau spatial Apollo afin de soutenir les atterrissages lunaires. Ce n'est pas du tout un ordinateur à usage général (bien que doté de nombreuses caractéristiques de celui-ci). Il n'a pas besoin de s'adresser à un ensemble complexe de périphériques par le biais d'une couche d'abstraction matérielle (2), ni d'analyser des "commandes de style anglais" (English-style commands) ; il n'a pas de langage de programmation de haut niveau à interpréter. Il peut être classé comme ordinateur parallèle, polyvalent ou binaire à nombre entier.Un vaisseau spatial Apollo opérationnel contient deux AGC et trois DSKY : un AGC et deux DSKY dans le CM, un AGC et un DSKY dans le LM. Les deux appareils sont identiques en termes de matériel mais sont reliés à des périphériques partiellement différents et exécutent des logiciels distincts, adaptés à chacun des vaisseaux.

En tant qu'ordinateur de contrôle, son rôle principal est de surveiller le vaisseau lors de son trajet vers la Lune, en gardant la trace de l'endroit où il se trouve et de celui où il va (sous la forme de son vecteur d'état par rapport à l'un des plusieurs points de référence différents, qui changent au fur et à mesure de la mission). L'AGC traite donc non seulement les informations en provenance des deux autres sous-systèmes du GNCS (IMU et optique), mais également d'autres composants du vaisseau, comme par exemple ceux du système de communication (au total 20). Il a la possibilité d'envoyer des signaux au RCS, pour corriger une trajectoire. De même, il gère aussi le temps de poussée du SPS, pour ralentir la vitesse du vaisseau (lors de l'insertion orbitale lunaire par exemple). En tant qu'ordinateur à usage général, il résout les équations de guidage et de navigation requises pour la mission lunaire. L'AGC n'a pas une aussi longue liste de responsabilités que les ordinateurs d'un vaisseau spatial actuel, mais il traite toujours un grand nombre de tâches et est l'objet d'attention constante de l'équipage. Même avec son rôle autonome réduit, le système informatique embarqué d'Apollo peut être considéré comme un contrôleur sophistiqué construit et intégré à part entière au matériel de son véhicule hôte si bien que les concepteurs l'appelle "le quatrième membre d'équipage".


Aperçu des données techniques de l'AGC Block II

Fréquence d'horloge
Source d'horloge : oscillateur à cristal 2048 MHz
Division du signal pour horloge multiphase

1024 MHz

Longueur du mot

16 bits

Temps du cycle mémoire

11,72 µs (microsecondes)

RAM

2048 mots

ROM

36864 mots

Instruction machine

34 régulier

Interuptions prioritaires

11

Temps supplémentaire

23,4 µs (microsecondes)

Temps de multiplication

46,8 µs (microsecondes)

Entrées/sorties

227 circuits

Circuits intégrés

5600 portes

Consomation électrique

28 Volts, 70 Watts

Masse

31,79 kg

Volume

27,5 l


L'AGC comporte trois sections principales (voir schéma ci-dessous), une mémoire, un processeur central et une section de commande. La section mémoire est divisée en deux parties, fixe et effaçable. La section du processeur central comprend un additionneur, un décodeur d'instructions, une commande d'interruption, un décodeur d'adresses de mémoire, un registre tampon local de mémoire et un certain nombre de registres adressables avec des fonctionnalités spéciales ou une utilisation spéciale. L'épine dorsale de l'AGC est l'ensemble de 16 bus d'écriture qui sont les moyens de transférer des informations entre les différents registres de la section centrale.

 
Sur le schéma : les flèches indiquent la direction possible du flux d'informations entre les différents registres du processeur central. Le registre S stocke l'adresse mémoire. Le registre G fournit un tampon pour les données de la mémoire. Le registre SQ a la même relation avec les instructions que le registre S avec les adresses mémoire. Les registres centraux et spéciaux (A, L, Q, Z, etc.) et un ensemble de registres de canaux d'entrée/sortie sont adressables explicitement. L'unité arithmétique est un additionneur avec des portes de décalage, une mémoire temporaire et une logique de commande. Les circuits de priorité commandent l'incrémentation ou le décalage d'un ensemble de registres de mémoire effaçables et commandent l'interruption du programme pour un certain nombre de séquences involontaires. La section de commande comprend la logique de synchronisation et de séquencement. L'horloge fournit la référence temporelle principale pour tous les systèmes du vaisseau spatial et, par le biais d'une chaîne de compte à rebours, des impulsions de synchronisation à diverses fréquences pour un usage interne et externe de l'ordinateur. Le générateur de séquences fournit la synchronisation de base de la mémoire et les séquences d'impulsions de commande (microprogrammes) qui constituent l'instruction que le processeur central peut exécuter.

Noter qu'environ la moitié du schéma d'architecture ci-dessus est occupée par la mémoire, ce qui montre qu'à bien des égards, l'architecture de l'AGC a été conçue autour de sa mémoire.

Outre ses performances techniques et sa compacité, l'AGC doit bien entendu résister sans problème aux énormes contraintes physiques du lancement de Saturn V. Cela est réalisé d'une part par des boitiers stables de l'AGC, d'autre part par des composants extrêmement robustes. Par exemple, la mémoire fixe qui contient tous les programmes de navigation, est basée sur une technologie innovante (pour l'époque) qui permet de construire une mémoire très stable avec un volume pourtant réduit et une densité de stockage élevée.

Le saviez vous ? Si le LVDC (l'ordinateur de Saturn V) échoue en vol, l’AGC peut prendre la relève (voir encadré ci-dessous). Mais si celui-ci échoue également, en dernier recours, le commandant peut théoriquement mettre Saturn V en orbite (contrôler un lanceur de 3 000 tonnes à la main : cela aurait valu la peine d'être vécu... Ou pas...).

Alors soyons clairs!! Les gens pensent généralement que l'ordinateur de guidage (AGC) du CM contrôlait la fusée Saturn, mais ce n'est pas le cas. Lors de la combustion des étages des fusées S-II et S-IVB, l'AGC pouvait effectivement contrôler la direction, en remplacement du LVDC. Cette capacité de secours n'a jamais été utilisée lors d'une mission. Mais cette action n'était pas possible lors de la combustion du premier étage (S-IB ou S-IC). Cependant, la capacité de l'AGC à contrôler directement le SIVB a été utilisée à d'autres fins au cours de la mission.





CONFIGURATION ET ARCHITECTURE GÉNÉRALE


La version Block II est la seule ayant volée vers la Lune. Conçue en 1966, elle conserve l'architecture de base du Block I. L'unité mesure 61 par 32 par 15 cm, pèse ~32 kg et requière 28V et 70W.

L'ordinateur de vol d'Apollo est le premier à utiliser des circuits intégrés (ICs pour Integrated Circuits) dans le spatial. Il est fonctionnellement divisé en sept domaines :

- Minuterie (timer) : pour les impulsions de synchronisation.
- Générateur de séquences (sequence generator) : régule l'exécution des instructions de la machine par des impulsions de commande.
- Unité centrale de traitement (central processor) : calculs.
- Mémoire : divisée en mémoire morte (ROM) et mémoire inscriptible (RAM).
- Contrôle des priorités (priority control) : contrôle des priorités des différentes opérations.
- Entrée-sortie.
- Alimentation en énergie (power) : alimentation en 4 volts et 14 volts à partir des piles à combustible.

L'architecture de l'AGC est une architecture Von Neumann (3). Bien que l'AGC soit spécialement conçu pour la navigation spatiale, il s'agit d'un ordinateur polyvalent capable d'assumer les fonctions les plus diverses, comme par exemple la prise en charge du pilotage du lanceur Saturn V ou l'exécution d'interruptions de mission, qui posent au système des exigences différentes selon la phase de vol en cours. En outre, la gestion des priorités constitue une procédure d'ordonnancement encore actuelle aujourd'hui, qui est non seulement très moderne dans les années 1960, mais qui n'a jamais été utilisée auparavant pour un ordinateur de navigation dans un avion ou un vaisseau spatial. Il n'existe tout simplement pas d'ordinateurs suffisamment puissants pour la navigation spatiale et aussi compacts que l'AGC.

Le corps de l'AGC se compose de deux moitiés, appelées plateau A et plateau B. Ce châssis réalisé en magnésium est usiné par fraisage. En effet, des études de conception visant à réduire la masse, dans la mesure du possible, permettent de remplacer les alliages d'aluminium originaux par des alliages de magnésium, ce qui a pour effet d'économiser 5,44 kg (12 lb). Toutefois, le magnésium nécessite une finition qui doit répondre aux exigences de l'engin spatial en matière de contamination et de résistance à la corrosion. Pour cela, les modules ou les surfaces à l'intérieur de l'AGC sont anodisés. Toutes les surfaces exposées à l'environnement du vaisseau spatial sont peintes en plus de l'anodisation. Les peintures doivent être exemptes d'odeurs et offrir une surface à faible émissivité pour le contrôle thermique du vaisseau spatial. Les surfaces visibles une fois installées dans le CM doivent être assorties au gris foncé de l'intérieur de l'habitacle. Les trous de vis et les surfaces autour des trous ne sont pas peints mais traités avec une anodisation conductrice pour assurer la liaison électrique des interfaces entre les plateaux, les entretoises, les couvercles et l'AGC à la plaque froide du vaisseau spatial. Dans le cas de l'AGC et du matériel de montage du vaisseau spatial, des boulons en acier avec des tiges recouvertes de Téflon et des rondelles en aluminium sous leurs têtes sont nécessaires pour éviter la corrosion, car le matériel de montage est composé de métaux dissemblables (magnésium et acier). La conception du Block II répond également aux nouvelles exigences en matière de résistance aux interférences électromagnétiques et d'ignifugation.

Le plateau A contient trente et un modules : vingt quatre modules logiques, cinq d'interface et deux d'alimentation à découpage qui convertissent les 28 volts du vaisseau spatial en 4 et 14 volts pour le fonctionnement de l'AGC. Tous les modules sont montés sur le plateau, puis enrobés d'un composé silastique. Le plateau A comporte trois connecteurs inter-plateaux : A61, A62, A63 et deux connecteurs à l'arrière. Un connecteur arrière à 360 broches (A51) relie le CMC, par l'intermédiaire du harnais d'interconnexion A du PGNCS, à la source d'alimentation principale de 28 Vdc, aux DSKY (les 2), aux autres parties du PGNCS et aux autres systèmes de l'engin spatial. Un connecteur arrière à 144 broches (A52) assure l'interface avec l'équipement de soutien au sol utilisé pour tester le CMC.


Vue des deux plateaux et de la disposition des différents modules

Le plateau B contient dix-sept modules (oscillateur, dispositifs d'alarme analogiques, mémoire effaçable, l'électronique de mémoire...), dont six modules de mémoire à cordes. Tous les modules (plateau A et B) sont hermétiquement scellés et encastrés dans les plateaux, à l'exception des modules de mémoire corde qui sont branchés à l'avant de l'AGC et fixés par des vis de calage. Ce montage offre un bon chemin thermique entre les modules et leurs supports. Le plateau est à son tour vissé sur une plaque de refroidissement, d'où s'opère un échange thermique (suppression de la chaleur émise par les composants). Le cadre fournit également des joints d'étanchéité à l'humidité pour tout le câblage interne et les connecteurs. Le plateau B possède trois connecteurs inter-plateaux : B61, B62, et B63.

L’AGC est complètement hermétique pour se prémunir des conditions environmentales de la cabine (oxygène pur, forte humidité) et ne contient aucune pièce à entretenir. Malgré cela, les ingénieurs craignent que les nouveaux microcircuits numériques ne tombent en panne dans l’espace. Les premières versions permettent donc de remplacer les modules. Dans les versions ultérieures de l'AGC, une fois tout le monde convaincu de sa fiabilité, l'exigence de maintenabilité a été exclue de l'énoncé des travaux ou EdT (4).
Au total, l'appareil contient environ 30 000 pièces. Chaque composant est soumis à un test électrique et à un test d'effort. Tout échec appelle le rejet du composant et de son lot.



Vue d'un AGC partiellement démonté avec deux de ses modules ROM

Le saviez vous ?? L'AGC n'est peut-être pas doté de grandes capacités (vitesse de calcul et mémoire), mais en revanche, il est d'une fiabilité extrême. Sur les 42 systèmes Block II livrés et sur un total de 11 000 heures d'exposition aux vibrations et aux cycles thermiques, plus 32 500 heures de fonctionnement normal, seules 4 défaillances matérielles ont été observées, dont aucune ne s'est produite au cours de missions lunaires réelles. Une estimation prudente du temps moyen entre les défaillances (MTBF pour Mean Time Between Failures) de l'AGC a été calculée par la suite comme étant supérieure à 40 000 heures, soit plus d'un ordre de grandeur de mieux que les machines typiques de l'époque.




LA MÉMOIRE

Un peu d'histoire : l'histoire de la mémoire dans l'AGC est une histoire de taille croissante à mesure que les exigences de la mission se sont développées. Lors de la conception ou de l'achat d'un système informatique pour une application spécifique, les exigences de mémoire sont parmi les plus difficiles à estimer. La NASA et ses sous-traitants en informatique ont toujours été incapables d'émettre des jugements adéquats dans ce domaine. L'AGC disposait d'une mémoire permanente et effaçable, qui a rapidement augmenté par rapport aux projections initiales. L'ordinateur d'Apollo utilisait des cellules de mémoire effaçable pour stocker les résultats intermédiaires des calculs, des données telles que l'emplacement du vaisseau spatial, ou comme registres pour les opérations logiques. Dans Apollo, elles contenaient également les données et les routines nécessaires pour préparer l'ordinateur à être utilisé lors de sa première mise sous tension. La mémoire fixe contenait les programmes qui n'avaient pas besoin d'être modifiés au cours d'une mission. Les temps de cycle des mémoires de l'ordinateur étaient égaux pour une plus grande simplicité d'utilisation.

La conception originale du MIT ne prévoyait que 4K mots de mémoire fixe et 256 mots de mémoire effaçable (à l'époque, il était encore envisagé d'utiliser deux ordinateurs pour la redondance). En juin 1963, les chiffres étaient passés à 10K de mémoire fixe et 1K de mémoire effaçable. Le saut suivant était de 12K de fixe, le MIT insistant toujours sur le fait que les besoins en mémoire pour une mission lunaire autonome pouvaient être maintenus en dessous de 16K !
La mémoire fixe est passée à 24K, puis finalement à 36K mots, et la mémoire effaçable avait une configuration finale de 2K mots.
Le manque de mémoire a causé des problèmes constants et considérables de développement de logiciels, malgré l'augmentation de la mémoire fixe 18 fois par rapport aux estimations initiales et de la mémoire effaçable 16 fois. Une partie des difficultés logicielles provenait de fonctions et de caractéristiques qui ont dû être abandonnées pour des raisons de taille de programme, et une autre partie était due aux difficultés d'adressage déjà décrites. Si les concepteurs d'origine avaient su qu'une telle quantité de mémoire serait nécessaire, ils n'auraient peut-être pas choisi une taille de mot courte, car un mot de 24 bits pouvait facilement adresser directement une banque de 36K, avec suffisamment de place pour une bonne liste de codes d'instruction.
L'une des raisons pour lesquelles les concepteurs ont sous-estimé les besoins en mémoire est que la NASA ne leur a pas fourni de spécifications détaillées quant à la fonction de l'ordinateur. La NASA avait établi un besoin pour la machine et avait déterminé ses tâches générales, et le MIT a reçu un contrat basé uniquement sur un bref énoncé très général des besoins dans l'appel d'offre.


L'AGC est un ordinateur numérique qui possède une mémoire de deux types différents : une mémoire de travail à noyau de ferrite à courant coïncident (la RAM ou Random Access Memory pour mémoire à accès aléatoire [lecture/écriture], également appelée mémoire vive, mémoire centrale, mémoire effaçable ou mémoire à noyaux magnétique) et une mémoire à lecture non destructive pour le stockage des programmes (la ROM ou Read Only Memory pour mémoire à lecture seule aussi appelée Core Rope Memory pour mémoire à cordes ou encore mémoire morte) de type transformateur (terme générique que nous allons développer plus bas) dans laquelle les informations sont câblées. La seule différence logique entre les deux mémoires est l'impossibilité de modifier le contenu de la ROM par des étapes de programme. La mémoire à cordes est fabriquée (information câblée) sous une forme modulaire, contenant environ 6K mots (kilomots), qui peut être branchée sur l'ordinateur. L'ordinateur a une capacité maximale de six de ces modules, ce qui lui donne une capacité totale d'environ 36K mots de mémoire fixe. Cette conception présente deux caractéristiques exceptionnelles. Premièrement, la mémoire vive est conçue pour être insensible aux températures variant entre 0 et 70°C, et deuxièmement, la mémoire corde permet une haute densité. Ainsi, une grande capacité de mémoire peut être fournie dans un ordinateur d'un volume relativement faible. L'insensibilité à la température permet à l'ordinateur de fonctionner avec une température de plaque froide comprise entre 0 et 35°C.

Le saviez vous ?? Les instructions peuvent adresser des registres dans l'une ou l'autre mémoire et peuvent être stockées dans l'une ou l'autre mémoire.

Anecdote : Les prototypes de ROM avaient un seul faisceau de fils qui ressemblait à une corde. La version finale de ces mémoires ne ressemblait plus à une corde, mais en a gardé le nom.

 
Prototype d'une mémoire corde






LA MÉMOIRE EFFAÇABLE OU RAM (Random Access Memory)



Circuit intégré composé de noyaux magnétiques

Détail : vue rapprochée des noyaux, notez leur forme de beignet (creux au centre comme les donuts américains)

La mémoire effaçable est héritée de son ancêtre le transistor logique à noyau. Il s'agit d'un réseau conventionnel bidimensionnel de noyaux de ferrite à courant coïncident dont le composé de ferrite permet de combiner une grande rectangularité et une sensibilité relativement faible à la température. De plus, les circuits de transistors en silicium, qui pilotent la mémoire, varient normalement avec la température de manière à répondre aux exigences des cœurs sur une large plage, de 0° à 70°C, ne nécessitant ainsi aucun circuit spécial pour la compensation de température. La sélection par courant coïncident permet une économie dans les circuits de sélection au détriment de la vitesse par rapport à la sélection linéaire (mot). Ceci est avantageux pour l'ordinateur, où le temps de cycle de la mémoire est déjà long, en grande partie à cause de la mémoire fixe. La matrice de 2048 mots est câblée en plans de 32 x 64, sans épissures dans les fils, pour une fiabilité maximale. Les plans sont pliés pour tenir dans un module de 147 cm3 (9 in3) avec deux diodes pour chaque ligne de sélection. Des courants bidirectionnels sont générés dans chaque fil de sélection par un réseau de commutation à transistors à double extrémité.
La sélection d'un fil sur 32 est effectuée par 12 circuits de commutation dans un réseau 8 x 4 ; la sélection d'un fil sur 64 est effectuée dans un réseau 8 x 8. Le fonctionnement du réseau de commutation est illustré ci-dessous (à gauche). Les transistors de commande des noyaux sont commandés par des noyaux magnétiques, qui offrent deux avantages : leur petite taille et le stockage de l'adresse pour la régénération des données. Là encore, cette économie de circuit est réalisée au détriment de la vitesse. La synchronisation des courants, qui actionnent les noyaux de commutation, est basée sur la durée du courant d'écriture dans la matrice de mémoire, et est de 2 µs. Deux pilotes de courant avec des temps de montée contrôlés, un pour la lecture et un pour l'écriture, sont utilisés sur chacun des deux réseaux de sélection des pilotes. Seize autres pilotes de ce type sont utilisés pour piloter les lignes de chiffres qui contrôlent la phase d'écriture du cycle de la mémoire. L'amplitude du courant est régie par la chute de tension directe e2 de la figure ci-dessous (à droite) aux bornes d'une jonction en silicium et de la résistance d'émetteur Rg, de sorte que la compensation de la force coercitive du noyau de ferrite en fonction de la température est réalisée sans aucune complication du circuit.

Le signal de sortie des noyaux de mémoire a une amplitude d'environ 50 millivolts. Le couplage par transformateur aux amplificateurs de détection assure une réjection du bruit en mode commun et un gain de tension de 2. Les amplificateurs de détection (voir figure ci-dessous) comportent un premier étage différentiel fonctionnant en mode linéaire (classe A). Un deuxième étage assure la discrimination de seuil, le redressement et le déclenchement ou le stroboscope. Trois tensions de référence sont générées pour les amplificateurs de détection par un circuit dont les caractéristiques de température compensent les changements d'amplitude et de bruit dans la mémoire.

Les amplificateurs de détection à circuit intégré ont certains avantages inhérents aux circuits semi-conducteurs à puce unique. Les amplificateurs différentiels posent un problème particulier d'adaptation des composants, à la fois en interne pour obtenir un équilibre dans un seul amplificateur et parmi un groupe d'amplificateurs pour obtenir un comportement uniforme pour des tensions de référence communes. Dans les amplificateurs à composants discrets, beaucoup de temps et d'efforts sont nécessaires pour spécifier et sélectionner des ensembles de composants de circuit adaptés. Dans un circuit intégré, cependant, l'équilibre est facilement atteint en raison de la correspondance extrêmement étroite entre les transistors sur la même puce de silicium. Il en va de même pour l'uniformité d'un amplificateur à l'autre, la différence étant facilement compensée par des résistances d'ajustage et des tensions de référence externes. La petite taille de l'amplificateur de circuit intégré est avantageuse pour obtenir un suivi de température entre les amplificateurs de détection et la mémoire, car il n'est pas difficile de les maintenir à une température proche de celle des noyaux de mémoire. Alors que les amplificateurs de détection ont toujours été le "maillon faible" des systèmes de mémoire des ordinateurs, l'amplificateur de détection intégré a déjà prouvé qu'il était au moins aussi performant que le reste de l'électronique de la mémoire.

Cette mémoire stocke l'information intermédiaire, contient également les données et les routines nécessaires pour préparer l'AGC à être utilisé lors de sa première mise sous tension et a le même temps de cycle que la mémoire fixe. Elle est construite à partir de minuscules anneaux de ferrite appelés noyaux (ou cœur).
Les noyaux sont disposés dans une grille ou un plan (appelé natte). Chaque plan stocke un bit d'un mot, de sorte qu'un ordinateur de 16 bits utilise une pile de 16 plans de noyaux. Chaque noyau est généralement traversé par 4 fils : Des fils X et Y dans une grille pour sélectionner le noyau, une ligne de détection diagonale à travers tous les noyaux pour la lecture, et une ligne d'inhibition horizontale pour l'écriture. Chaque noyau stocke un bit en étant magnétisé dans le sens des aiguilles d'une montre ou dans le sens inverse. Un courant dans un fil passant par le noyau peut magnétiser le noyau, le sens de magnétisation correspondant au sens du courant. Pour lire la valeur d'un noyau, celui-ci est retourné à l'état 0. Si le noyau était à l'état 1 auparavant, le champ magnétique changeant produisait une tension dans le fil de détection enfilé dans les noyaux. Mais si le noyau était à l'état 0 au départ, le fil de détection ne percevait pas de tension. Ainsi, forcer un noyau à 0 a révèlé l'état précédent du noyau (mais l'a éffacé dans le processus).

Le saviez vous?? L'une des principales propriétés des noyaux est l'hystérésis : un courant faible n'a aucun effet sur un noyau ; le courant doit être supérieur à un seuil pour faire basculer le noyau. Cette propriété est très importante car elle permet à une grille de lignes X et Y de sélectionner un noyau dans la grille. En alimentant une ligne X et une ligne Y, chacune avec la moitié du courant nécessaire, seul le noyau où les deux lignes se croisent reçoit suffisamment de courant pour basculer et les autres noyaux ne sont pas affectés. Cette technique de "courant coïncident" a rendu la mémoire centrale pratique, car quelques conducteurs X et Y peuvent contrôler un grand plan de noyau.




Exemple de cablâge avec un fil de détection horizontal et des fils X et Y verticaux (le principe reste le même que celui de la description ci-dessus)

Cette mémoire utilise des plans de cœurs, un plan pour chaque bit du mot. L'AGC a 16 plans, chacune contenant 2048 bits dans une grille de 64×32 plans. Notez que chaque natte est constituée de huit carrés de 16×16 (ci-dessous). Il s'agit typiquement de la mémoire électronique qui contient les données en cours de traitement dans un ordinateur, elle est nécessaire au système d'exploitation, à la gestion des processus, à la récupération et aux variables globales pour toutes les phases de la mission. La saisie est "nettoyable" ; ainsi, si les données doivent être conservées, elles sont ré-inscrites à nouveau. Autrement, l'emplacement est "épuré" (en réalité, pour libérer de l'espace mémoire on n'efface pas les données qui s'y trouve, mais on les écrase par de nouvelles données) pour une nouvelle utilisation.

Au milieu de cette maigre quantité de RAM se trouvent, logé au chausse-pied, des zones de mémoire dédiées utilisées par les programmes d'application : le logiciel qui effectue les tâches de guidage et de navigation, l'atterrissage sur la Lune ou le rendez-vous. Les programmes de base disposent chacun d'un nombre "impressionnant" de 7 mots pour les variables temporaires. L'AGC Block II possède 4 kB (en unité moderne) de RAM. Comme pour la ROM, la mémoire centrale est assez insensible aux pertubations extérieures.
C'est une mémoire non volatile, c'est-à-dire une mémoire qui maintient son contenu en l'absence d'alimentation électrique (contrairement à nos RAM d'aujourd'hui).

Anecdote : A l'époque, la plupart des ordinateurs empilent physiquement les nattes les unes sur les autres, mais l'AGC utilise une structure mécanique différente, pliant les nattes pour qu'elles tiennent de manière compacte dans le module. Elles sont pliés en accordéon pour s'adapter parfaitement au module. Une fois pliées, les nattes forment un bloc qui est monté horizontalement dans le module central.





MÉMOIRE À CORDES OU ROM (Read Only Memory)


QU'EST CE QUE C'EST??

Petit rappel et descriptif rapide : Avant le développement de la mémoire à semi-conducteurs LSI (Large-Scale Intégration ou intégration à grande échelle suivie après par l'intégration à très grande échelle ou VLSI pour Very-Large-Scale Integration), le noyau magnétique était la forme prédominante de mémoire vive dans les systèmes informatiques. Des technologies de mémoire morte ont également été développées pour répondre au besoin moindre de mémoires fixes. L'une de ces technologies était la ROM à transformateur en fil tissé. Cette technologie se caractérise par le tissage sélectif de fils à travers des noyaux de transformateur, mais on peut la distinguer en deux techniques : celle du transformateur à impulsions et la technique du noyau de commutation.


COMMENT EST-ELLE FABRIQUÉE ??

Une fois le programme informatique finalisé, il faut l'envoyer à une usine où des techniciennes de fabrication, recrutées dans l'industrie textile locale pour leurs compétences en couture et embauchées par Raytheon, tissent au sens littéral du terme le logiciel dans cette mémoire en suivant des instructions détaillées. D'autres femmes qualifiées viennent de la Waltham Watch Company, une entreprise qui participe également à la fabrication des gyroscopes de haute précision utilisés dans les missions Apollo. Le processus exige beaucoup de travail et d'attention, il prend environ 8 semaines et coûte 15 000 dollars par module. Au début de la production, deux techniciennes s'asseyaient l'une en face de l'autre et tissaient à la main une myriade de fil dans de petits noyaux, poussant une aiguille creuse qui contenait la longueur de fil nécessaire, d'un côté à l'autre. Chaque noyau a, potentiellement après tissage, 192 fils de détection (mais étant donné que le système utilise une parité impaire, au maximum 15 des 16 bits peuvent être élevés. Ainsi, au maximum 180 fils de détection passeraient par un noyau) qui le traversent ou l'entourent (de sorte que chaque noyau stocke 12 mots de données) ainsi que 10 fils supplémentaires : un dit "fixe" pour les retourner à l'état défini, un de réinitialisation et huit d'inhibitions (7 lignes adresse + 1 parité) pour empêcher tout retournement sauf pour le noyau souhaité.


Image montrant comment la mémoire corde pour l'ordinateur de guidage Apollo a été réalisée (au début de la production) en tissant ensemble le câblage du programme, initialement effectué à la main. Les instructions d’utilisation de l’ordinateur étaient stockées dans des mémoires à cordes avec des noyaux microscopiques qui agissaient comme des transformateurs. Image Draper/Raytheon.

Deux techniciennes tissant la mémoire à cordes (photo originale BBC)

En 1965, Raytheon améliore le processus en combinant le positionnement automatisé, basé à nouveau sur des machines textiles utilisées dans l’industrie du tissage en Nouvelle-Angleterre, et l'enfilage manuel. Néanmoins, le processus est extrêmement lent et un programme peut prendre plusieurs semaines, voire plusieurs mois, en comptant également le temps nécessaire pour le tester. Toute erreur dans le tissage implique de le refaire complètement.

Pour ce faire, le code natif de l'AGC est converti avec un assembleur appelé YUL (voir description détaillée) afin de produire une bande perforée en Mylar. Un système automatisé lit cette bande et, pas à pas, déplace le gabarit du plan mémoire afin de positionner le noyaux approprié pour l'opération de tissage. La machine textile indexe l'emplacement particulier d'un noyau puis la technicienne passe l'aiguille (aiguille creuse contenant environ 6 m d'un fil fin en alliage de nickel servant de ligne de détection) à travers un guide muni d'un orifice permettant ainsi au fil de passer par le bon noyau. Lorsque la technicienne passe l'aiguille à travers l'orifice, elle déclenche un interrupteur, qui fait avancer le lecteur de bande qui, fait bouger le plan positionnant ainsi un nouveau noyau à tisser et en même temps, abaisse le guide, ce qui tire le fil autour de l'une des broches en nylon et l'écarte ainsi du centre du noyau nouvellement tissé pour qu'un autre fil de détection puisse être enfilé (voir vidéo promotionnelle en bas de page). Une fois tous les noyaux tissés et les connexions effectuées, les broches en nylon qui maintiennent temporairement le fil sont retirées pour pouvoir replié délicatement, tout en appuyant sur les fils en place, l'ensemble de l'assemblage qui forme au final, une construction de type sandwich. L'appareillage est ensuite mis dans un carter de protection. Le module de mémoire à cordes ainsi obtenu est alors testé électriquement par un système automatisé à nouveau contrôlé par un ruban perforé.



Une technicienne câblant des lignes de détection dans une mémoire à cordes. Elle enfile le fil à travers une ouverture circulaire blanche qui indique le noyau à câbler

Capture d'image de la série : Moon Machines

La mémoire fixe de l'AGC est configurée comme suit : L'AGC contient six modules de mémoire à cordes. Les 512 cœurs de chaque module sont disposés physiquement en deux couches de 256 cœurs (mais électriquement en quatre plans de 128 cœurs). Une ligne de détection et de réinitialisation traverse tous les cœurs d'un plan, permettant de sélectionner un plan particulier dans le module. Chaque noyau a des lignes de détection pour 12 mots de données de 16 bits chacun (15 bits + un de parité). Un groupe de 16 lignes de détection est appelé un brin, et il y a 12 brins par module. Il faut savoir que les cœurs n'occupent qu'environ la moitié de l'espace d'un module. Autour des noyaux se trouvent des centaines de résistances et de diodes qui sont utilisées pour sélectionner le mot souhaité. Ces composants sont montés avec la technique fagot (Corwood), les composants étant installés verticalement à travers des trous dans le module.

 
Image tirée du site www.electronique-et-informatique.fr

Module de l'AGC (montage technique fagot) image originale : http://klabs.org/

Le saviez vous ? Les cœurs (ou noyaux) utilisés dans la mémoire à cordes (ROM) sont plutôt gros : 6,32 mm de diamètre (0,249 in), environ 3 fois le diamètre de ceux utilisés dans la mémoire vive. Ainsi il ne faut que 3072 cœurs pour y stocker les 36K de mots, tandis qu'il faut 32 768 noyaux de ferrite au lithium (environ 1,2 mm de rayon) fabriqués par EMI ou RCA pour contenir les 2K de données de la RAM (1 noyau égal 1 bit). Les noyaux de la mémoire à cordes ne sont pas des noyaux de ferrite ordinaires, mais un ruban en permalloy enroulé autour d'une bobine en acier amagnétique. La mémoire à cordes atteint une densité de 1500 bits pour chaque pouce cube (1 in3 égal 16,38 cm3), avec y compris toute l'électronique de commande et de détection, les interconnexions et le matériel d'emballage. Cette densité est environ 5 fois supérieure à celle de la mémoire centrale effaçable.

Lorsqu'une mémoire à cordes est tissée avec précaution, avec environ 800 mètres de fil, les données sont stockées de façon permanente à l'intérieur. Le résultat donne une mémoire indestructible, sauf si le module est détruit physiquement ou en cas de défaillance d'une ou plusieurs diodes semi-conductrice. Elle ne peut pas être effacée, modifiée ou corrompue. L'inconvénient est que sa production est très difficile à réaliser et encore plus difficile à corriger lorsqu'une erreur est trouvée. Cependant, c'est aussi un avantage car cela signifie que les "bonnes idées" de dernière minute peuvent être ignorées. Le logiciel Apollo n'est pas écrit sur des disques durs ou de la mémoire flash. C'est quelque chose de réel, de physique que vous pouvez littéralement tenir dans vos mains.




Ci-dessus, vue rapprochée des tores "cablés" d'une mémoire à cordes


COMMENT FONCTIONNE-T-ELLE ??

L'AGC étant une machine 16 bits, sa mémoire morte stocke des données dans des mots composés de 15 bits de données (ces 15 bits fournissent une précision suffisante pour atterrir sur la Lune en utilisant des valeurs de double et triple précision au besoin) et d'un bit de parité. Le code d'instruction inclut des sous-programmes pour des opérations doubles et triples. Le temps de cycle de mémoire est de 11,72 µs (microsecondes), soit 85 324 Hz. Cette mémoire stocke de manière permanente sous forme de valeurs fixes la plupart des données critiques telles que des programmes d'application, les constantes de navigation ou la position des étoiles. Elle est relativement peu affectée par les impulsions électromagnétiques et les rayonnements radioactifs.

LA LONGUEUR DES MOTS

Comme nous l'avons vu, l'ordinateur est une machine à stockage commun. Cela signifie que les instructions peuvent être exécutées à partir de sa mémoire effaçable ou de sa mémoire fixe, et que les données (évidemment des constantes, dans le cas d'une mémoire fixe) peuvent être stockées dans l'une ou l'autre mémoire. Les tailles de mots des deux types de mémoire doivent être compatibles d'une manière ou d'une autre. La solution la plus simple consiste à créer des mots de longueur égale de 16 bits. L'AGC est quelque peu unique en raison de sa longueur de mot très courte, et les raisons de ce choix sont intéressantes.

Une des décision qui devait être prise le plus tôt possible dans la phase de conception était celle de la longueur des mots : plus importante, elle permettrait de traiter des unités de données plus grandes (ou plus précises) en une seule étape et d'accéder directement à un plus grand nombre d'emplacements de mémoire. Mais le matériel serait également plus volumineux. La taille ayant été un facteur décisif dans le développement de l'AGC, la décision a été prise en faveur d'une mémoire effaçable relativement petite, mais d'une mémoire en lecture seule plus importante et d'une longueur de mot relativement faible. La longueur de mot choisie était finalement de 16 bits (14 bits de données, 1 bit de signe, 1 bit de parité).

Ce choix-là a été judicieux. De nombreux ordinateurs scientifiques de l'époque utilisaient des mots de 24 bits ou plus et, en général, plus le mot était long, meilleure était la précision des calculs. Le MIT a pris en compte les facteurs suivants pour déterminer la longueur du mot : a) la précision souhaitée pour les variables de navigation, b) la plage des variables d'entrée, c) le format du mot d'instruction.
Les avantages d'un mot plus court sont des circuits plus simples et des vitesses plus élevées, et une plus grande précision pourrait être obtenue en utilisant plusieurs mots. Un mot de données à précision unique se compose de 14 bits, les 2 bits restants étant un bit de signe (le 1 indiquant le négatif) et un bit de parité (parité impaire). Deux mots adjacents donnaient une "double précision" et trois mots adjacents, une "triple précision". Pour stocker un vecteur tridimensionnel, il fallait trois mots en double précision. Le stockage des données se faisait sous forme de fractions (tous les nombres étaient inférieurs à un). Un mot d'instruction utilisait les bits 15-13 (ils étaient numérotés en ordre décroissant de gauche à droite) comme code d'opération octal. L'adresse utilisait les bits 12-1. L'adressage direct était limité, c'est pourquoi il existait un système de banque de registre permettant d'adresser l'ensemble de la mémoire.


Si un mot qui n'est pas une puissance de deux peut sembler bizarre aujourd'hui, les ordinateurs des années 1960 étaient conçus avec une taille de mot adaptée au problème.


La mémoire fixe de l'ordinateur est de type transformateur et a été développée au MIT/IL. Une propriété de décodage d'adresse est incorporée dans sa structure de câblage. En raison de ce décodage d'adresse interne, le temps de cycle n'est pas aussi court que celui de certaines autres mémoires à transformateur dont le décodage d'adresse est externe. La densité de bits qui en résulte est extrêmement élevée : environ 1500 bits par 16,38 cm3(1 in3), y compris toute l'électronique de commande et de détection, les interconnexions et le matériel de conditionnement. Cette haute densité de stockage est obtenue en stockant un grand nombre de bits dans chaque noyau magnétique. Ce schéma de mémoire est incroyablement économe en espace, car les cœurs peuvent être utilisés par (jusqu'à) 192 fils, ce qui donne une masse dense de fils en boucle.

Cette technologie est en fait différente de la mémoire effaçable. D'une part, elle n'utilise PAS de petits noyaux de ferrite et ne dépend donc pas non plus de noyaux qui conservent l'état du bit stocké : elle résulte de la disposition des fils à travers ou à côté des cœurs (noyaux toroïdaux). Si le fil passe dans le noyau, cette section de fil représente un 1 logique, et si le fil contourne le noyau, cette section de fil représente un 0 logique.

Exemple : pour stocker le mot de données 1001000100001111 dans un noyau, les premier, quatrième, huitième et treizième au seizième fils passent par ce noyau, les autres le contournent.

La figure ci-dessous est un schéma simplifié du câblage des noyaux indiquant le décodage des adresses (lignes d'inhibition) et le câblage des lignes de détection. Le nombre total de bits est le nombre de noyaux multiplié par le nombre total de lignes de détection. La mémoire est composée de six modules. Chaque module contient 512 cœurs et 192 lignes de détection et contient donc 192 x 512, soit 98 304 bits d'information. Comme ces informations sont câblées de façon permanente lors de la fabrication, la mémoire est indestructible, sauf en cas de destruction physique ou de défaillance d'une ou plusieurs diodes semi-conductrices dont les fonctions sont décrites ci-dessous. La ROM possède une capacité totale de 36 864 mots qui se décompose ainsi : 6 modules × 512 cœurs/noyaux par module × 192 bits par cœur ÷ 16 bits (15 +1) par mot = 36 864 (36K) mots (soit 72 kilobyte en unité moderne).



Exemple de fonctionnement d'une mémoire corde. Dans le schéma ci-dessus, le courant sur la ligne de réinitialisation (vert) inverserait potentiellement tous les cœurs. Cependant, diverses lignes d'inhibition (rouges) ont un courant dans la direction opposée. Cela annule le courant défini dans tous les noyaux sauf le n°2, de sorte que seul le noyau n°2 bascule. Seules les lignes de détection (bleues) traversant le noyau n°2 captent une tension induite. Ainsi, le motif de tissage des lignes de détection contrôle quelles données sont lues à partir du noyau #2. Pour résumer, les lignes d'inhibition contrôlent quel noyau est sélectionné, et les fils de détection tissés à travers ce noyau contrôlent quelle valeur de données est lue. Les lignes d'inhibition sont commandées à partir des lignes d'adresse et agencées de sorte que toutes les lignes d'inhibition soient inactives uniquement pour le noyau souhaité. Pour toute autre adresse, au moins une ligne d'inhibition sera activée, empêchant le noyau de basculer et d'être lu.

Le moyen par lequel un noyau unique dans un module de 512 noyaux est amené à commuter (adressé) est une extension de celui illustré sur la figure ci-dessus. On applique un courant de commutation qui tente d'activer 128 noyaux (ligne de réglage/réinitialisation). Quatre lignes de courant de ce type desservent un module de 512 cœurs. Des courants d'inhibition sont appliqués simultanément à la première ou à la seconde moitié de chaque groupe de 128 cœurs. Deux lignes d'inhibition sont prévues à cet effet. Un autre courant d'inhibition est appliqué à la première ou à la deuxième moitié de chaque demi-groupe. Deux autres lignes d'inhibition sont prévues à cet effet. Six autres paires de lignes d'inhibition existent dans le but de réduire successivement de moitié les groupes de noyaux non inhibés, jusqu'à ce qu'il n'y ait plus qu'un seul noyau non inhibé. Un élément de chaque paire d'inhibiteurs transporte le courant à la fois.

Il y a huit paires en tout pour sélectionner entre 27 cœurs, dont sept paires correspondent aux sept bits d'adresse de poids faible. La huitième paire est logiquement redondante, étant sélectionnée par la parité de l'adresse. La redondance est utilisée pour réduire la quantité de courant nécessaire dans chaque ligne d'inhibition. Une fois que le noyau sélectionné a commuté et que les courants d'inhibition sont supprimés, un courant de réinitialisation est passé à travers tous les noyaux. Seul le noyau qui vient d'être activé change d'état, et les amplificateurs de détection peuvent être activés pendant la partie d'activation ou de réinitialisation du cycle pour lire les informations de la mémoire. Le niveau de bruit pendant la réinitialisation est plus faible que pendant l'activation pour un certain nombre de raisons, mais le temps d'accès (le temps qu'il faut pour lire la mémoire après que l'adresse soit disponible) est plus long. Les deux méthodes ont été utilisées. La conception de l'AGC Bloc II utilise le temps d'accès le plus long et doit par conséquent produire l'adresse plus tôt.

Lors du fonctionnement de la mémoire à cordes, un seul noyau est commuté, induisant ainsi une tension dans chaque ligne de détection qui traverse le noyau. Un seul mot est lu à la fois, de sorte que sur les 192 lignes de détection, seules 16 sont connectées aux amplificateurs de détection pour détecter qu'elles ont une tension et donc stocker les mots. Chaque noyau stocke 12 mots, et à l'intérieur de chaque module, un réseau de commutation est inclus afin de ne pas transmettre plus d'un des 12 mots aux bornes de sortie du module. Le principe du réseau de commutation est illustré ci-dessous. Il est constitué de diodes et de résistances connectées de manière à bloquer la sortie de la ligne de détection lorsque les diodes de la ligne de détection sont polarisées en sens inverse, comme dans le cas de d5 et d6 ; et de le transmettre lorsque les diodes des lignes de détection sont polarisées dans le sens direct, comme dans le cas de d1 et d2. Un commutateur de deuxième étage composé de d3 et d4 est utilisé pour sélectionner l'une des six sorties du module à transmettre aux amplificateurs de détection. Seule la ligne sélectionnée dans le module sélectionné est transmise. Toutes les autres sont bloquées par un ou deux jeux de diodes à polarisation inverse. Toutes ces diodes de sélection sont physiquement situées dans les modules "corde" afin de minimiser le nombre de bornes nécessaires pour chaque module. L'application des tensions de sélection aux bornes de sélection de ligne et de module est une partie du décodage d'adresse qui est externe à la corde. L'équilibre est interne.




Anecdote : Le stockage secondaire n'était pas une option : les unités de disque, alors de la taille d'une machine à laver, ne pouvaient même pas tenir dans le vaisseau spatial. Le stockage sur bande magnétique, bien qu'il s'agisse d'une option fiable et viable, a été considéré bien trop tard dans le cycle de développement pour être inclus dans une quelconque conception.





LES CIRCUITS INTÉGRÉS de l'AGC

L'ordinateur de guidage Apollo est l'un des tout premiers ordinateurs à utiliser des circuits intégrés. Les progrès de la technologie de ces circuits ont conduit à l'adoption de la nouvelle porte NOR à faible consommation pour l'AGC Block II. Bien qu'il s'agisse encore d'une porte DCTL modifiée à trois entrées, ce circuit dissipe moins de la moitié de la puissance de la porte du Block I. De plus, deux de ces portes ont été fabriquées sur une seule puce de silicium et montées dans un conteneur "flatpack" de 10 broches. Cela a permis de doubler la densité d'emballage par rapport à l'approche Block I. La réduction de puissance a été obtenue dans ces unités logiques en augmentant l'impédance de sortie, ce qui a entraîné une sensibilité accrue du temps de montée aux capacités parasites du câblage. Deux mesures ont été prises pour permettre l'utilisation du nouveau dispositif et réaliser une économie d'énergie : premièrement, des cartes gravées multicouches ont été adoptées comme moyen d'interconnexion à l'intérieur des modules à la place des matrices à ruban soudé, ce qui a réduit la capacité parasite, et deuxièmement, le circuit de synchronisation de l'horloge a été amélioré pour tenir compte de plus grandes incertitudes dans les délais de propagation des signaux.

Les puces de l'AGC sont néanmoins très limitées, elles ne contiennent que six transistors et huit résistances, mettant en œuvre deux portes NOR (NO/OR ou en français : NON-OU) à 3 entrées utilisant une logique résistance-transistor (RTL). Ces circuits intégrés sont coûteux : de 20 à 30 $ chacun (environ 150 en dollars actuels). Malgré cela, ceux-ci permettent d'améliorer la densité par rapport à la logique à transistors de base prévue, rendant ainsi l'AGC possible. La décision d'utiliser des circuits intégrés dans l'AGC est prise en 1962, soit quatre ans seulement après leur invention. Cette décision est critique pour le succès de l'AGC et un moment clé dans l'histoire de l'informatique. À l'époque où l'on décide d'utiliser des circuits intégrés, la porte NOR est le seul dispositif disponible en grande quantité.La simplicité du circuit permet à plusieurs fabricants de produire des dispositifs interchangeables, de sorte qu'une concurrence raisonnable soit assurée. Grâce au développement récent des process dans les circuits intégrés, la porte NOR peut rester compétitive en termes de vitesse, de puissance et d'immunité au bruit.

Le symbole d'une porte NOR est illustré sur le photo montage ci-dessous. C'est une porte logique très simple : si toutes les entrées sont négatives, la sortie est positive. Il peut être surprenant que les portes NOR soient suffisantes pour construire un ordinateur, mais "NOR" est une porte universelle : vous pouvez créer n'importe quelle autre porte logique à partir de portes NOR. Par exemple, en reliant les entrées d'une porte NOR ensemble, on obtient un inverseur (ou porte "NON"). En plaçant un inverseur sur la sortie d'une porte NOR, on obtient une porte "OU". Le fait de placer des inverseurs sur les entrées d'une porte NOR produit une porte "ET". Des circuits plus complexes, tels que des bascules, des additionneurs et des compteurs, peuvent être construits à partir de ces portes.


Ci-dessus (à gauche) la structure interne d'une porte NOR. La couche métallique de la puce de silicium est la plus visible. La moitié supérieure est une porte NOR et la moitié inférieure la seconde. Les fils métalliques relient la puce au boîtier à 10 broches. Les transistors sont regroupés au milieu de la puce, entourés par les résistances.

Ce circuit est utilisé en 3V et 15mW, mais est évalué à 8V et 100mW. La température nominale sans alimentation est de 150°C. La simplicité de base de la porte à trois entrées facilite un processus de sélection efficace. Tous les transistors et résistances peuvent être testés pour assurer l'uniformité du produit. La simplicité du circuit permet également de détecter et de diagnostiquer rapidement les défaillances insidieuses sans avoir à recourir à des tests approfondis comme c'est le cas avec des circuits plus complexes. Un autre circuit intégré (l'amplificateur de sens, possédant six transistors et neuf résistances) est utilisé dans les circuits de mémoire de l'ordinateur de guidage d'Apollo.

L'AGC Block II utilise 2 826 circuits intégrés. Un total de 120 se situent dans les modules logiques, soit 240 portes par module.


Anecdote : Dans le livre "The Innovators : How a Group of Inventors, Hackers, Geniuses and Geeks Created the Digital Revolution" (2014), l'auteur Walter Isaacson observe que les 75 AGC qui ont été construits ont fini par contenir 5000 micropuces, toutes identiques, et que c'est la compagnie Fairchild qui a décroché le contrat pour les fournir. En juillet 1969, lorsque Neil Armstrong pose le pied sur la Lune, le programme Apollo avait acheté plus d'un million de micropuces, soit 60% de ce que l’industrie américaine pouvait produire à cette époque.
Ces demandes massives et prévisibles de la part du gouvernement pour le programme Apollo et ses autres projets, ont entraîné une chute rapide du prix de chaque puce. Le premier prototype de puce de l’AGC a coûté 1000 $. Au moment de leur mise en production régulière, chacune ne coûtait plus que 20 $. Pour comparaison, le prix moyen de chaque micropuce du missile Minuteman était de 50 $ en 1962 ; en 1968, il n'était plus que de 2 $.
C'est ainsi qu'a été lancé le marché de la mise en place de micropuces dans des dispositifs destinés à la grande consommation. Les premiers appareils grand public à utiliser des puces sont des appareils auditifs, car ils se doivent d'être très petits et se vendent même s'ils sont assez chers.



FONCTIONNEMENT DE L'AGC


Le processeur central effectue toutes les opérations arithmétiques nécessaires de l'ordinateur, met en mémoire tampon toutes les données provenant et y allant, vérifie la parité correcte de tous les mots provenant de la mémoire et génère un bit de parité pour tous les mots écrits en mémoire. Il se compose de registres à bascule, de la logique d'écriture, d'effacement et de contrôle, d'amplificateurs d'écriture, d'un registre tampon mémoire, d'un registre d'adresse mémoire et d'un décodeur et de la logique de parité.

Tous les registres du CPU sont mappés en mémoire. Les registres aux adresses 00-23 (octal) sont au cœur des opérations CPU, du point de vue du jeu d'instructions. Les registres des adresses 00 à 07 sont des bascules (enfin, sauf pour 07) internes au processeur ; tous les autres registres sont des emplacements de mémoire effaçables spécialement gérés. Chaque fois que ces registres de bascule sont accédés, leur contenu est copié dans leurs emplacements de mémoire effaçables correspondants. Ce lien est à sens unique ; les emplacements de mémoire effaçables 00-07 ne peuvent jamais être lus, car toutes les tentatives de le faire seront redirigées vers les bascules correspondantes.
Les registres aux adresses 24-61 sont génériquement appelés "compteurs". Bien que les registres du compteur puissent être modifiés sous le contrôle du programme, ils ne sont généralement configurés que par le programme et sont ensuite automatiquement incrémentés ou décrémentés par des événements tels que des impulsions électriques. Les registres TIME1-TIME6 sont encore plus spécialisés, dans la mesure où les "impulsions" qui les incrémentent sont en fait fournis par un oscillateur, de sorte que ces compteurs agissent comme des temporisateurs. De nombreux compteurs peuvent être utilisés pour déclencher des interruptions en cas de débordement, de sorte que le processeur puisse les utiliser pour détecter diverses conditions ou événements matériels sans avoir à interroger en permanence le matériel.


Principalement, le processeur central exécute les opérations indiquées par les instructions de base du programme stockées en mémoire. La communication à l'intérieur du processeur central est réalisée par l'intermédiaire des amplificateurs d'écriture. Les données circulent de la mémoire vers les registres à bascule (ou vice versa), entre les différents registres à bascule individuels ou dans le processeur central à partir de sources externes. Dans tous les cas, les données sont placées sur les lignes d'écriture et acheminées vers un registre spécifique ou vers une autre zone fonctionnelle sous le contrôle de la logique d'écriture, d'effacement et de lecture. La section logique accepte les impulsions de commande du générateur de séquence et génère des signaux pour lire le contenu d'un registre sur les lignes d'écriture et écrire ce contenu dans un autre registre du processeur central ou dans une autre zone fonctionnelle de l'ordinateur. L'emplacement particulier de la mémoire est spécifié par le contenu du registre d'adresse mémoire. L'adresse est introduite à partir des lignes "d'écriture" dans ce registre, dont la sortie est décodée par la logique du décodeur d'adresse. Les données sont ensuite transférées de la mémoire vers le registre tampon de mémoire.

Fun fact : quand je parle du CPU de l'AGC, je tiens à souligner qu'il n'y a aucune puce de microprocesseur impliquée. Le CPU est construit à partir de milliers de porte NOR individuelles (il en est le plus gros consommateur). Le processeur central se compose de plusieurs registres (lire ci-dessous), de l'additionneur, des amplificateurs d'écriture (WA pour Write Amplifiers) et du bloc de parité. Tous ses registres sont des registres à bascule (5) à porte NOR qui peuvent être lus de manière non destructive.

L'AGC dispose d'un petit ensemble de registres pour stocker temporairement des valeurs en dehors de la mémoire centrale. Il utilise peu de registres à bascule pour des raisons de taille et de masse, néanmoins sept registres clés de l'ordinateur en utilisent :

- L'accumulateur central, registre 00000, La plupart des instructions font référence à A.
- L'accumulateur inférieur, 000001, "L" utilisé dans la multiplication, la division et toutes les opérations de double précision.
- Registre d'adresse de retour, 000002, "Q".
- Banque de registre effaçable, 000003, "EB", bits 9, 10, 11.
- Banque de registre fixe, 000004, "FB", bits 11, 12, 13, 14, 15.
- Compteur de programme, 000005, "Z", contient L+1, où L est l'adresse de l'instruction en cours.
- Registre des deux banques, 000006, "BB" (les données stockées dans EB et FB sont automatiquement regroupées ici), effaçable : bits 1, 2, 3. Fixe : bits 11, 12, 13, 14, 15.

L'utilisation de banques de registres permet d'adresser toute la mémoire de la machine. Le plus grand nombre qui peut être contenu dans 12 bits est 8 192. La mémoire fixe de l'ordinateur Apollo contient plus de quatre fois ce nombre d'emplacements. Par conséquent, la mémoire est divisée en "banques" de noyaux, et l'adressage peut être géré en indiquant d'abord quelle banque et ensuite quelle adresse à l'intérieur de la banque. Par exemple, si l'on prend la métaphore "adresse" au pied de la lettre, il y a probablement des dizaines d'adresses "110 rue Jules Verne" dans n'importe quel département, mais en indiquant la ville appropriée sur une enveloppe, une lettre peut être livrée sans difficulté à l'adresse 110 rue Jules Verne visée.
Les banques informatiques sont comme les villes de l'analogie. Le registre de la banque effaçable ne contient que 3 bits qui servent à étendre l'adressage direct de la mémoire effaçable à sa région "supérieure", et le registre de la banque fixe contient 5 bits pour indiquer quelle banque de mémoire corde adresser.
En outre, pour les adresses nécessitant un total de 16 bits, un "super bit de banque" peut être stocké et concaténé aux données de la banque fixe et aux bits d'adresse dans le mot d'instruction. Ce système permet de gérer l'adressage à l'aide d'un mot de 16 bits, mais il impose une plus grande charge aux programmeurs qui, dans un environnement dépourvu d'outils adéquats, doivent s'occuper de définir divers codes binaires dans les instructions pour indiquer l'utilisation de la banque effaçable, de la banque fixe ou du super bit de banque.
Bien que cela simplifie le matériel, cela augmente la complexité du logiciel, ce qui indique que l'importance du logiciel n'a pas été pleinement reconnue par les concepteurs.
Pour réduire encore la taille et la masse, l'AGC est conçu avec un seul circuit additionneur, que l'ordinateur utilise pour mettre à jour les entrées incrémentielles, faire avancer le registre d'adresse suivant, modifier les adresses spécifiées et effectuer toute l'arithmétique. L'additionneur et les 16 canaux d'entrée/sortie sont probablement les circuits les plus occupés de la machine.

CALCULS

- La plupart des ordinateurs ont une unité logique arithmétique (Arithmetic Logic Unit ou ALU) qui effectue des opérations logiques arithmétiques et booléennes (6). Comparée à la plupart des ordinateurs, l'unité arithmétique de l'AGC est très limitée : la seule opération qu'elle effectue est l'addition de valeurs 16 bits, c'est pourquoi on l'appelle simplement unité arithmétique, et non une unité logique arithmétique. (Malgré son unité arithmétique limitée, l'AGC peut toutefois effectuer une variété d'opérations arithmétiques et logiques, y compris la multiplication et la division).
Vous vous demandez peut-être comment l'AGC effectue une variété d'opérations arithmétiques et logiques si l'unité arithmétique ne prend en charge que l'addition. La soustraction s'effectue en complétant une valeur (c'est-à-dire en inversant les bits) puis en l'additionnant. La plupart des ordinateurs disposent d'un circuit de complément intégré à l'ALU, mais l'AGC est différent : lorsque le registre B est lu, il peut fournir soit la valeur, soit le complément de la valeur stockée. Ainsi, pour soustraire une valeur, la valeur est stockée dans le registre B, puis le complément est lu et ajouté.

Qu'en est il des fonctions booléennes ? Alors que la plupart des ordinateurs implémentent des fonctions booléennes avec des circuits logiques dans l'ALU, l'ordinateur de guidage Apollo parvient à les implémenter sans matériel supplémentaire. L'opération OU (OR operation) est mise en œuvre par une astuce du circuit de registre. En ouvrant deux registres sur le bus d'écriture en même temps, un 1 provenant de l'un ou l'autre registre mettra le bus au niveau haut, ce qui donnera le OU des deux valeurs. ET (AND) est effectué en utilisant la formule A ∧ H = ~(~A ∨ ~H); la complémentation des deux arguments, l'exécution d'un OU, puis la complémentation du résultat donne l'opération ET. L'opération XOR est calculé à l'aide de la formule A ⊕ H = ~(A ∨ ~H) ∨ ~(H ∨ ~A), qui n'utilise que des compléments et des OU. Il peut sembler inefficace d'effectuer autant d'opérations de complément et de OU, mais comme l'instruction doit prendre 12 intervalles de temps dans tous les cas (en raison de la synchronisation de la mémoire), il convient de ralentir l'instruction.

La multiplication est effectuée par des additions, des soustractions et des décalages répétés à l'aide d'un algorithme Radix 4 booth qui opère deux bits à la fois. La division est réalisée par des soustractions et des décalages répétés. Comme la multiplication et la division nécessitent plusieurs étapes en interne, elles sont plus lentes que les autres instructions arithmétiques.



L'AGC est conçu pour utiliser au maximum 85% de sa capacité, laissant 15% pour les imprévus et peut s'éteindre et s'allumer en moins de deux secondes sans aucune perte de données. Pour être plus précis : les tâches ont une capacité remarquable à définir un point dans leur exécution où elles peuvent être redémarrées en cas de problème du système. La logique de traitement est conçue de telle sorte que lorsqu'une phase importante d'un calcul est atteinte, un point de redémarrage peut être défini. Dans le cas d'un redémarrage du système (et non d'un redémarrage complet, qui efface toutes les données en mémoire vive), les données en mémoire sont préservées et la tâche peut reprendre à son point de redémarrage prédéterminé comme si rien ne s'était passé.
C'est pour cette raison que les astronautes n'ont pas trop eu peur de l'équivalent (de nos jours) d'un "écran bleu de la mort qui tue" (Blue screen of Death - BSoD) au milieu d'une manœuvre critique. En cas d'urgence, ils peuvent toujours redémarrer l'AGC et continuer comme si de rien n'était.

Aucune donnée dans l'AGC ne provient de calculs internes ou d'entrées de l'équipage. Ce sont les puissants ordinateurs du centre de contrôle (RTCC) qui mettent à jour les AGC du CSM et du LM via une liaison montante spéciale. Ainsi à plusieurs reprises au cours d’une mission, à la discrétion des contrôleurs de vol, des données peuvent être téléversées dans l’ordinateur de bord depuis les différentes stations de suivi. Ces mises à jour concernent essentiellement l’horloge de mission, le référentiel utilisé… La plus fréquente et la plus cruciale consiste à actualiser les vecteurs de position et de vitesse du véhicule spatial. Le format utilisé pour ces téléversements vers l'AGC est identique au langage utilisé par son interface, le DSKY, ainsi en cas de défaillance, les astronautes peuvent eux-mêmes procéder manuellement aux mises à jour via le clavier du DSKY.



L'ALIMENTATION ÉLECTRIQUE DE L'AGC


L'AGC est alimenté par le bus principal de 28V CC du vaisseau spatial. Il assure le filtrage du 28V et le distribue au conditionnement des signaux et à d'autres boîtiers d'interface reliant l'AGC à l'IMU, à la télémétrie et à d'autres systèmes. Au sein de l'AGC, des alimentations produisent 14V CC et 4V CC. Le 14V est nécessaire pour les mémoires, tandis que la logique fonctionne sur 4V.

Les systèmes d'alimentation sont différents entre le CSM et le LM. Sur le CSM, les différentes parties de l'engin spatial sont alimentées en 28 volts à l'aide de deux bus (Main A et Main B) pour la redondance. Le bus principal (Main) A est relié au module d'alimentation A31, tandis que le bus principal B est relié au module d'alimentation A30. Les deux bus sont reliés à l'intérieur de l'AGC après être passés par des redresseurs de puissance, de sorte que l'un ou l'autre bus peut alimenter l'AGC.

(Vous vous souvenez peut-être d'Apollo 13 : "Houston, nous avons eu un problème. Nous avons eu une sous-tension du bus principal B". Lorsque le réservoir d'oxygène a explosé, la tension des piles à combustible a chuté, déclenchant l'alarme de sous-tension).

Le LM utilise des batteries pour son alimentation en 28 volts, plutôt que des piles à combustible. Au lieu d'un bus principal A et d'un bus principal B, le LM dispose d'un bus pour le commandant (CDR BUS) et d'un bus pour le pilote du module lunaire (LMP BUS). L'AGC du module lunaire est uniquement connecté au CDR BUS, il n'y a donc pas de redondance.

Deux alimentations 4V différentes sont produites dans l'AGC. Celle qui est connectée à la plupart des modules logiques est appelée 4SW, car elle est coupée lorsque l'AGC est mis en veille (un mode trés basse consommation). L'autre 4V va aux quelques parties de l'AGC qui doivent fonctionner en permanence. Par exemple, l'oscillateur d'horloge, le diviseur et le scaleur produisent des signaux de synchronisation utilisés par l'IMU, la télémétrie et d'autres systèmes, et doivent donc les produire même lorsque l'AGC est en veille.




LE SOFTWARE (LOGICIEL) DE L'AGC


La conception du logiciel de l'AGC a nécessité le travail de 350 ingénieurs (pic d' activité en 1968) et l'équivalent de 1400 années de travail pour une personne seule jusqu'à l'atterrissage sur la Lune. La création du logiciel Apollo a été aussi complexe que la conception du matériel. C'est l'ingénieure Margaret Hamilton qui, en tant que directrice de la division logiciel du laboratoire d'instrumentation du MIT, a eu l'idée de nommer la discipline, le "Génie Logiciel", afin de lui donner une légitimité.

L'un des plus grands défis rencontrés lors du développement de l'AGC a été le développement de son logiciel. Les ingénieurs chargés de développer l'ordinateur de navigation ont également dû créer les programmes nécessaires. Sans spécifications ni idées concrètes sur ce que ces programmes devaient réaliser, et la vie des astronautes leur étant confiée, il a fallu trouver des solutions fiables.

En 1963, les concepteurs déterminent que le logiciel de l'ordinateur de bord pour Apollo aura une longue liste de possibilités, y compris agir en tant que "pilote" du propulseur Saturn V (en particulier le S IVb, dont il gère l'arrêt et le redémarrage lors de l'injection trans-lunaire), le contrôle des abandons du vol, la visée, toutes les tâches de navigation et de commande de vol, la détermination et la commande d'attitude, les tâches numériques du pilote automatique, et par la suite toutes les manoeuvres impliquant des changements de vitesse.
Les programmes pour ces tâches ont dû s'adapter dans les mémoires de deux petits ordinateurs, un dans le CM et un dans LM.

Certaines parties de la programmation informatique sont réalisées tôt et sont essentiellement indépendantes des objectifs de la mission. Celles-ci comprennent le code de base du système exécutif de l'ordinateur, le contrôle de séquence, les instructions de synchronisation et d'interruption, inchangés depuis la conception initiale du Dr Laning, et la gestion des interfaces avec le DSKY, la télémétrie, etc.

Les routines de traitement de données complexes mais non urgentes de navigation, de ciblage de guidage, d'extrapolation de trajectoire et de calculs d'éphémérides lunaires sont également achevées relativement tôt. Une grande partie de la base analytique et algorithmique de ceux-ci provient des travaux antérieurs de l'ingénieur en génie électrique et mathématicien Richard Battin pour les études de missions spatiales automatiques. Pour Apollo, le Dr Battin, le Dr James Miller et Norman Sears et d'autres analystes apportent des améliorations significatives à l'efficacité et aux performances de ces routines, dont beaucoup sont d'une importance fondamentale.
Les pilotes automatiques numériques, le système de guidage et d'autres fonctions spécifiques à la mission fonctionnant pendant les phases les plus stressantes des vols ont nécessité une coordination considérable avec les agences externes : les concepteurs des engins spatiaux, le Manned Spacecraft Center et les astronautes. Plusieurs procédures formelles d'échange de données ont été tentées, mais les plus efficaces dans de nombreux cas ont été les contacts personnels directs que les analystes et programmeurs ont établis individuellement avec d'autres personnes dont ils ont appris qu'elles disposaient des informations exactes.


Les problèmes se sont multipliés. En 1966, il devenait clair que le MIT ne serait pas en mesure de construire un ordinateur aussi puissant et fiable que Charles Draper l'avait imaginé, un ordinateur qui pourrait faire toute la navigation tout en tenant dans la capsule spatiale. Par conséquent, la décision a été prise d'effectuer la navigation principale à partir du sol, l'AGC ne devant servir que de sauvegarde. Cependant, il lui fallait encore être capable d'effectuer la navigation de manière autonome car lors du passage derrière la Lune du vaisseau spatial Apollo, les informations de navigation de la Terre ne pourraient pas l'atteindre. De plus, l'AGC devait également être en mesure de prendre le relais si la connexion radio à la Terre était perdue pour quelque raison que ce soit.

Ces exigences réduites par rapport aux souhaits initiaux furent donc mises en œuvre avec un grand engagement. Le problème restait que de nombreuses techniques de support du génie logiciel n'existaient pas encore. De nombreux aspects ont été abordés lors du développement et ont conduit à de nouvelles solutions

- Le développement du logiciel de bord pour le programme Apollo fut un exercice important tant pour la NASA que pour les développeurs. La NASA a acquis une expérience considérable dans la gestion de projet d'importants logiciels en temps réel, qui influencera directement le développement des logiciels servant sur Skylab et à bord de la Navette spatiale. Les concepts de Mme Hamilton en matière de logiciel asynchrone, d'ordonnancement des priorités, de réutilisation des logiciels et de capacité décisionnelle intégrée, tels que les affichages de priorité, sont devenus le fondement d'une conception logicielle ultra-fiable.

On peut citer de nombreux exemples d’application réussie sur Apollo dont le plus important est celui d’Apollo 11. Le 20 juillet 1969, trois minutes avant l’atterrissage d'Eagle sur la Lune, le logiciel annulait une commande permettant de basculer le traitement prioritaire de l’ordinateur de vol sur un système radar dont le commutateur «marche» avait été activé manuellement, en raison d'une check-list incorrecte fournie au pilote. Si la neutralisation logicielle n’avait pas été active, préprogrammée, testée et simulée, l’atterrissage du LM aurait pu être interrompu ou il se serait écrasé, ce qui aurait peut-être tué les astronautes et compromis le programme de vol spatial habité.
Le code, de 40 000 lignes, du LM et le code correspondant pour le CSM sont écrits sous le contrôle direct de la conceptrice Mme Hamilton. Ses idées uniques comprennent : l'utilisation des affichages prioritaires, l'établissement des exigences strictes en matière d'ingénierie de tous les composants et sous-systèmes afin d'éliminer les erreurs d'interface avec le logiciel de vol au niveau des systèmes, le débogage de tous les composants et leurs tests avant l'assemblage, et la simulation de toutes les situations imaginables au niveau des systèmes avant de relâcher le code.
Cela permet d'identifier de potentielles anomalies et d'aboutir à un code ultra-fiable. Aucun bug logiciel n’a jamais été détecté lors d’une mission Apollo. Mme Hamilton a exigé que le code de vol soit conçu pour fonctionner correctement dés la première fois: «Il n'y avait pas de seconde chance». Apollo vit encore aujourd'hui et continue d'influencer le monde moderne en partie grâce aux nombreuses innovations créées et défendues par Mme Hamilton.

La programmation de l'ordinateur du module de commande (AGC) et celui du LM est dirigée par le Massachusetts Institute of Technology (MIT) à Cambridge, Massachusetts.
Dans le programme Apollo, ainsi que dans d'autres programmes spatiaux avec des tâches multiples, le logiciel système et quelques programmes machine subalternes ne sont écrits qu'une fois, avec quelques modifications pour aider à intégrer le nouveau logiciel. En effet, chaque mission produisant de nouvelles conditions opérationnelles une nouvelle conception doit tenir compte de ces modifications. En concevant le logiciel pour effectuer des tâches compliquées, les ingénieurs ont eu besoin de trouver des moyens ingénieux d'adapter le code dans les contraintes de mémoire. Et bien sûr, tout cela n'a jamais été fait auparavant, du moins pas à ce niveau d'échelle et de complexité.
Définir des conditions est la partie la plus difficile du cycle de développement du logiciel. Les spécifications sont le rapport du client sur ce que le produit fini doit faire. Des conditions incorrectement préparées ou mal définies signifient que le logiciel résultant sera probablement inachevé et inutilisable.
Selon le type de projet, le client peut avoir peu ou beaucoup à faire avec la préparation des spécifications. Dans la plupart des cas, une équipe de développeurs de logiciel travaille avec le client.
Le système d'exploitation de l'AGC est un système simple en temps réel (asynchrone) (7), capable d'effectuer plusieurs trâches en même temps (une forme de multitâche rudimentaire), d'attribuer la mémoire vive (RAM) et d'établir leurs priorités en débutant par la plus élevée (8) .

Le système d'exploitation inclus deux programme liés à la planification du travail : L'éxecutif (EXECUTIVE) et la liste d'attente (Waitlist).

Un système multi-processus contrôlé par priorité appelé "EXECUTIVE" est utilisé comme système d'exploitation. Celui-ci permet de traiter jusqu'à huit tâches (ou processus) simultanément dont l'une est un processus inactif et les sept autres des processus "en cours de travail". L'ordonnancement se fait principalement par le biais d'un multitâche coopératif. Les processus doivent interroger périodiquement (toutes les 20 ms) le registre "NEW JOB", qui indique si une procédure de priorité supérieure est présente. Étant donné que l'AGC est un ordinateur avec un nombre fixe de programmes et ne reçoit pas de mises à jour logicielles en permanence, cela fonctionne bien. Les développeurs ont le contrôle total des programmes de l'AGC. Ils sont néanmoins conscients qu'il est possible qu'un seul processus ne réagissant pas puisse bloquer le travail d'autres. Par conséquent, un composant de travail préventif, un "veilleur de nuit", est également utilisé dans l'AGC : la détection d'erreur "Night Watchman": Le registre "NEW JOB" contient les informations sur le processus ayant actuellement la priorité la plus élevée. Si le registre "NEW JOB " n'est pas interrogé assez souvent par les tâches en cours d'exécution, le "Night Watchman" provoque un redémarrage. D'où la mention "Principalement" au début de ce paragraphe. L'ordonnancement de l'AGC est donc un mélange de multitâches coopératif et préemptif. En cas de redémarrage d'un processus, celui-ci ne doit pas non plus nécessairement recommencer entièrement depuis le début et répéter tous ses calculs (éventuellement complexes) ; les tables de redémarrage permettent de pouvoir le reprendre à un point déterminé. Étant donné que plusieurs processus non synchrones peuvent fonctionner en même temps, et qu'ils peuvent donc présenter des progrès de traitement différents, il est nécessaire d'écrire les points de redémarrage déterminés indépendamment les uns des autres. A cet effet, les tables de redémarrage sont divisées en cinq groupes. Pour que cette mise à jour indépendante des tables de redémarrage fonctionne pour les processus en cours d'exécution, il faut qu'ils se trouvent dans des groupes de redémarrage différents.
Il existe également la "WAITLIST" (liste d'attente), un composant contrôlé par interruption, qui est utilisé pour les processus commandés par le temps. Ceux-ci, appelés "tâches de liste d'attente" (Waitlist-Tasks), sont de courts blocs d'instructions, comme par exemple la signalisation de l'expiration d'une minuterie ou la lecture des capteurs d'accélération. Le processus est suspendu dans son activité en cours par une interruption, les informations de continuation sur le processus en cours sont enregistrées et finalement le code des "tâches de liste d'attente" respectives est exécuté. Les interruptions (supplémentaires) sont empêchées pendant l'exécution des «tâches de liste d'attente», ce qui fourni une autre raison pour n'exécuter que de courts blocs d'instructions dans ce mode. Si un processus plus long doit être exécuté via la liste d'attente, seul l'ordonnancement de ce dernier est effectué avec des interruptions désactivées. Les processus d'interruption sont également soumis à des mesures de sécurité : Le système d'exploitation vérifie si une tâche de la liste d'attente passe trop de temps en mode avec interruptions désactivées ("Rupt-Lock"). La liste d'attente a une limite de neuf tâches courtes. Les tâches de la liste d'attente ont des temps d'exécution de 4 millisecondes, voire moins.



Types d'exécution du code dans l'AGC

Le logiciel AGC a plusieurs façons d'exécuter du code. Certaines sont involontaires et cachées au programmeur, d'autres varient selon qu'il s'agit de tâches en temps réel ou de programmes de type batch (9).

Le vol de cycle est utilisé pour mettre à jour les compteurs de l'AGC. C'est-à-dire qu'une impulsion arrive pour mettre à jour un compteur et cela force une instruction cachée à s'exécuter à la fin de l'instruction courante et avant le début de l'instruction de programme normale suivante. L'instruction cachée incrémente ou décrémente le compteur.

Ces compteurs proviennent de dispositifs tels que les accéléromètres de l'un ou l'autre des vaisseaux spatiaux ou le radar de suivi de rendez-vous du LM. Si le taux d'impulsions est élevé, il peut prendre un pourcentage significatif des cycles de calcul. Pendant le lancement, les accélérations sont élevées et le taux d'impulsions l'est également. Lors de l'alunissage d'Apollo 11, des défauts de conception du radar de rendez-vous l'ont amené à rechercher des signaux et à envoyer un taux élevé d'impulsions de repositionnement d'antenne à l'ordinateur, surchargeant ainsi les programmes en cours d'exécution pour déclencher les alarmes 1201 et 1202.

Les interruptions telles qu'une pression sur une touche par un astronaute ou l'arrivée d'un mot complet de 16 bits en provenance de la liaison montante de télémétrie forceront une branche d'interruption et un changement d'état à la fin de l'instruction en cours.

Les traitements par lots sont exécutés pour atteindre de nombreux objectifs. Par exemple, l'astronaute peut demander à afficher la position actuelle du vaisseau spatial sur l'écran du DSKY. De manière plus significative, les programmes correspondent aux principales phases de la mission, comme la descente vers la Lune ou la rentrée atmosphérique. L'astronaute (ou le contrôle de la mission via la télémétrie) peut lancer un programme qui affiche son numéro sur le DSKY et s'exécute en arrière-plan.

Un certain nombre de programmes s'exécutent ainsi, chacun ayant une priorité relative par rapport aux autres en cours d'exécution. Le code le plus prioritaire s'exécute jusqu'à ce qu'il abandonne le contrôle, épuise le temps qui lui est alloué ou doive attendre quelque chose, puis le code suivant est envoyé. Tous ces programmes se disputent les ressources du processeur lorsque l'AGC n'exécute pas de code involontaire ou ne traite pas une tâche en temps réel.

Les tâches en temps réel sont liées à l'une des nombreuses minuteries de l'AGC. Lorsque la minuterie "saute", la tâche est exécutée en tête de tous les programmes batch. Elles sont d'une durée très limitée, mais peuvent définir une variable pour permettre à un programme batch de prendre des mesures plus importantes une fois la tâche en temps réel terminée. Souvent, elles définissent des exécutions futures en fixant un nouvel intervalle de temps.

Ainsi, dans la hiérarchie d'exécution, l'AGC traite le code involontaire, les vols de cycles, puis les interruptions, les tâches en temps réel, puis les programmes batch avec ordonnancement prioritaire.


On peut programmer un ordinateur à plusieurs niveaux.
- Le code machine (la langue binaire réelle de l'ordinateur elle-même), est une méthode pour indiquer des instructions. Cependant, il est pénible d'écrire et on est enclin à l'erreur.
- Ou le langage d'assemblage, qui emploie la mnémonique des instructions (par exemple, AJOUTEZ au lieu d'un code opération 3-bits).

La NASA et le MIT élaborent un plan d'exploitation du système de guidage et de navigation (Guidance and Navigation System Operations Plan ou GSOP) pour chaque mission et clarifient les besoins en logiciels. La NASA examine le GSOP 18 mois, 16 mois et 14 mois avant le lancement et le "gèle" 13 mois et demi avant le lancement. Le développement du programme est terminé 10 mois et demi avant le lancement et les tests sont terminés 8 mois avant.
Ce logiciel est stocké au MIT et l’enregistrement sur bande magnétique est envoyé à NAA (fabricant du CM) et à Grumman (fabricant du LM) et utilisé pour les simulations.
Quatre mois avant le lancement, la mémoire corde est terminée et intégrée au vaisseau spatial. Les concepteurs ont développé les programmes en utilisant un ordinateur 1800 de Honeywell et plus tard un IBM 360, mais jamais avec du matériel réel de vol.
En concevant le logiciel pour effectuer des tâches compliquées, les ingénieurs logiciels ont eu besoin de trouver des moyens ingénieux d'adapter le code dans les contraintes de mémoire. Et bien sûr, rien de tout cela n'a jamais été fait auparavant, du moins pas à ce niveau d'échelle et de complexité.

Tout aussi important que la génération des programmes est leur vérification, pour s'assurer qu'ils rempliront les missions comme prévu. Cette vérification est effectuée sur deux Honeywell 1800, deux IBM 360/75 et deux ordinateurs à usage général SDS 9300. Les programmes plus récents sont également vérifiés à l'aide de techniques informatiques hybrides analogiques-numériques, du simulateur du modules de commande, du simulateur de module lunaire et d'ordinateurs de vol réels. Lorsqu'un programme de vol a été généré et vérifié, les ordinateurs à usage général sont utilisés pour produire des bandes magnétiques, des "master de tissage", qui sont transmis à la compagnie Raytheon pour une utilisation dans le fonctionnement des machines qui tissent les mémoires cordes.


COLOSSUS

COLOSSUS est l'appelation du logiciel qui est exécuté sur l'AGC installé dans le module de commande (CM) d'Apollo 8 à 17. Il a été écrit dans un langage informatique (langage d'assemblage AGC) inventé au laboratoire Instrumentation/Draper du MIT.
Il faut savoir que si toutes les fonctions logicielles requises pour les missions lunaires avaient été écrites directement en langage d'assemblage de l'AGC, c'est-à-dire dans le langage natif de l'unité centrale de l'AGC, il aurait fallu plus de mémoire pour le stockage des programmes que celle qui était physiquement disponible dans l'AGC.
Il est important de comprendre que l'AGC n'avait pas la capacité de charger des programmes en mémoire au moment de l'exécution, à l'exception de fragments de code extrêmement petits (saisis manuellement par les astronautes ou téléchargés par liaison montante de télémétrie). Tous les logiciels nécessaires à la mission étaient encodés dans la mémoire corde, qui devait être fabriquée et scellée hermétiquement dans l'unité informatique. En d'autres termes, tous les logiciels devaient tenir dans les 38 912 mots de 15 bits de mémoire (36 Ko de corde centrale et 2 Ko de RAM).

Pour résoudre ce problème, les concepteurs de l'AGC ont choisi d'utiliser une partie de la précieuse mémoire centrale pour mettre en œuvre un ordinateur virtuel à l'intérieur de l'ordinateur. Cet ordinateur virtuel, "l'interpréteur", était un sous-programme (au sein du programme Colossus ou Luminary) qui, lorsqu'il était activé, lisait ses propres instructions en mémoire et les exécutait. Comme chacune des instructions de l'interpréteur représentait de nombreuses instructions en langage d'assemblage AGC, il était possible de faire tenir une plus grande quantité de fonctionnalités dans la même quantité de mémoire centrale, même en tenant compte du fait qu'un logiciel était nécessaire pour mettre en œuvre l'interpréteur. L'inconvénient était que l'implémentation d'une fonctionnalité particulière en langage d'interprétation nécessitait beaucoup plus de temps d'exécution que l'implémentation de la même fonctionnalité directement en langage d'assemblage AGC. Mais tant que le programme s'exécutait "assez vite", cela n'avait pas beaucoup d'importance.

Le code interprété est à certains égards beaucoup plus élégant et utile que le langage d'assemblage AGC pur. Par exemple, l'interpréteur permet un espace d'adresse linéaire (ce qui n'est pas le cas du langage d'assemblage pur), et possède de nombreuses instructions de "haut niveau" pour faire des choses comme opérer sur des vecteurs de position ou d'état et effectuer des opérations trigonométriques.

Le logiciel dont le code source est en "langage d'assemblage" doit être traité pour le transformer en un format binaire ("langage machine") compris par l'ordinateur lui-même. Le programme qui convertit le code source écrit par l'homme en code binaire lisible par la machine s'appelle un "assembleur". La conversion du code source en code machine a eu lieu avant le chargement du logiciel dans l'AGC, de sorte que le code en langage d'assemblage n'a en fait pas été exécuté par l'AGC lui-même, mais a plutôt été traité par des ordinateurs au sol des semaines ou des mois avant les vols Apollo proprement dits. Donc, afin d'être chargé dans l'AGC, en réalité, pour être converti en mémoire corde dans l'AGC, il est initialement nécessaire "d'assembler" le code source du programme en langage machine binaire, en utilisant un programme informatique appelé YUL ou de son programme successeur : GAP (General Assembler Program). Le système YUL est conçu pour permettre aux programmeurs de composer rapidement, d'éditer et de tester le code avant qu'il ne soit généré sous forme d'instructions permanentes en lecture seule stockées dans la mémoire corde de l'AGC. Comme plusieurs autres langages de programmation de l'époque, les deux langages utilisés dans ce code sont des langages à format fixe. Cela signifie que le format du code a été imaginé et imprimé sur des pages nécessaires pour prendre une forme spécifique afin que les routines de conversion produisent les instructions correctes pour l'ordinateur numérique qui éventuellement les exécuterait. Le code AGC a été écrit et édité sous de nombreuses contraintes, y compris le format rigidement fixe requis par le mécanisme de perforation IBM 026 et le lecteur de cartes Honeywell 800, ainsi que la syntaxe limitée de ses principaux langages de programmation. Les programmeurs devaient donc être flexibles dans leur imagination de ce à quoi le code ressemblerait et comment il fonctionnerait lorsqu'il serait transformé dans ces autres formats.

(Incidemment, à des fins de débogage, les développeurs d'origine disposaient d'un module spécial de lecture-écriture qui pouvait être programmé à partir d'une bande papier, puis branché sur l'AGC et utilisé comme s'il s'agissait d'une mémoire corde. Bien que ce processus n'ait apparemment pas été facile, il était certainement plus pratique que de fabriquer une mémoire corde. L'assembleur produisait les données pour créer la bande de papier.)

En fait, la situation est légèrement plus complexe que cela. D'une part, en parlant de "langage d'assemblage" ci-dessus, j'utilise une terminologie de programmation générique, pas nécessairement utilisée par l'équipe de développement de l'AGC. En réalité, les programmes étaient généralement dans une combinaison de deux langages de programmation différents, mélangés :

- Le langage d'assemblage, qui était qualifié de "basic" (bien qu'il n'ait rien à voir avec le langage de programmation BASIC de Kemeny & Kurtz, inventé à peu près à la même époque).

- Le langage d'interprétation, un langage de niveau supérieur qui était exécuté par un "interpréteur" écrit en basic.

Ensuite, comme le matériel de l'AGC et les idées des développeurs ont changé au fil du temps, ces langages de programmation ont également évolué, passant par différentes étapes. En d'autres termes, le langage de programmation lui-même n'était pas une seule chose, mais plusieurs choses différentes au fil du temps, même s'il est resté constant tout au long des missions habitées qui ont réellement volé.

L'assembleur AGC original, qui transformait ce mélange de langages de programmation en un programme exécutable pouvant être stocké dans les mémoires centrales et exécuté sur l'AGC, a été appelé YUL (de "yuletide" / période autour de Noël) parce que la date de livraison prévue de l'ordinateur de guidage MOD 1A, avec le logiciel système, était Noël 1959. Au fil du temps, YUL a fini par prendre en charge le MOD 1A, le MOD 1B, le MOD 3S, le MOD 3C, l'AGC4 (AGC du Bloc I), et deux versions de l'AGC final du Bloc II. Plus tard, YUL a été remplacé par l'assembleur GAP (General Assembler Program).


VERSIONS DE DÉVELOPPEMENT


VERSION

ANNÉE

COMMENTAIRE

Mod 1A

1959

Nommé "l'ordinateur de Noël" car il devait être prêt pour Noël 1959. En raison de cela, l'assembleur a donc été appelé "YUL-Sytem".

Mod 1B

1961

Pour l'étude d'une mission martienne.

Mod 3C

1962

Premier prototype AGC (AGC3).

AGC4

1963

Devait devenir un prototype pour la version de vol ; est devenu une autre configuration expérimentale.

AGC4B

1963/64

Prototype pour le Block I.

AGC5

Mai 1964

Développement ultérieur.

AGC6

Août 1964

Premier AGC Block I par Raytheon.

AGC Block II

1966

Version uilisée pour les vols habités.


Avez-vous remarqué comme il fait toujours beau dans l'espace?... Les programmes portant des noms tels que Sundisk, Solarium et Sunspot sont des versions pré-Colossus du logiciel de l'AGC du module de commande. Ce ne sont pas des formes de Colossus en tant que telles, mais elles fournissent une partie du code pour Colossus.

Ci-dessous, un arbre généalogique simplifié du programme COLOSSUS et accessoirement de LUMINARY. On remarque que le nom du programme informatique du module de commande commence par un "C" pour CM (Command Module), sauf pour le vol Apollo VII (Sundisk), c'est pour le différencier du programme informatique du LM, celui-ci commençant par un "L" (Luminary) sauf pour le vol Apollo IX (Sundance).

 
Image originale : site www.ibiblio.org/apollo

Le logiciel de l'AGC a continué d'évoluer pendant la phase de vol habité du programme Apollo. Les programmes de base pour la gestion des ressources système sont restés presque inchangés, mais les missions individuelles du programme Apollo devaient chacune remplir des tâches spéciales ou des objectifs de mission. La portée des missions ultérieures a également été considérablement élargie par rapport aux précédentes. Par exemple, les trois dernières missions Apollo transportaient chacune un Lunar Roving Vehicle. De telles extensions des objectifs de la mission et des tâches spéciales dans les missions individuelles ont entraîné le besoin d'un logiciel de mission nouveau ou modifié. Les versions utilisées dans les missions habitées sont les versions suivantes.
Ci-dessous, la liste des 42 programmes contenus dans l'AGC du module de commande.

Programmes de l'ordinateur du CM

P00 : Prelaunch CMC Idling
P01 : Prelaunch Initialization
P02 : Prelaunch Gyro Compassing
P03 : Prelaunch Optical Gyro Compassing Verification
P06 : Prelaunch CMC Power Down
P11 : Boost Earth-Orbit-Insertion Monitor
P15 : Boost TLI Initiate/Cutoff
P20 : Coasting Flight Universal Tracking and Rendezvous Navigation
P21 : Coasting Flight Ground-Track Determination
P22 : Coasting Flight Orbital Navigation
P23 : Coasting Flight Cislunar Navigation
P27 : Coasting Flight CMC Update
P24 : Coasting Flight Rate-Aided Optics Tracking
P29 : Coasting Flight Time of Longitude
P79 : Coasting Flight Final Rendezvous
P30 : Targeting External Ov
P32 : Targeting Coelliptic Sequence Initiation (CSI)
P33 : Targeting Constant Delta Altitude (CDH)
P34 : Targeting Transfer-Phase Initiation (TPI)
P35 : Targeting Transfer-Phase Midcourse (TPM)
P37 : Targeting Return-to-Earth
P72 : Targeting LM Coelliptic Sequence Initiation
P73 : Targeting LM Constant Delta Altitude
P74 : Targeting LM Transfer Phase Initiation
P75 : Targeting LM Transfer Phase Midcourse
P76 : Targeting LM Target Ov
P31 : Targeting Height Adjustment Maneuver
P36 : Targeting Plane Change Maneuver
P77 : Targeting Impulsive Ov
P40 : CSM Powered-Flight Service Propulsion System (SPS) Maneuver
P41 : CSM Powered-Flight Reaction Control System (RCS) Maneuver
P47 : CSM Powered-Flight Thrust Monitor
P51 : Alignment IMU Orientation Determination
P52 : Alignment IMU Realign
P53 : Alignment Backup IMU Orientation Determination
P54 : Alignment Backup IMU Realign
P61 : Entry Preparation
P62 : Entry CM-SM Separation and Pre-Entry Maneuver
P63 : Entry Initialization
P64 : Entry Post 0,05G
P65 : Entry Up control
P66 : Entry Ballistic
P67 : Entry Final Phase



Film promotionnel de la compagnie Raytheon, fabricant de l'AGC

Le saviez vous ?? Au cours de la mission Mercury MA-9 de mai 1963, la NASA a découvert que les humains confinés dans de petits espaces produisaient des atmosphères humides et corrosives qui endommageaient les composants électroniques et les connecteurs électriques. Cette découverte, qui a changé la donne, a eu une incidence considérable sur l'architecture et le conditionnement de l'AGC. La NASA a exigé que les connexions électriques de l'ordinateur et du CM soient étanches au vide et à l'humidité.

Anecdote : Chaque fois que les performances de l'AGC sont cités, c'est pour s'en moquer, le comparant avec n'importe quel ordinateur ou téléphone mobile actuels, bien plus puissant!
Comme si, d'une certaine manière, cela nous faisait nous sentir mieux. Il va sans dire qu'elles étaient impressionnantes pour l'époque. Bien que son processeur, opérant environ 80 000 instructions par seconde, ne soit pas particulièrement rapide, on ne saurait trop insister sur l'impact que sa mémoire limitée a eu sur les développeurs des logiciels.
L’AGC disposait d’une ROM de seulement 36 864 mots, à peu près égal à 72 kilo-octets aujourd'hui et d’une RAM de 2 048 mots soit 4 ko. En réalité, l’AGC n’utilisait pas d’octets, mais des "mots" (10) (de 16 bits : 15 bits de long, plus 1 bit pour la parité), le concept "d'octet" n'existait pas dans l'AGC, les 15 bits d'un mot étaient accessibles en une seule fois, sans qu'il soit possible de diviser facilement le mot en plusieurs parties plus petites. Considérez les limites imposées aux programmeurs : tous les logiciels pour le vol aller-retour vers la Lune devaient tenir dans ces 36 864 mots de la mémoire à cordes, pour le dire autrement, les programmeurs ne codaient pas les logiciels avec leurs coudes et optimisaient chaque ligne de code au maximum.

Au final, ses performances étaient comparables à celles d'un Apple II (1977), d'un Commodore 64 (1982) ou d'un ZX Spectrum (1982).


Fait intéressant 1 : malgré le déploiement technologique de l'AGC, personne n'a pu concevoir une connexion physique entre le CGC (Command Guidance Computer) du CM et le LGC (Lunar Guidance Computer) du LM. Étant donné que le CGC est le principal ordinateur tout au long de la mission, cela signifie que les astronautes doivent saisir manuellement la position et les données d'un ordinateur à un autre, une tâche lourde et longue. Pour couronner le tout, les angles de référence des deux véhicules sont différents (en raison de la façon dont les deux engins spatiaux sont orientés lorsqu'ils sont amarrés), la référence "haut" pour chaque système embarqué étant différente. Un roulis vers la droite pour le CM est un roulis vers la gauche pour le LM lorsqu'il est amarré, donc un angle de cardan pour le CSM doit être interprété pour le LM compliquant davantage la procédure d'alignement de l'IMU du LM lors de l'activation en vol. (comme lors du vol Apollo XIII).


Fait intéressant 2 : Et si l'AGC échoue dans sa tâche de navigation, que se passe t-il?
Dans ce cas, l'équipage peut déterminer son orientation et sa position à l'aide du bloc optique (OUA) du CSM ou le télescope du LM mais, si cela ne fonctionne pas également, il peut se servir du COAS ( Crewman Optical Alignment Sight ), utilisé lors des amarrages. À cette fin, les astronautes disposent de nombreuses abaques (modèles et graphiques) pour effectuer les calculs à la main, ou avec l'aide de Houston, bien que, évidemment, la précision obtenue avec ce système de réserve soit notablement inférieure à celle fournie par le système PGNCS.


(1) Un système embarqué est un système électronique et informatique autonome utilisé pour réaliser une tâche prédéfinie parfois en temps réel. L’expression "système embarqué" peut s’appliquer aussi bien sur le matériel informatique que sur les logiciels utilisés. Ses ressources sont généralement limitées. Cette limitation est généralement d'ordre spatial (encombrement réduit) et énergétique (consommation restreinte).


(2) Couche d'abstraction matérielle : c'est un logiciel intermédiaire entre le système d'exploitation et le matériel informatique.


(3) L’architecture de von Neumann est un modèle pour un ordinateur qui utilise une structure de stockage unique pour conserver à la fois les données et les instructions demandées ou produites par le calcul.


(4) Un énoncé des travaux est une entente entre un client (la NASA) et un organisme (le laboratoire d’instrumentation du MIT) qui définit ce qui est inclus dans un projet et ce qui ne l’est pas.


(5) Registre à bascule : c'est un type de circuit logique qui stocke un seul bit de données sous forme de 0 ou de 1, et peut être utilisé pour stocker une petite quantité de données. Les registres à bascule sont généralement utilisés pour stocker des informations importantes ou temporaires dans un processeur ou un système électronique.


(6) La logique booléenne est une logique à deux états : 0 et 1.
- Dans la logique booléenne, les nombres sont les chiffres du système binaire (0 et 1) et les opérateurs de base sont le "OU", le "ET" et le "NON" auxquels on ajoute l'opérateur "OUI".


(7) Asynchrone : Lorsqu’une tâche est exécutée de manière asynchrone, vous pouvez directement passer à une autre tâche avant qu’elle ne soit terminée.

(8) Sur une idée de Hal Laning travaillant pour le MIT. Dans les années 1960, la pratique courante pour un ordinateur utilisé par plusieurs personnes ou exécutant plusieurs programmes est le temps partagé. En cela, l'ordinateur alloue des microsecondes de temps à chacun d'eux et bascule entre eux. Au lieu de temps partagé, l'AGC est programmé pour la priorité. En d'autres termes, chaque programme est numéroté par ordre d'importance à un moment donné de la chronologie de la mission. Si un programme de priorité plus élevée a besoin de l'ordinateur, les autres s'arrêtent simplement et attendent qu'il se termine, puis reprennent. Pendant ce temps, la mémoire temporaire conserve les données jusqu'au point d'arrêt d'une manière similaire à celle d'un ordinateur moderne passant en mode veille. Cela non seulement élimine les accidents, mais permet également à l'équipage d'interrompre un programme en cours avec de nouvelles données au fur et à mesure qu'elles arrivent.


(9) Batch job, ou tâche par lot : c'est un programme d'arrière-plan planifié qui fonctionne de manière régulière sans aucune intervention de l'utilisateur.


(10) mots : Si vous demandez à un informaticien contemporain quelle est l'unité de base des données en informatique, la réponse est instantanée : l'octet. Huit bits de données numériques, tous regroupés dans un seul emballage adressable.
Mais cela n'a pas toujours été le cas!
Les premières générations d'ordinateurs ont opté pour la plus petite unité adressable comme "mot". La longueur des mots variait énormément, de 12 bits sur le PDP-8 à 36 bits sur les Univac séries 1100/1200. Ne pas décomposer davantage le mot permettait d'accéder à de nombreux bits sans avoir à augmenter la taille du champ d'adresse d'une instruction. En tant que tel, les "octets" individuels n'existaient pas. L'accès à des champs individuels (comme un caractère ASCII) nécessitait souvent des instructions supplémentaires pour masquer ou déplacer les données.

Petit descriptif :

Bit : Bit (abrégé "b") vient de l'anglais et se compose des mots "binary digit". Un bit est un donc un nombre binaire et peut adopter 2 valeurs "0" ou "1".
En informatique, le "bit" est l'unité de base comprenant une information.

Byte : Byte (abrégé "B") est utilisé plus souvent que bit dans l'usage courant d'une langue. Un byte est normalement composé de 8 bits.

Octet : un "octet" (abrégé "o") est toujours composé d’exactement 8 bits.

8 bits "b"=1 byte "B" =1 octet "o".





Texte et schéma en français de Paul Cultrera, tout droits réservés. Sources : livre en anglais "Journey to the Moon : The History of the Apollo Guidance Computer", "Digital Apollo" et les documents PDF n° 19770072827_197707282, 19750067792_1975067792, PDF MIT's Role in Project Apollo vol III, SCD-1006320, PDF : Hoag, D.G., P-357 - The history of Apollo on-board guidance, navigation, and control, september 1976, PDF : Reliabilty History of the Apollo Guidance Computer 1972.