Der Apollo Guidance Computer (AGC) war der bei den Apollo-Raumflügen eingesetzte Computer für die Navigation. Er wurde benutzt, um in Echtzeit Fluginformationen zu sammeln und zur Verfügung zu stellen, sowie alle Navigationsfunktionen des Apollo-Raumfahrzeugs automatisch zu steuern. Er war damit das erste erkennbar moderne eingebettete System.
Er wurde ab 1961 für das Apollo-Programm unter der Leitung von Charles Stark Draper am MIT Instrumentation Laboratory entwickelt. Die bei den Flügen benutzte Hardware wurde von Raytheon hergestellt.
Bei jedem Mondflug – abgesehen von Apollo 8, die kein Lunar Module (LM) mitführte – wurden jeweils zwei AGC eingesetzt. Einer befand sich im Kommandomodul (CM) des Apollo-Raumfahrzeugs und ein weiterer in der Mondlandefähre. Beide Systeme waren baugleich, aber mit unterschiedlicher Software ausgestattet; die Navigationsdaten waren zwischen den Geräten kompatibel. Der AGC war Bestandteil des sogenannten Primary Guidance, Navigation and Control System (PGNCS, ausgesprochen: pings), dem unabhängigen inertialen Navigationssystem der Apollo-Raumfahrzeuge.
Darüber hinaus wurden bei den Mondmissionen zwei weitere Computer eingesetzt:
Der AGC bildete 1972 die Basis für ein experimentelles Fly-by-wire-System, welches in einer Vought F-8 „Crusader“ installiert wurde, um die Machbarkeit und die Vorzüge eines rechnergestützten Fly-by-wire-Systems zu demonstrieren. Dabei wurde der AGC nur in der ersten Phase dieses Projekts eingesetzt, und in einer zweiten Phase durch einen anderen Rechner ersetzt. Die hierauf folgende Forschung führte zum Fly-by-wire-System des Space Shuttle und indirekt zu den Fly-by-wire-Systemen moderner Luftfahrzeuge.
Der Apollo-Flugcomputer war der erste, bei dem integrierte Schaltkreise (IC) eingesetzt wurden. Die bis 1966 benutzte Block-I-Version des AGC war aus 4100 ICs aufgebaut. Jedes dieser ICs beinhaltete ein einzelnes NOR-Gatter mit drei Eingängen. Bei der ab Apollo 7 eingesetzten Block-II-Version des AGC waren jeweils zwei NOR-Gatter mit drei Eingängen in einem IC mit Flat-Pack-Gehäuse untergebracht. Es wurden hier annähernd 5600 Gatter benutzt. Die in Widerstands-Transistor-Logik aufgebauten Gatter wurden von Fairchild Semiconductor hergestellt. Die Verdrahtung der ICs war mittels Wickelverbindung aufgebaut und in Epoxidharz eingegossen. Der Prozessor arbeitete intern mit 16-Bit-Datenworten (14 Bit Daten, 1 Überlaufbit und 1 Vorzeichenbit (Einerkomplement)). Bei der Verwendung als Programmbefehl waren 3 bit für den Opcode und 12 Bit für die Adresse reserviert.
Der Schreib-Lese-Speicher (RAM) des AGC war als Ringkernspeicher und der Festwertspeicher (ROM) als Core Rope Memory aufgebaut. Der RAM-Bereich konnte von den Astronauten, falls erforderlich, manuell beliebig manipuliert werden.
Die Block-I-Version des AGC verfügte über ein RAM mit einer Kapazität von 1 Ki (1024) Datenworten (die Bezeichnung „Byte“ war noch wenig gebräuchlich) und ein ROM mit einer Kapazität von 12 Ki Datenworten, die später auf 24 Ki erweitert wurde. Die Block-II-Version des AGC verfügte über ein RAM mit einer Kapazität von 2 Ki Datenworten und ein ROM mit einer Kapazität von 32 Ki Datenworten.[1]
Beide Speicher hatten eine Taktzeit von 12 μs. Die Datenworte hatten eine Länge von 16 Bit (15 Bit Daten und 1 Paritätsbit (ungerade Parität)).[1]
Als Taktgeber wurde beim AGC ein Schwingquarz mit einer Taktfrequenz von 2,048 MHz (2048 kHz) benutzt. Dieses Taktsignal wurde durch 2 dividiert, um ein Taktsignal mit einer Taktfrequenz von 1,024 MHz zu erzeugen. Mit diesem Takt wurden die internen Operationen des AGC abgearbeitet. Das 1,024 MHz-Taktsignal wurde wiederum durch 2 dividiert, um ein zweites Taktsignal mit einer Taktfrequenz von 0,512 MHz (512 kHz) zu erzeugen. Dieser MASTER FREQUENCY genannte Takt diente zur Synchronisation der externen Systeme des Apollo-Raumfahrzeugs.
Nachdem die Entwicklung von Software für den AGC ursprünglich in Plan und Budget des Apollo-Programms nicht vorgesehen war, arbeiteten schließlich über 300 Personen daran. Zu den bekannteren gehört heute die Teamleiterin des Flug- und Navigationsprogramms, Margaret Hamilton. Erstmals wurde der Begriff des Software-Engineering etabliert sowie zahlreiche grundlegende Paradigmen desselben. Insbesondere das Prioritätsscheduling erwies sich als entscheidend für den Erfolg der ersten Mondlandung von Apollo 11.
Die Software des AGC war in Assemblersprache geschrieben. Ein EXEX genanntes Echtzeitbetriebssystem konnte bis zu sieben Prozesse nach Priorität gewichtet in einem nichtpräemptiven Multitasking-Verfahren bearbeiten. Jeder Prozess musste dabei periodisch die Kontrolle an EXEX zurückgeben. Ein achter Prozess mit diagnostischen Aufgaben wurde mit niedrigster Priorität ständig ausgeführt. Darüber hinaus gab es eine unterbrechungsgesteuerte Komponente, die WAITLIST genannt wurde.
Die Benutzerschnittstelle des AGC wurde DSKY (Display/Keyboard) genannt und bestand aus einer Reihe von Ziffernanzeigen und einer Tastatur, die an einen Taschenrechner erinnert. Befehle wurden numerisch als zweistellige Zahlen eingegeben. Für den eigentlichen Befehl gab es die Taste VERB (Verb), während der Parameter, falls erforderlich, mit der Taste NOUN (Hauptwort) eingegeben wurde.
Das Kommandomodul verfügte über zwei DSKY, eins auf der Hauptinstrumententafel und eins im unteren Geräteraum in der Nähe des Sextanten zur Ausrichtung des inertialen Navigationssystems. Beide DSKY wurden durch den gleichen AGC betrieben. Die Mondlandefähre verfügte über nur ein DSKY für sein AGC.