Situé à bord du vaisseau spatial Apollo, l'
ordinateur de contrôle (Apollo Guidance Computer, AGC) a aidé le navire à se rendre sur la lune et à atterrir à sa surface. Le logiciel AGC a été physiquement tissé dans une mémoire de
base mémoire de
base [mémoire de corde de base]. Ken Shirrif et des personnes partageant les mêmes idées reconstruisent AGC (photo ci-dessous), qui n'a pas assez de mémoire sur les cœurs, au lieu de quoi des boîtiers de simulation de cette mémoire sont installés. Ces boîtiers ont été utilisés lors du développement du programme et des tests au sol, afin que les ingénieurs n'aient pas à constamment flasher la mémoire. Le simulateur n'a pas de documentation, donc je [l'auteur de l'article de blog / env. transl.] a effectué son analyse technique, assemblé l'interface et, à l'aide du simulateur, nous avons lancé des programmes sur notre AGC. Cependant, dans le processus, nous avons rencontré quelques difficultés.
Ordinateur AGC avec couvercle retiré. Vous pouvez voir la carte mère avec un tas de fils. Aux emplacements de mémoire, des cases de simulation sont visibles. Les cartes d'interface au premier plan sont modernes.Mémoire sur plusieurs noyaux cousus
L'AGC avait six modules de mémoire sur plusieurs cœurs cousus, chacun d'entre eux ne stockant que 6 kiloslovol d'informations (environ 12 Ko). Les modules de mémoire étaient un peu comme des cartouches ROM pour un jeu vidéo, et ils gardaient le logiciel sous une forme constante mais effaçable. Les programmes ont été enregistrés en tissant des fils à travers des noyaux magnétiques. Le fil passant par le noyau dénoté le bit 1, et le bypass un dénoté le bit 0. En tissant 192 fils à travers ou autour du noyau, il était possible de stocker 192 bits, ce qui donnait une densité beaucoup plus élevée que la mémoire réinscriptible sur des noyaux magnétiques, qui stockaient un bit par noyau.
Mémoire sur plusieurs cœurs cousus (bloc I) avec AGCFaire une telle mémoire a été un processus minutieux qui a pris 8 semaines et a coûté 15 000 $ par module. Des femmes expérimentées ont passé les fils manuellement, faisant clignoter les noyaux l'un après l'autre avec une aiguille creuse à travers laquelle le fil a été enfilé (photo ci-dessous). Ils ont été assistés par un système automatique qui a lu le programme à partir de la bande perforée et a placé un trou au-dessus du réseau de noyaux. Le tisserand a passé l'aiguille à travers le trou, menant le fil là où c'était nécessaire. Après cela, la mémoire a été montée sur le module avec des centaines de résistances et de diodes, et remplie d'époxy pour une fiabilité en vol.
Une femme flashe une mémoire permanente, y introduit un programmeSimulateur de mémoire sur des noyaux cousus à plusieurs reprises
Le processus de mémoire flash a pris beaucoup de temps et d'argent, donc une alternative était nécessaire pendant les tests et le développement. Au lieu de noyaux cousus, la NASA a utilisé ses simulateurs, permettant à l'AGC de télécharger des données à partir d'un système externe. Notre AGC a été utilisé pour les essais au sol, il n'avait donc pas de noyaux cousus, mais avait son simulateur. Il se compose de deux boîtiers connectés aux connecteurs pour les noyaux cousus, et chaque boîtier occupe trois emplacements de mémoire. Ils peuvent être vus sur le côté gauche de l'AGC sur la photo ci-dessous, et ils ont des connecteurs militaires ronds pour se connecter à un ordinateur externe.
Les boîtiers de simulation sont installés sur le côté gauche de l'AGC au lieu de vrais modules de mémoire.Bien que nous ayons une documentation détaillée pour l'AGC, je n'ai pas pu trouver la documentation du simulateur. J'ai dû appliquer une analyse technique, suivre tous les schémas et réaliser ce que font les boîtes. Leur étude externe en donne peu. Sur un côté de chaque boîtier, il y a un connecteur MIL-Spec pour la connexion à un système externe. D'autre part, il y a trois groupes de 96 broches connectés à l'AGC. Chaque groupe de contacts prend la place d'un module mémoire sur les cœurs.

