 C'est le suivi qui nous parle de la pièce de la législation technologique de notre race humaine. Le premier pièce d'un computer qui n'a pas été offert. L'Ordinateur de vol d'Apollo est une des reliques les plus importantes de l'histoire de la technologie et de l'espace humaine. C'est ce qui nous a emmené sur la lune. Et si on compare les ordinateurs de cette époque en matière de vitesse de calcul, c'est quelque chose d'incroyable par rapport à ce qu'on a maintenant. C'est pas seulement de la Rocket Science, comme on dit en anglais, mais c'est de la Computer Rocket Science. Je suis très fier de vous présenter Christian Hesman qui parlera de la partie fusée et Michael Steyn qui parlera de la partie ordinateur. Ils ont énormément d'expérience en matière d'architecture des ordinateurs. Accueillez-les chaleureusement pour cette présentation tout sur l'Ordinateur de vol d'Apollo. Bienvenue. Ça marche ? Vous pouvez m'entendre ? Bienvenue à tout sur l'Ordinateur de vol d'Apollo. Une introduction complète sur l'architecture des ordinateurs et l'estimage d'Ion. Et le vol dans l'espace. Je suis Christian Hesman et Michael Steyn. Donc, cette présentation fait partie d'une série de talks. L'idée est d'expliquer tout sur l'architecture donnée. L'AGC, la plug-ins computer, c'est un ordinateur qui a été conçu entièrement à partir de rien, spécifiquement pour le programme Apollo. Ça a été développé ou émité entre 1961 et 1966. Il y en a 42 unités quantité force-treat. Le processeur va à 1 MHz à peu près. C'est un processeur 16 bits. Il y a 2 kg de RAM. 2 kg de RAM. Ça pèse 32 kg. L'interface est un display numérique et un clavier. Pour comparer, dans les années 1960, on ne pouvait pas simplement prendre des ordinateurs à qui c'était déjà et les mettre dans un vaisseau spatial. Les ordinateurs de l'époque étaient beaucoup trop consommateurs de courant et beaucoup trop lourds. 10 ans plus tard, on a commencé à avoir des micro-ordinateurs avec les Commodore. L'architecture est vraiment très sexy. Elle est vraiment très bizarre pour nous. Mais le matériel est très innovant pour son époque. Il y a des périphériques vraiment très intéressants. Il y avait du processing real-time et des fonctionnalités qui étaient complètement prévues de l'époque. Et ça a quand même emmé sur la lune. Ça a été utilisé pendant 2 missions de tests où c'est contrôlé depuis la Terre. 3 missions avec 3 missions habitées de tests et 7 missions opérées sur la lune. Les astrônes n'avaient pas du tout envie de donner le contrôle à un ordinateur. Ils voulaient voir tout voler maintenant. Mais pour comprendre pourquoi est-ce qu'on est passé à faire le choix avec les ordinateurs, ils font garder l'histoire d'un des aspects de la mission Apollo. C'était plutôt que poser un vaisseau complet sur la lune. C'est quand il était trop lourd. On posait un petit vaisseau sur la lune. Et on séparait le tout en 3 étapes. Il y avait une fusée Sapiens 5 qui lançait depuis l'époque de la vie, qui allait en orbite. En l'accélérant au moment, ça permettait de mettre le vaisseau dans ce qu'on appelle une orbite de retour gratuit, qui permettait d'aller jusqu'au tour de la lune. Au milieu de ce désoyage, le module de commande extrait le module de l'air et s'accroche à lui. Les deux se mettent en orbite autour de la lune. Après que les deux astronautes soient montés dans le module de l'air, ce module ralentit, ce qu'on appelle la descente avec propulsion, et ce module atterri. Après avoir redescollé ce module, les astronautes remontent dans le module de commande et le module de caressage est rejeté. Ce module réaccélère depuis la face cachée de la lune pour revenir vers la terre. À la fin, uniquement, le module de commande revient. Ces vidéos viennent d'un support sur YouTube qui s'appelle commande hausse spacecrafts work. Le module de commande et le module lunaire avaient de chacun un HGC. C'était le même matériel, mais adapté un petit peu. Dans les deux, on peut voir le clavier et l'écran qui est monté à côté de tous ces boutons et tous ces scripts. La responsabilité de l'HGC, c'est de mettre en place de vecteurs d'espace vers d'État la stabilité de calculer les poussés et de calculer le lancement. Pour comprendre comment cet ordinateur fait ça, on va regarder son architecture, le matériel, les différents périphériques, le software system et le software de mission, le logiciel de mission. L'architecture peut être décrite comme ça, on va parler du jeu d'instruction, des modèles arithmétiques, de l'encodage, des modèles de mémoire, des aillots, des compteurs et des instructions. Les instructions, c'est quelque chose qui varie énormément. La plupart des instructions, par exemple, dans 1.8, il y a quelques centaines d'instructions qui sont utilisées pour la performance. Sublex, c'est un langage à une seule instruction qui montre qu'une instruction peut suffire pour absolument tout faire. Avec plus d'instructions, on a du code prudence et de la meilleure performance. Les instructions des années 1960, généralement, il y avait que quelques instructions et c'est pour ça que, ici, sur ce graph, on peut voir le point ideal pour l'AGC. Peu d'instructions, mais elles étaient optimisées pour cette mission. On peut voir quelques instructions, des instructions pour charger et des instructions pour charger les stocks et les données, la rythmétique, de la logique, des instructions de branchement. La mémoire est constituée de 4916 cellules de mémoire indexées de 0 à FFF. Et chacune contient un mot 16 bits de 0 à 7 FFF. Il y a un registre, le registre A, qui est un accumulateur, qui est sur 16 bits et qui permet d'ajouter et multiplier des valeurs à des cellules en mémoire. Des valeurs qu'il y a en mémoire peuvent être soit à de la donnée, en quantité, ou alors ça peut être du code machine. On est dans une architecture devant Neumann. Il y a un registre capital PC qui contient l'adresse en mémoire à laquelle l'instruction vous a acceptée en suivant. L'instruction low permet de charger une donnée et l'instruction A permet d'ajouter une valeur qui était une autre à son mémoire et l'instruction de stockage permet de stocker le résultat dans le résultat à partir de ce registre d'admission. Voici sur ces cartes des instructions de référence rapide aux instructions. On peut voir ici sur cette carte il y a la syntaxe, il y a la description de ce que fait l'opération, son encodage, l'opération, combien de cycles dans l'âge ça prend et la syntaxe originale. Voici une petite table qui permet de représenter toutes ces instructions de façon plus simple. Regardons plus en détail les instructions. Voici l'instruction de chargement charge cette adresse dans A donc la plupart des instructions fonctionnent avec le régime d'accumulateur donc on va regarder. Quand on exécute cette instruction le CPU scanne la mémoire à l'adresse indiquée et stocke l'instruction dans l'enregistre. Store ça s'écrit comme load l'indirect de cette adresse dans A donc ça va à l'adresse indiquée 200 ici et ça y écrit ce qui était dans l'accumulateur. L'instruction déchange l'accumulateur avec la cellule en mémoire ad charge ce qu'il y a à l'adresse en mémoire il ajoute à ce qui est dans l'accumulateur et stocke le résultat dans l'accumulateur et subtracte ça prend ce qu'il y a à l'adresse en mémoire ça le soustrait à ce qu'il y a dans l'accumulateur et ça stocke le résultat dans l'accumulateur. Le résultat du soustraction peut être négatif alors comment est-ce qu'on exprime les nombres négatifs dans la GC les valeurs de 4 bits c'est moi au signifiant bit signifie le signe du nombre avec cet encodage ça marche mais les nombres négatifs doivent être traités spécialement les instructions sont plus simples grâce à ce système d'encodage mais on se retrouve avec 2 zéro avec cet autre encodage ici le complément à 2 il y a une seule façon d'enclouer dans l'SNS60 la plupart des calculs scientifiques étaient implémentaires avec le complément à 1 avec un nombre à 4 chiffres non signés on peut exprimer les nombres de 0 à 15 si il est signé on peut exprimer de 0 à 7 si le nombre est à 0 avec le complément à 2 on a une symétrie parfaite pour prendre le négatif d'un nombre c'est facile il suffit d'inverser un bit donc 0 devient moins 0 ou moins 0 devient 0 1 devient moins 1 etc l'addition fonctionne de la même façon dans le monde négatif et le monde positif par contre ça devient intéressant quand on a un 0 parce que 6 moins 4 c'est 6 plus moins 4 qui est égale à 6 plus 11 et donc là on a une retenue avec un complément à 1 la retenue doit être ajoutée au résultat final c'est à dire que 1 devient 2 donc c'est ce qu'on appelle la retenue à la fin autour si on n'a pas ça avec des overflow pendant les auditions non le cpu peut détecter les différents résultats invalides à cause de ces overflow et corriger donc si on a le code qui dit à l'adresse 7FF et ensuite ajoute 1 le résultat est 0 c'est un overflow et l'accumulateur est du coup flagué comme étant un overflow le store fait de travail supplémentaire il enlève cette condition de overflow il ajoute 1 et il saute l'instruction suivante ça permet au programme de détecter l'overflow et d'appliquer la retenue à un autre niveau et ensuite en stockant la valeur on a la valeur augmentée sur 2 mots au lieu d'un il y a une instruction un engagement spécial qui permet de charger une valeur alors ajouter 1 à une valeur en mémoire c'est une instruction tellement commune qu'une instruction dédiée à ça il n'y a pas d'instruction de décrémentation à la place on a des instructions pour augmenter et diminuer incrémente ajoute 1 augmente ajoute 1 à toutes les valeurs positives pour les calculs scientifiques le cpu a des instructions spécialisées l'instruction de multiplication en mémoire multiplie avec ce qu'il y a dans l'accumulateur et il ajoute un stock d'accumulateur quand on multiplie 2 à nombre signé on a une valeur qui peut dépasser la taille de l'accumulateur du coup on stock la valeur basse dans A et l'accumulateur on a une valeur qui peut dépasser la taille de l'accumulateur la valeur basse dans A et la valeur haute dans B et ça ça permet d'avoir des instructions c'est-à-dire des valeurs sur 30 bits et il y a une instruction spécialisée pour travailler là-dedans les bits hauts sont donc dans A les bits basse sont dans B si on a une valeur normalisée la combinaison de ces 2 nombres donne la valeur si on enlève le 0 de signé la division prend la combinaison de ces 2 de ces 2 registres et le divise par la valeur en mémoire et écrit les 2 résultats dans A et B de la même façon d'autres instructions permettent d'utiliser A et B comme un double mot l'aude A B permet de lire 2 mots en mémoire et de charger ces 2 mots respectivement dans A et B il n'y a pas d'instruction pour échanger un double mot mais de façon intéressante il y a une opération d'addition qui marche pour les double mots par contre il y a une instruction d'échange pour échanger depuis B ce qui est intéressant c'est qu'il y a un autre mode d'adressage ça permet de charger plus indirect de 70 plus indirect de 80 ça charge ce qu'il y a à l'adresse 80 ça l'ajoute à 700 ça donne une adresse 702 ici et ça lit depuis 7 adresses et ça charge aussi à A ce qui est intéressant c'est que ça permet d'utiliser 700 comme un tableau, un array, un vecteur et l'adresse qui est à 80 ici comme un index dans ce tableau et ça c'est un résultat qui est ici ici ici on a donc un rayon de ça avec chargé dans A de double indirect 80 ça va charger ce qu'il y a à l'adresse 80 l'ajoute à 0 ça donne le résultat ici et ça lit de cette adresse et le charge dans A ici ça permet d'utiliser ce qu'il y a à l'adresse 80 comme un pointeur puisque c'est une adresse lui depuis le début de la mémoire par défaut les instructions sont exécutées de façon séquentielle le compteur PC, le programme compteur est incrementé à chaque instruction mais certaines instructions comme jump et des jumps conditionnels permettent de modifier ça quand le programme compte l'instruction jump il charge cette adresse dans le programme compteur le PC et continue l'exécution à cette heure-là l'instruction JZ saute si la valeur dans A est 0 de même l'instruction GL saute uniquement si la valeur est négatif ou 0 cela permet d'exécuter des choses comme par exemple sauter si la valeur soit positive positive nulle, négative ou négative nulle si la valeur est négative vous savez que vous pouvez sauter les deux prochaines instructions l'instruction CCS permet aussi de sauter à une valeur en fonction de ce qui est dans A ça permet par exemple de faire des boucles qui comptent en disant A comme un compteur l'instruction call c'est un fonction comme jump mais sauve l'origine à un endroit en mémoire d'abord il stocke l'adresse dans un registre LR et ensuite continue l'exécution à l'adresse indiquée à la fin de cette routine l'instruction RET on va le stocker dans LR et la copie dans PC et permettre de récupérer l'exécution à l'adresse précédente alors dans certains cas pour les fonctions si elles peuvent être appelées sur plusieurs niveaux il faut parfois stocker l'ancienne valeur dans LR ce code permet de faire ça on a vu plusieurs des registres A est utilisé pour beaucoup de choses B est utilisé pour les calculs à double longueur PC garde point d'instruction LR stock l'ancien point d'instruction le registre 0 est un peu spécial il contient toujours 0 quand on lit depuis ça et ça donne 0 ces 3 autres registres on en parlera plus tard une chose qui est intéressant c'est que ces 3 registres ont des adresses en mémoire qui leur sont assignées c'est à dire que les 8 premières adresses en mémoire correspondent à ces registres ça permet beaucoup plus de flexibilité dans le jeu d'instruction ça permet de lire depuis B vers A en lisant depuis B vers l'adresse 1 du même lire depuis A à l'adresse 0 ça permet de lire lire un 0 dans A il suffit de lire à l'adresse 0 pour incrementer A on peut incrementer l'adresse 0 etc regardons la mémoire plus en détail la mémoire contient des mots de 0000 à FFF c'est de la la RAM mémoire accélératoire au début suivi de ROM mémoire morte la GC a été conçue pour avoir uniquement ces quantités de RAM et de ROM mais il y a un peu plus de tags là-dedans si on regarde à la RAM il y a une partie de la RAM dans laquelle on peut avoir 8 différentes banques de mémoire un des registres EB contient le numéro d'une de ces banques si il contient 5, la banque 5 est utilisée si il contient 0, la banque 0 est utilisée les adresses dans cette zone représentent toujours les mêmes zones en mémoire ce qui signifie qu'il y a 8 x 256 kilomètre de RAM qui peut être utilisé à cet endroit-là la ROM est similaire sauf que c'est le premier kilomo qui est utilisé avec le registre il y a en plus un autre registre avec des super banques qui permettent de changer certaines des banques depuis un autre jeu la partie haute de la ROM pointe toujours c'est le même adresse pour la partie basse de la ROM alors la ROM fixée contient généralement les parties fixes de la réplaisation l'essentiel de ce qui est dans les parties mobiles ce sera l'applicatif pour la mission pour changer la partie qui sont en RAM il faut simplement changer le registre EB si on écrit dedans on peut changer on peut charger depuis A vers EB si A est 5 ça mettra la banque 5 disponible en mémoire la même instruction peut être utilisée pour écrire dans FB mais ça ne marcherait pas dans tous les cas parce que si on a du code dans une banque qui appelle du code dans une autre banque et qu'on appelle la mauvaise banque en écrivant le code dans FB ça changera le code à une autre banque et la GCS sera incapable d'exécuter ce code ici quand il est exécuté ça exécuterait du code qui n'aurait rien à voir avec ce qu'il y avait avant du coup il faut une façon de changer FB et PC de façon atomique pour ça il y a une fonction qui fonctionne un peu comme on a vu avant la instruction call F fonctionne en le chargeant deux mots dans A et B et ensuite call F échange A et B avec FB et PC une autre instruction similaire existe pour les retourlons rate F qui échange aussi FB et PC avec A et B donc dans ces dans ces deux registres il y a des bits qui correspondent à un autre registre B et B la raison d'être de ce registre c'est de pouvoir faire des échanges du double mot avec le programme compteur et la banque les appels long doivent passer le contrôle à une autre banque et les retourlons doivent prendre le contrôle à la banque précédente le fait d'avoir mis ces registres côte à côte était pour permettre de faire des échanges atomiques comme on a pu le voir entre A et B et FB et PC il y a encore d'autres registres derrière et d'autres registres qui remplacent les instructions qu'on aurait de décalage et de shift de bits quand on écrit une valeur dans ROR on peut la relire et les décaler d'un bit de même façon mais fait d'orientation à gauche SSR fait un décalage à droite et SSR7 SSR7 fait un décalage de 7 ça s'est utilisé beaucoup dans les systèmes internes du compute de l'ordinateur on a vu que le CPU est connecté à la RAM et à divers périphériques c'est connecté via un bus DIO et il y a du coup un deuxième espace-adressage pour parler au périphérique chaque canal est fait de 15 bits et on peut utiliser des instructions pour lire et écrire des mots sur le canal DIO certaines adresses contiennent des bits de contrôle par exemple l'instruction OUTOR permet d'écrire des bits et de mettre des bits à zéro donc il y a des opérations binaire et ou ou inclusifs pour utiliser ces choses-là les canaux 1 et 2 sont des alias du registre B et du registre d'un autre registre LR on a donc ces registres des registres de longs des registres de décalage et encore une autre section là on a des registres qui ne sont pas contrôlés par les timers hardware quand le timer s'incrémente ces autres registres se décrémentent à chaque impulsion à côté du registre PC il y a qui dit où est la prochaine instruction quand il y a une interruption PC est stocké dans un autre registre virtuel PC Prime et hier dans IR Prime quand le gestion d'interruption termine son exécution l'instruction IR permet de copier PC Prime dans IR pour retourner à l'exécution actuelle PC hier sont observations sauvegardées lors de l'instruction les autres registres doivent être sauvegardés par le code si nécessaire alors s'il y a un overflow comme ces registres ne peuvent pas être sauvegardés de façon sûre on évite les interruptions pendant cette exécution les interruptions sont assez courtes typiquement on sauvegarde l'interruption aébé on charge des nouveaux aébés et ensuite on appelle l'interruption 0 c'est le point d'entrée lors d'un reset on peut recevoir des interruptions par le matériel il y a aussi des instructions pour causer des instructions en software il y a des instructions qui permettent de lire le registre du watchdog ce registre doit être régulièrement lu ou écrit il faut de quoi le système se réinitialise parce qu'il pensait à 3 fautes regardons à comment marche l'encodage d'instruction l'opcode est dans les 3 habites les plus hauts et le reste est constitué à des intérêts ça permet de faire 8 instructions mais il n'y a plus de instructions et les intérêts sont rables les intérêts sont rables ça commence par tout sauf 00 donc les instructions qui n'ont du sens que pour de la RAM ont besoin de connaître 12 bits et 15 ça permet de remplir 3 autres instructions la même chose est vrai pour les instructions qui n'utilisent que la RAM ça se permet d'ajouter d'autres instructions et comme les jumps n'ont pas besoin non plus on peut ajouter également les instructions CLL et CLI il y a une autre instruction call spécial qui s'appelle call ER qui est un type de retour puisque le retour c'est un effet de bord d'appeler un call de ce qui se retrouve en LR et donc du coup l'instruction de retour peut être traduite en call indirect 2 qui permet de call à l'adresse sauvegardée dans ER l'instruction de chargement se base à besoin de 2 valeurs en code sur 2 instructions la première en code la base et le deuxième en index donc dans ce classique le CPU est lié à l'adresse et ajoute la valeur au code d'instruction de la prochaine de la prochaine instruction et écrit le résultat dans ER comme prochaine instruction et ça c'est un load de l'instruction suivante si une interruption se produit à ce moment-là c'est pas un problème puisque ER sauve l'instruction effective dans ER Prime alors c'est amusant il y a quand même une adresse qui a une civilisation spéciale voilà si on regarde le jeu d'instruction de façon globale, il y a beaucoup de particularité le fait que je disais à complément 1 ou 2 d'avoir des overlooks, des activités, des interruptions ça c'est très bizarre l'instruction store qui dans certains cas peut passer par-dessus un mot l'instruction CCS qui peut lire plusieurs mots et qui peut être quand même en dangereuse scientisme de façon incorrect il y a pas d'instruction pour shift et rotate en mémoire, pour les décalages mais du coup à le place il y a des registres la plupart de la logique bouleaine est faite à partir d'instruction notre sortie l'index est fait en ajoutant des valeurs dans ER et surtout il n'y a pas du tout de concept de stack voilà ça c'était l'architecture, l'ordinateur de guidage d'Apollo parlons maintenant du hardware le hardware fonctionne avec un particulier, utilise deux types de mémoire on va regarder le diagramme de bloc de comment impliquer le microcode et ensuite on va regarder un petit peu les schémas de comment implementer le contrôleur et la mémoire donc voici le schéma global de quand on marche l'HEC vous pouvez voir qu'il y a en pointillé, c'est un seul fil ça bouge un seul bit en très plein, c'est 15 fils qui bouge 15 bits c'est les registres centraux des unités centrales ça c'est la l'unité arithmétique qui permet d'ajouter les sous-strates des nombres la partie mémoire s'occupe de la RAM et de la ROM le processur qui tourne à peu près 1 MHz, l'horloge que tu apprends est donné au générateur de séquences les instructions utilisent généralement autant de cycles en mémoire qu'ils n'ont besoin de faire l'accès à la mémoire et le générateur de séquences et lui décident à chaque étape quand une instruction sera exécutée et distribue les instructions aux autres unités ça c'est connecté au bus à droite le contrôleur de mémoire la mémoire est aussi connectée au bus à droite c'est comme ça qu'on peut lire et écrire des adresses au contrôleur de mémoire et la mémoire donnera les données en retour de ça cette instruction permet d'envoyer un buffer de mémoire sur le bus et de déclencher une opération d'écriture et ici la donnée est mise sur le bus et est relue par le contrôleur cette instruction généralement lisse qui est en rhum et le met dans le contrôleur de mémoire et la deuxième partie peut l'écrire du coup dans la rame donc ici on peut voir une version en plus de code de instruction qui est plus facile à lire on peut voir ici qu'il charge A on peut voir ici un autre exemple il charge dans son registre puis il charge l'autre registre dans son intervier et ensuite écrit les résultats dans les deux registres le microcode est très complexe on peut voir qu'il y a d'autres choses encore plus compliquées par exemple on peut voir ici que les compteurs basés sur le temps sont gérés par une connexion spéciale depuis Leo vers les compteurs chaque compteur a son propre comportement certains font des décalages certains interagissent de façon spéciale avec le hardware les schémas complets sont disponibles publiquement il y a des data sheets disponibles l'implémentation complète utilise un unique type de porte logique il y a à peu près une centaine de ces compteurs intégrés dans le module logique il y a 24 modules logiques plus quelques interfaces et modules d'alimentation qui sont connectés ensemble dans le deuxième plateau il y a divers banques de mémoire la RAM c'est des corps magnétiques et il y a un système spécial pour s'assurer qu'on relie chaque valeur après l'avoir écrit on utilise pas mal de RAM il faut savoir que tous les fils qui servent à faire la RAM ont été tissés à la main ça donne un ordinateur qui est globalement plutôt compact on peut voir des photos ici on peut voir des schémas mais c'est accessible par le côté ce qui permet de charger des programmes dedans et ça c'était simplement la partie hardware parlons des périphériques qu'on connecte à cet ordinateur on va voir quelques périphériques qui sont connectés certains sont assez spécialisés qu'on ne le verrait dans aucun ordinateur et d'autres qui sont utilisés pour la connexion avec les astronautes et les machines controllers un d'entre eux c'est le gyroscope qui était construit à l'origine pour d'autres missions et qui permet d'écrire directement dans certains registres qui sont spécialisés pour le gyroscope en utilisant le gyroscope le vaisseau peut connaître son attitude sa direction l'accélé remettre permet de connaître l'accélération et écrit aussi dans des registres spécialisés les optiques dans le module de commande permettent de mesurer la distance relative entre les différentes parties du vaisseau quelques compteurs qui permettent de diriger les optiques et des résultats sont lus dans d'autres agistes qui permettent de diffuser d'envoyer l'information aux astronautes le radar d'atterrissage fonctionne de façon similaire le radar de rendez-vous de module lunaire également après avoir configuré les angles les astronautes peuvent avoir des informations sur la position le radar de rendez-vous peut créer des interruptions pour mettre à jour les informations plus rapidement les RCS qui permettent de se diriger dans l'espace sont contrôlés par des registres spécialisés il y a un bit, si on le met à un le jet s'allume il y a donc pour contrôler ça un timer dédié qui permet d'arrêter le RCS après l'attendonnée le module Disky permet de contrôler le clavier il y a 19 touches 15 LED et le display l'écran est géré par le canal out-of il y a un système de communication entre la mission de contrôle et les astronautes les mots de données arrivant de mission de contrôle arrivent dans les registres données et les mots envoyés sont dans un autre registre il y a des interruptions qui sont déclenchés quand il est possible de charger le prochain mot puisque le mot précédent était envoyé au mission de contrôle parlons maintenant du système de présentation c'est un système basé sur les priorités coopératives mais aussi préemptifs avec de la tolérance de panne on va parler du multantage de l'interprète des pilotes de la file d'attente, du shell et de la tolérance de panne le GC a plusieurs systèmes pour faire des calculs et des entrées sorties ça peut générer des actes réponses de service ça permet aussi de faire des opérations standardes comme mettre à jour l'écran et des opérations qui sont en réel par exemple pour allumer les propulseurs exactement au moins la plupart des piloteurs de multantage coopératif à une opération on va travailler pour un temps assez long mais si il y a une notion de priorité ça vaut le coup de prendre le temps de rendre la main régulièrement pour vérifier s'il n'y a pas quelque chose de plus prioritaire qui voudrait faire ça sur le GC chaque job doit vérifier au moins toutes les 20 ms s'il n'y a pas un autre job qui n'a pas plus besoin que lui ça c'est sa modèle de multantage coopératif job entry est une banque qui contient le PC, le BB et la priorité des différents jobs qui sont en cours d'exécution en général le set central a 7 de ses banques de 0 à 6 et si un job de plus de priorité a besoin de travailler la séparation d'échange on va échanger ces deux jobs on peut mettre un job en sommeil en rendant sa priorité négative si on l'inverse à nouveau elle devient positive et ce job récupère la main la partie d'exécution a des fonctions qui peuvent ajouter des structures de données pour par exemple créer un nouveau job à partir d'un PC d'un BB qu'on lui donne on peut changer la priorité on peut endormir un job ou le réveiller et on peut interrompre et terminer le job courant il n'est pas une instruction pour rendre le contrôle mais c'est une subroutine on appelle une fonction si il y a un job de plus de priorité ça appelle la fonction change job mais new job n'est pas juste une variable en noir c'est aussi le wash job c'est ça qui permet de s'assurer c'est pour ça qu'il faut regarder ce registre toutes les 20 minutes le système fait énormément de calcul scientifique calculer juste la somme de vecteurs c'est quelque chose qui va prendre des centaines d'instructions pour le faire il y a des librairies de software qui peuvent faire ça en simple double et triple longueur il y a des registres qui peuvent tenir des registres qui peuvent contenir des registres d'une certaine taille des vecteurs d'une certaine taille et du coup on peut implémenter des opérations grâce à certaines fonctions dont les librairies et pour cela une stack est fournie puisqu'il y a des fonctions à appeler donc les entrées dans le corset dont on a parlé on rajoute des informations avec ou sans vague donc un job peut être créé avec ou sans vague qui contient la stack dans ce code d'exemple on utilisera probablement une stack beaucoup de fonctions passent des pointeurs mais les concepteurs de système ont décidé d'utiliser un langage qui rend ça plus simple plus que passer des pointeurs on peut passer des représentations symboliques d'offsets dans la stack l'encodage permet d'encoder beaucoup plus de code mais ça explique pourquoi on n'utilise pas des instructions mais de la mémoire pour les opérations de shift comme les adresses sont sur 14-8 on ne peut pas adresser toute la mémoire en même temps on doit savoir si on parle de la partie haute ou basse de la RAM voici le set d'instruction complète ça permet de mélanger les instructions scientifiques ou les instructions standard dans la même chose et on peut passer avec cette instruction du mode interprète ou mode standard quand un périphérique a besoin d'avoir l'attention de l'ordinateur il peut causer directement une interruption matérielle ça s'interrompt l'exécution du code et l'interruption va être gérée le plus vite possible s'il y a plus de travail ou travail plus long à faire il peut créer un job avec l'instruction novac pour être exécuté plus tard il y a un timer qui cause des interruptions intervalles régulières et ça s'est utilisé parce que par exemple l'écran ne peut être mis à jour que quelques chiffres à la fois donc en utilisant ce timer on peut prévoir de mettre à jour certaines parties dans le prochain update Certains périphériques doivent être pilotés à un temps exact par exemple quelque chose qui doit allumer la lampe deux fois l'allumera maintenant puis programmera 3 jobs pour des temps futurs le premier l'éteindra puis le deuxième le rallumera le troisième l'éteindra à nouveau ça permet de faire que le bouton deux fois qui permet de stocker les jobs à faire à un temps donné et ça s'est utilisé avec LST2 qui lui contient les paires de PC et BB pour les tasks à faire à un temps donné le timer qui contient la liste d'attente a une notion de priorité les timers, différents timers s'exécutent à des fréquences différentes mais en décalés ça se permet d'exécuter des choses à des moments décalés mais ça s'est perturbé par les interruptions les interruptions peuvent causer certaines interruptions par le timer à se retrouver et être exécuté un peu plus tard le système n'offre aucune garantie que les timers s'exécutent à des moments très précis le software doit compenser pour ça le programme Pinball c'est le shell de l'AGC le shell utilisateur c'est ce qui décide de ce qu'il doit être l'écran et c'est ce qui récupère les boutons les pressions des boutons par les astronautes quand un bouton est pressé le Pinball peut générer un job pour exécuter ça et exécuter d'autres jobs quand ce job est terminé le shell doit être capable de communiquer les défauts et aussi de pouvoir les corriger il y a une façon, il y a un moyen si on appelle la fonction alarm il faut allumer le bouton alarm le software de l'AGC est plein de self-check et de vérification qui ont pu permettre de détecter beaucoup de problèmes pendant le développement et qui servent aussi à exposer si il y a des problèmes aux astronautes la plupart de ces problèmes vous peuvent causer un recette complet de l'ordinateur mais il est possible en software de faire une récupération plus douce donc c'est un problème si un code s'exécute et qu'un abort se produit pendant ce temps-là une routine de récupération est exécutée cette routine peut annuler le job ou corriger certaines conditions donc dans la table des fonctions de récupération chaque phase est associée à une routine pendant l'exécution normale et plusieurs tâches qui vont être programmées si un abort se produit le corset est effacé dans les informations qui viennent de la recovery table vont être mis dans la corset et on exécutera ce code-là en général, ce qu'on fait ici c'est qu'on va tout simplement exécuter du code de recette complet plutôt que d'essayer de réparer on remette tout à zéro heure et ça c'était le software alors, on a vu un petit peu les périphériques, le hardware, le software et parlons maintenant du software utilisé dans la mission donc il y a l'interface le commande du lancement de latitude l'autopilote les calculs de la puissance du vol pour ce qui est sur la lune il y avait les calculs d'atterrissage pardon, de rendez-vous de réentrer et aussi tout ce qui est en cas de problème commençons par l'interfacilisateur puisqu'on a un nombre de boutons limités on doit encoder les instructions avec un système on peut pas écrire juste display memory on doit pouvoir écrire un code pour display comme 01 et ensuite un code pour memory 02 l'ordinateur, lui, se met à clignoter et vous dit qu'il attend une entrée on peut entrer 25 par exemple pour donner une adresse en mémoire et ça, ça va nous donner le résultat en octal de ce qu'il y avait à cet adresse-là de même, l'ordinateur peut lui proactivement demander une information par exemple ici, il peut demander les informations sur le moment d'allumage pareil, on peut avoir des questions pour demander oui ou non par exemple, confirmer l'allumage des moteurs et une référence complète de toutes ces questions oui ou non et elles sont différentes selon les phases de la mission donc, là, on décolle et on est parti l'ordinateur a un mode de surveillance à partir du moment où on coupe le contact il commence la mission si jamais ça ne marche pas il y a un job qui est prêt à lancer ça quand même et les astronautes ne peuvent pas aussi leur entrer manuellement avec l'instruction pendant la suite du vol l'ordinateur est en mode monitoring passif du vol dans ce cas il donne les informations en permanence de l'altitude et de l'altitude du vaisseau le point décimal est implicit tout le système fonctionnait en métriques en interne, mais pour les astronautes américains tout était quand même affiché en unité impérial en pied etc en cas de problème l'ordinateur peut prendre le contrôle complet du vol il faut aussi le relâcher les astronautes peuvent prendre le contrôle également les astronautes peuvent même se diriger complètement manuellement, jusqu'en orbite en cas de besoin en moins de 12 minutes on s'est débarrassé du premier et deuxième étage et ça nous a mis en orbite à 155 km ce qui fait un tour de la terre toutes les 88 minutes comment savoir qu'on est sur la bonne orbite et bien l'ordinateur et aussi bien sur le mission control surveille que l'orbit est correct puisqu'avant de pouvoir savoir où aller il faut savoir où on est donc il y a des registres qui maintiennent notre position en 3 dimensions ça s'est fait à partir d'un télescope et d'un sextant spatial c'est très similaire à un sextant nautique à l'ancienne sauf que ça utilise il n'y a pas vraiment d'horizon donc à la place on se base sur des étoiles en orbite il y en a plein donc on peut en choisir plusieurs le manuel en liste 35 et ça ça permet de pointer dans leur direction et du coup de déduire la direction du vaisseau ce qu'on appelait l'LOS Landmark Line of Sight qui était d'avoir en vue certaines étoiles avec le télescope les astronautes peuvent chercher les étoiles qui sont sur leur guide et ensuite pointer le sextant dans la bonne direction en faisant ça plusieurs fois on peut obtenir la direction en 3 dimensions les matériaux optiques les optiques pour vérifier les alignements pendant les rendez-vous sont très simplistes et nécessitent un alignement à chaque opération tant qu'on est en orbite c'est plutôt facile on peut juste regarder vers où on va et ça nous permet de savoir notre vitesse et notre direction mais une fois qu'on quitte l'orbite à cause de tous ces calculs plus compliqués il faut faire en orbite il y a des modèles mathématiques qui nous permettent de résoudre ça ces modèles sont expliqués à gauche à gauche on assume que les corps spatiaux sont parfaitement ronds et cet autre modèle à droite de NK lui est plus complexe mais prend en compte que les planètes ne sont pas parfaitement circulaires donc ça c'est assez compliqué il y a également un lien radio qui est utilisé notamment pour envoyer les informations de position et d'attitude à mission control non pardon, uniquement de position l'attitude ne peut être déterminée qu'à partir du vaisseau en tout cas avec précision qu'à partir du vaisseau grâce au gyroscope et c'est pour ça que le vaisseau fait ça il y a donc 3 gyroscopes dans le vaisseau qui sont utilisés par le l'autopilot qui permet de déterminer l'attitude du vaisseau le plus gros programme dans cet ordinateur c'est l'autopilot le pilote automatique il tourne à la fois sur le module le commande et sur le module lunaire il est capable de travailler dans plusieurs modes de vol il n'y a pas de friction dans l'espace peut-être qu'on commence à tourner on continuera à tourner pour toujours donc l'ordinateur utilise des jets de RCS pour contrôler la rotation sous les différents axes les autopilotes à la fois dans le module lunaire et le commande sont capables de suivre une direction qui a été pré-programmée il y a divers algorithmes pour calculer le sens de gravité qui sont dynamiques puisque les choses peuvent changer à faire en mesure que le vaisseau avance l'ordinateur est capable de calculer le vecteur de transfert le plus efficace pour rejoindre l'orbitre lunaire il est capable aussi de contrôler la température de contrôler le point de délissage il ne contrôle pas seulement l'attitude mais il contrôle également la puissance la puissance de l'automobile après la confirmation l'ordinateur s'occupe d'éclencher les moteurs pendant la durée pré-programmée si le fait est manuellement les vecteurs pré-calculés sont plus correctes mais l'ordinateur peut compenser en recalculant tous ses vecteurs lui-même maintenant qu'on sait comment contrôler le vaisseau il est temps d'aller sur la lune donc l'injection se fait généralement pendant la 2e orbite autour de la Terre c'est fait par le 2e étage de la phase étature 5 l'ordinateur de guidage lui n'a qu'un rôle de supervision une fois que c'est fait on se retrouve vers la lune passons directement à la lunissage après la séparation du module de commande et du module de la lunissage le lunissage ralenti il utilise des radars et il utilise des radars une des principales tâches de l'autopilot dans ce cas-là c'est d'être capable de gérer le désengagement de ça pour ne pas l'unir en cas d'urgence la descente motorisée permet d'atterrir en utilisant les propulseurs pour se ralentir l'ordinateur de bord doit calculer le vecteur de direction pour pouvoir allunir à la bonne vitesse c'est complètement automatique le module s'oriente grâce à ses moteurs de descente le 2e programme se déclenche automatiquement à environ 8000 pieds quand les astronautes peuvent voir le voir le sol, ils peuvent décider si c'est un bon droit pour allunir ou non ce module garde le module à une attitude stable autour du vol autour de la surface jusqu'à un ordre d'attirir à un endroit donné après l'unissage l'équivage lance manuellement un programme qui confirme que le vaisseau a bien alluni qui met le qui met le le pied automatique dans un mode très passif il tente de corriger les choses pendant que la lune tourne on est sur la lune on fait les trucs qu'on fait sur la lune en collègue des cailloux etc et repartons sur la partie intéressante qui est le redécollage et le rendez-vous la technique de rendez-vous a été faite pendant le projet Gmini9 où on a pris à faire des rendez-vous entre deux vaisseaux en orbite autour de la Terre ça s'insuit des principes qu'à l'époque on commençait à maîtriser pas trop mal il y a deux façons de faire des rendez-vous la façon coélyptique qui est plus conservative on fait des orbites qui se rapprochent pour tout à petit il y a une version plus risquée qui est direct, qui est que dès le décollage on vise le module de rendez-vous et ça c'est quelque chocolatisé à partir d'Apollo 14 c'est plus risqué mais ça permet de prendre beaucoup moins de temps avant le rendez-vous la préparation on devait commencer deux heures avant le décollage il fallait surveiller visuellement l'orbite du module de commande il y avait des outils de suivi qui étaient développés pour ça avant le décollage il fallait programmer l'ordinateur avec les données nécessaires pour savoir quand et comment décoller l'ordinateur demande si lui ou non on doit partir et on décolle l'ascension dure environ 7000 et demi mais selon la méthode de rendez-vous ça peut prendre entre 1h30 et 3h30 avant d'arriver au point de rendez-vous le système de guidage a utilisé plusieurs périphériques pour s'aligner et se rapprocher pendant le rendez-vous ça permet de calculer les manœuvres de rendez-vous et la course à suivre dans le module de commande le pilote suit manuellement la course du module d'alignissage et est prêt à prendre en main le rendez-vous manuellement si quelque chose se passe mal les ordinateurs cherchent à aligner les vaisseaux et à ce moment-là un nouveau programme le programme source en 19 ralentit le module de commande jusqu'à ce que les vaisseaux se doquent un des deux vaisseaux doit éteindre son programme de correction pour éviter que les deux se compensent mutuellement ok, c'est pas trop mal maintenant on est en ambitoise de la Lune on relance le programme de transfert on lui donne des informations pour entrer sur la Terre et ça, ça lance une propulsion qui permet de renvoyer par la Terre enfin qu'on arrive en ambitoise de la Terre on fait les calculs pour savoir comment re-rentrer le premier programme de re-rentrer commence 20 minutes et quelques avant la re-rentrée et commence à ralentir le module et au moment de la re-rentrée après le programme 61 on lance le programme 62 qui lui demande diverses informations aux astronautes notamment une checklist pour s'assurer qu'on peut entrer après que la checklist soit lancée on lance le programme 63 qui est le début de la re-rentrée vraiment la l'autopilot prend en main les boosters pour ralentir le vaisseau et parce que le programme 64 la re-rentrée à proprement parlé le programme 64 surveille la mémoire et détermine les meilleures courbes de propulsion et le programme 65 a pour rôle de faire surfer le module de commande sur l'atmosphère pour limiter la friction lors de la re-rentrée la balance entre les deux est gérée par le programme 64 le programme 67 c'est le dernier à un essuie qui s'occupe de l'atterrissage les parachutes ne sont pas déclenchés par l'AJC mais par un autre ordinateur à bord le LSE et voilà nous avons eu une mission tout à fait dominale qu'est-ce qui pourrait mal se passer commençant par un Apollo 11 normalement les programmes qui font la propulsion pendant la descente utilisent des informations qui viennent du radar mais dû à un défaut d'alimentation trop d'informations sont arrivées du radar et ça ça fait fonctionner les propulseurs à seulement 50% de la puissance ce qui les aurait dû fonctionner et ça a conduit ça a conduit le ordinateur à détecter qu'il y avait un problème et à arrêter le programme très peu de temps après le démarrage ensuite Apollo 13 il y a eu une explosion dans le tank oxygène une bonne distance de la Terre mais ils étaient sur une trajetoire de retour gratuit donc il fallait quand même économiser l'énergie pour pouvoir arriver jusqu'à la Terre ils ont dû éteindre un des ordinateurs ils ont dû reconfigurer l'ordinateur du module lunaire avec les informations du module de commande tout en inversant certaines informations puisque l'ordinateur était monté à l'envers puisque les modules étaient face à face ils ont rallumé l'ordinateur du module de commande juste avant la rentrée et enfin Apollo 14 qui il y avait un problème parce que quelqu'un avait appuyé sur le bouton d'abord le bouton d'abandon et ça a été résolu en reprogrammant l'ordinateur pour que ce bouton déclenche un autre programme et voilà qui conclut cette bref revue de l'ordinateur de guidance d'Apollo alors vous vous êtes peut-être en vie de faire tourner votre propre programme sur un AGC donc vous avez besoin de savoir où vous trouvez un il y en a 42 qui ont été construits 7 se sont écrasés sur la lune 3 ont brûlé d'altemospheres 11 des modules de commande sont revenus retaire et 21 n'ont jamais volé et on sait pas vraiment où ils sont allés en voici un qui est dans le musée d'histoires d'ondateurs en Tavio, en Californie mais vous pouvez voir différents simulateurs et un toolchain de compilation vous pouvez voir que toute la doc qui tient dans une simple valise de taille moyenne est disponible sur github c'était beaucoup de travail de monter cette présentation on voudra remercier tous les gens qui nous ont aidés à faire ça, tous les contributeurs indirects ceux qui ont écrit des livres, les documentations merci beaucoup à vous merci pour votre attention merci merci, vous avez des questions sur le stream vous pouvez les poser sur IRC en anglais ou en allemand c'était une présentation avec beaucoup d'audience et beaucoup de contenu merci beaucoup à nos présentateurs, merci Christian merci Michael pour cette surcharge d'information applaudissez les chaleureusement merci les suffisamment et malheureusement on n'aura pas de temps pour les questions eh bien ceci conclut à