L'ouverture des boîtes a montré des techniques d'assemblage non standard. En partie dans les contours, une méthode a été utilisée qui était structurellement similaire au
bois de
corde - les composants ont été
montés verticalement avec des trous dans le bloc métallique. Des deux côtés de l'unité, les contacts ont été soudés aux fils. Les autres circuits dans les boîtiers utilisaient des circuits intégrés standard (TTL 7400). Mais contrairement aux cartes de circuits imprimés modernes, les puces étaient montées à l'intérieur de modules en plastique appelés «dipstik» [
Dipstik, eng. - sonde ] et ont été enroulés ensemble avec des fils.

Disposition en bois de corde
La disposition en «cordwood» a été activement utilisée dans l'AGC pour créer des circuits analogiques, et elle est également présente dans les simulateurs de mémoire (voir photo ci-dessous). Les cercles blancs au centre sont les extrémités des résistances et des diodes montées verticalement dans le module et avec les contacts soudés des deux côtés. Les composants sont étroitement emballés, comme les bûches, c'est pourquoi cette disposition est appelée bois de corde. Les transformateurs d'impulsions sont situés sous de grands cercles gris. Il y a les mêmes de l'autre côté du module, et leurs fils orange, jaune, rouge et marron sortent des trous. Des fils noirs relient les circuits en bois de corde à la logique numérique. En haut de la photo, vous pouvez voir les chevilles sur lesquelles les diodes et les résistances sont montées, ainsi que la connexion avec les contacts connectés à l'AGC.

Le principal objectif de la disposition en bois de corde est de fournir une isolation électrique entre les circuits AGC et les boîtiers de simulation de mémoire. Dans les circuits modernes, les optoisolateurs remplissent cette fonction, mais les simulateurs ont plutôt utilisé de petits transformateurs d'impulsions. Étant donné que chaque boîtier reçoit des signaux conçus pour trois modules de mémoire différents, de nombreuses diodes combinent trois signaux en un seul. Les résistances contrôlent le courant traversant les transformateurs d'impulsions.
Il était difficile de comprendre la structure des circuits analogiques en bois de corde. Tout d'abord, le composant n'est pas visible, car ils sont intégrés au module. J'ai dû utiliser un multimètre pour comprendre où ils se trouvent. Deuxièmement, étant donné que les contacts apparaissent des deux côtés dans la disposition en bois de corde, j'ai passé beaucoup de temps à retourner la boîte à la recherche des bons contacts. Enfin, je n'ai pas pu trouver un moyen pratique de dessiner un schéma de configuration d'un bois de corde qui n'a pas généré un dédale de lignes.
Logique numérique et jauge
Dipstik était un plug-in introduit en 1968 pour faciliter le prototypage de circuits intégrés. Il a remplacé les circuits imprimés par un système d'emballage à double densité.
L'idée était dans le bloc en plastique du connecteur avec la connexion des contacts enveloppants par le bas pour connecter le circuit. Les circuits intégrés étaient montés sur un support inséré dans le bloc de connexion. Le support sur le dessus avait des oreilles de brasage pour installer des composants supplémentaires, tels que des condensateurs de découplage. La photo ci-dessous montre les modules de jauge avec un support retiré. Chaque support contenait 5 adresses IP. Les contacts CI ont été placés entre les contacts du support et les contacts du bloc de connexion. Cette idée semblait bonne, mais finalement elle n'était pas fiable. Deepstick était un projet qui a échoué.

La photo ci-dessous montre les contacts connectés à l'aide d'un enroulement de fil à partir du bas des jauges. Il était extrêmement difficile pour moi de les suivre, il était impossible de passer par chaque affichage dans la mer de fils bleus identiques. J'ai dû tout sonner avec un multimètre. Ensuite, j'ai pu dessiner un diagramme schématique et réfléchir à ce qu'il fait. Au total, environ 50 circuits intégrés ont été utilisés dans le simulateur.

A en juger par l'étiquetage des composants, les boîtiers du simulateur ont été assemblés en 1971. Et bien que quelques années seulement se soient écoulées depuis la conception de l'AGC, les technologies des simulateurs semblent déjà plus avancées, ce qui illustre les progrès rapides de la propriété intellectuelle du milieu des années 1960 au début des années 1970. AGC a été assemblé sur la base de circuits intégrés simples, chacun contenant deux portes NOR et une logique de résistance-transistor primitive intégrée (RTL). Dans les boîtiers de simulation, il existe déjà des puces de la série 7400 plus complexes contenant plus de dix éléments sur la logique transistor-transistor (TTL). Contrairement aux circuits intégrés plats obsolètes dans AGC, les boîtiers de simulation utilisent des puces dans le package DIP (package double en ligne), et de tels cas sont toujours utilisés.
Résultats d'analyse technique
Après avoir suivi tous les contours, j'ai réalisé le fonctionnement du simulateur et dessiné les
diagrammes . En fait, une boîte décode l'adresse à partir de laquelle l'accès est en cours d'accès, et la seconde envoie les données nécessaires à l'AGC (je l'appellerai la «boîte d'adresse» et la «boîte de données»).
La boîte d'adresse reçoit les signaux et les convertit en binaire. La tâche n'est pas simple, car les signaux se présentent sous la forme d'impulsions de courant élevées et de tension 14 V, conçues pour commuter les noyaux. De plus, ces impulsions sont séparées dans le temps, car certaines commutent le noyau dans une direction, tandis que d'autres reviennent en arrière. Enfin, les impulsions envoyées aux cœurs contiennent non seulement une adresse, mais également un signal pour sélectionner l'un des 6 modules, et pour sélectionner l'un des 12 threads du module.
La boîte d'adresse utilise des convertisseurs d'impulsions, convertissant les impulsions de 14 V en signaux TTL. Il contient un tas de logique AND-OR pour convertir des signaux en adresses binaires (et ce n'est pas anodin, puisque chaque module contient 6 kiloslovol, ce n'est pas une puissance de deux, donc de nombreuses manipulations au niveau du bit sont nécessaires). Les tongs bloquent une adresse lorsqu'elle est disponible. Enfin, le circuit RC du multivibrateur contrôle la synchronisation, déterminant, en fonction de divers signaux, la disponibilité de l'adresse et le moment où envoyer le résultat à l'AGC.
La boîte de données est plus simple. Il reçoit 16 bits de données d'un système externe et envoie des signaux aux amplificateurs AGC, simulant des signaux millivolt du cœur. Ces signaux sont générés par des convertisseurs d'impulsions. La boîte d'adresse et la boîte de données communiquent via les fils du fond de panier AGC.
Les boîtiers communiquent avec un système externe en utilisant des signaux différentiels pour éliminer le bruit des longs câbles. Les boîtiers contiennent des régulateurs 5 V LM109 fournissant des TTL. Un boîtier reçoit un CC non réglementé via un connecteur externe et envoie un CC non réglementé à un autre via un fond de panier AGC (ce qui, pour moi, est plutôt étrange).

BeagleBone comme interface
Après avoir traité le travail du simulateur, il était alors nécessaire de créer une interface capable de fournir des données du programme au simulateur. J'ai utilisé
BeagleBone , un petit ordinateur monocarte basé sur Linux. L'avantage de BeagleBone est qu'il dispose de microcontrôleurs rapides qui peuvent répondre en temps réel aux demandes de mémoire d'AGC.
L'interface est la carte coincée dans le BeagleBone. Chacun des deux câbles va à son simulateur de boîte.J'ai conçu une carte d'interface pour la connexion à un BeagleBone. C'est assez simple: des récepteurs linéaires différentiels
AM26C32 qui convertissent les signaux différentiels du simulateur en signaux logiques 3,3 V pour BeagleBone, et des pilotes linéaires différentiels
AM26C31 pour envoyer des signaux au simulateur. J'ai conçu la carte chez KiCad et commandé la production à
PCBWay , le sponsor de la restauration d'AGC.
J'ai écrit un programme qui fonctionne sur un microcontrôleur BeagleBone, PRU. Il s'agit, en substance, d'une machine d'état, attendant l'adresse de la boîte du simulateur, attendant le signal de synchronisation, lisant le mot de la RAM BeagleBone et envoyant le mot au simulateur. J'ai posté le programme sur
Github .
Problèmes avec le simulateur
Les simulateurs de mémoire sur des cœurs cousus à plusieurs reprises n'ont pas été assemblés conformément aux normes informatiques de contrôle embarqué d'Apollo, et en conséquence, j'ai dû prendre beaucoup de temps pour les déboguer. De nombreuses connexions ont été rompues, elles ont dû être ressoudées à nouveau (je ne sais pas si elles se sont rompues de temps en temps, ou quand j'ai compris le schéma de fonctionnement). Nous avons également trouvé un court-circuit dans une jauge et un circuit intégré défectueux.

La plupart de tous les problèmes concernaient les jauges, car de nombreux contacts intercalaient entre les jauges et IP. Le problème était que les contacts du CI étaient situés à la manière d'un sandwich entre les contacts sur le porte-jauge et le bloc où ils étaient insérés. Les jauges en plastique se plient vers l'extérieur, c'est pourquoi les contacts ne fonctionnent pas périodiquement. Après avoir plié les jambes de l'IP sous la forme de la lettre S, Mark a réussi à leur fournir un contact des deux côtés, au moins pendant un certain temps. Mais après quelques heures, les jambes molles de l'IC se sont repliées, les contacts ont recommencé à mal fonctionner, nous n'avons donc pas eu de solution à long terme à ce problème.
Le problème le plus intéressant était la
course de deux signaux de l'AGC, qui devaient s'arrêter simultanément. Ils ont alimenté les deux extrémités de la bobine du convertisseur d'impulsions, qui n'était pas censé donner un signal. Cependant, un signal a pris du retard sur l'autre, ce qui a conduit à l'apparition d'une impulsion parasite. Malheureusement, la logique numérique dans la boîte du simulateur était asynchrone, cette impulsion a bloqué le mauvais bit de l'adresse dans les bascules, et en conséquence, l'accès au mauvais endroit dans la mémoire s'est produit. En conséquence, nous avons suivi ce problème et installé des condensateurs supplémentaires qui filtrent l'impulsion. Malheureusement, nous avons pris des condensateurs trop grands et le signal dans d'autres cas a été trop retardé, ce qui a entraîné l'apparition d'autres erreurs. Ensuite, nous avons installé des condensateurs plus petits et avons finalement réussi à exécuter avec succès des programmes sur AGC à l'aide de simulateurs de mémoire de base vintage.
Conclusion
L'ordinateur de contrôle embarqué Apollo utilise la mémoire sur plusieurs cœurs cousus. Comme il ne serait pas pratique de refaire constamment une telle mémoire pendant le développement, des simulateurs ont été utilisés à la place. J'ai effectué une analyse technique du simulateur et créé une interface pour son fonctionnement à l'aide de BeagleBone. Nous avons lancé avec succès les programmes AGC via cette interface. Cependant, le simulateur de mémoire s'est avéré problématique et peu fiable.
@CuriousMarc a réalisé une vidéo détaillant notre travail avec le simulateur de mémoire: