 Der Vortrag jetzt ist ein wichtiges technologischer Meilenstein der Menschheit. Der Computer, der auf dem Mond gelandet ist und später haben Leute angefangen, andere Computer mit diesem Computer zu vergleichen, wie viel mal schneller andere Computer sind als dieser. Es ist Raketentechnik und es ist noch schwieriges Computer-Raketentechnik. Wir sind sehr glücklich hier, den echten Raketentechniker hier zu haben. Wir haben Michael Steil als Computer-Experte, der Exportinsys gegründet hat. Mit diesen Projekten hat er sehr viel Erfahrung mit Computer-Architekturen. Deswegen einen großen Applaus für den Ultimate Apollo Guidance Computer Vortrag. Herzlich willkommen zu dem Ultimate Apollo Guidance Computer Talk. Oder auch eine komplette Einführung in Computertechnologie und Betriebssysteme und Raumflug. Ich bin Michael Stein und ich bin Christian Hessmann. Dies ist der sechste Vortrag in dieser Serie und wir wollen möglichst viel über klassische Computersysteme erklären. Der Apollo Guidance Computer AGC ist ein Digitalcomputer, der neu entwickelt wurde für die Apollo-Raumschiffe, für die Apollo-Moon-Landungen zwischen 1996 und 1972, am MIT entwickelt, in 1961 bis 1966. 24 wurden gebaut, 200.000 Dollar hat jeder gekostet, ungefähr 1 MHz, 15 Bit Daten und ist ungefähr so groß wie ein Koffer, wie 32 Kilogramm, braucht 55 Watt. Es gibt ein numerisches Display und Keyboard und mitten in den 60er Jahren konnte man nicht einfach ein Computer kaufen und benutzen. Die meisten waren groß wie ein Kühlschrank, zu langsam, zu groß, zu schwer. Und obwohl in den letzten zehn Jahren sich viel getan hatte, und zehn Jahre später fing ein kleiner Computer an, in den Schatten zu stellen. Und es gibt mehrere Gründe, warum dies besonders interessant ist. Die Architektur ist aus den 60er Jahren fühlt sich sehr komisch an heute, aber es war sehr fortschrittlich und sehr ungewöhnliche Präferiegeräte und es war revolutionär für seine Zeit. Und die Mission Software hat alle Hardware, die man braucht, um zum Mond zu fliegen. Und der Apollo Guidance Computer wurde in zwei unbemannten Testflügen benutzt, die und in zwei bemannten Testflügen und in den sieben Moon-Landungen. Astronauten fanden es schrecklich, Kontrolle abzugeben und sie wollten selber die Kontrolle behalten und es gab ein Fallback für manuelle Steuerung, aber es war eigentlich automatisch. Um das zu verstehen, wozu der da war, müssen wir erstmal die Apollo Missionen angucken. Und anstatt das gesamte Raumschiff auf dem Mond zu landen, für die man eine riesengroße Rakete gebraucht hätte, hat man nur mit einem ganz kleinen Teil gelandet und der größte Teil ist im Mondorbit geblieben. Das Apollo Raumschiff besteht aus dem Lunamodule, dem Command-Module und dem Service-Module und dieser Ton-5-Rakete startet die aus Cape Kennedy in den Erdumlaufbahn. Und an der richtigen Stelle beschleunigt man auf ein Free-Return-Orbit um den Mond und es würde um nur um den Mond rumfliegen und wieder zurück zur Erde kehren. Und in den drei Tagen zieht das Service-Module, das Lunamodul raus und bremst auf der Rückseite des Mondes und ist dann im Mondumlaufbahn. Und zwei Astronauten sind dann im Lunamodul und das bremst wieder und ist ein Abstieg unter Schub und landet dann auf dem Mond. Nach dem Starten koppelt sich das wieder an das Service-Modul an und die klettern wieder ins Command-Modul, das Lunamodul wird abgesprengt und das der Rest beschleunigt wieder auf eine Bahn zur Erde zurück und am Schluss bleibt nur das Command-Modul und diese Animationen sind ganz tolle Videos, die wir sehr empfehlen können. Und das Command-Service-Modul und das Lunamodul haben jeweils einen von diesen Computern. Es ist dieselbe Hardware mit unterschiedlichen IO-Geräten und die Software war speziell adaptiert und die Astronauten hatten dieses Keyboard in Display-Unit und neben 100 anderen Schaltern und die Computer musste die Position und Geschwindigkeit haben, die Lage im Raum und die Triebwehr gesteuern und auch während des Starts die Kontrolle übernehmen. Um so verstehen, wie der funktioniert, werden wir uns die Architektur, die Hardware, die Peripherie, die Systems-Software und die Mission-Software anschauen. Die Architektur kann beschrieben werden als eine von Neumann-Architektur mit 15 Bit-Förtern. Wir werden über den Instructions-Shet, die Aratmetik und die IO-Aktur und das Interrupt-Modul. Diese Koden sprechen und sind letztens möglich. Die Instruction-Set-of-a-Modul-Arm-Processor, die am V8 Instruction, sind auf Runtime optimiert und... Oh Gott, Gott! ...komplexere Instructions-Instructions-Sets können höhere Komplexität und höhere Geschwindigkeit erreichen. Aber aus dem Anfang der 60er hatten die nur ein paar Tausend Transistoren statt Milliarden. Und jetzt haben wir nur 36 Befehle und das reicht für die Mission. Und dies sind die 36 Befehle. Es gibt einige sind Load & Store, einige sind Aratmetik, Kontrolle, IO und Interrupts. Und der Speicher. 4096 Speicherzellen von 0000 bis 7FFF und mit jedem Wort kann man dann eine Zahl von 0 bis 7FFF darstellen. Und alles geht durch den 15 Bit-Akkumulator und ein Programm kann multiplizieren, dividieren mit dem Akkumulator und einer Speicherzelle, damit man dann bestimmte Bedeutung haben kann, zum Beispiel Integers und Instruktionen, Code und Daten. Dies macht es zu einer von Neumann-Maschine, die es gibt, ein Program-Counter und zeigt auf die Instruktion, die als nächstes dran ist. Dann gibt es die Load Instruktion, lädt Speicher in den Akkumulator und der Program-Counter geht weiter. Und diese Additionsbefehl addiert einen Speicherzell zum Akku und man kann es dann speichern an einer anderen Stelle. Und hier wird K für eine Speicheradresse benutzt und diese Karten sind Quick Reference-Karten für die Befehle. Das ist die einverfachte Syntax und das genaue Vorgang in Pseudocode und wie das im Speicher kodiert ist und die Anzahl der Operanten und die Original-Syntax. Wir haben jetzt eine modernere Syntax benutzt hier und das ist dann viel einfacher zu beschreiben, was die CPU tut ohne Hintergrund in Maschinenprogrammierung. Jetzt gucken wir mal genauer, was es gibt. Hier ist eine Load Instruktion, Load A, Indirekt. Links sieht man die Register. Die meisten funktionieren mit dem Akkumulator und wenn diese ausgeführt wird, dann guckt er in der Speicherstelle nach, liest das und lädt es in den Akku und das ist die Store, der Store Befehl. Wie bei allen ist das erste das Ziel und dann die und die speichert den Inhalt des Akkus in dieser Speicherzelle. Dann gibt es auch ein Exchange Befehl, die kann der Akku und Speicherzelle tauschen und addieren, nimmt eine Speicherzelle und addiert sie zum Akkumulator und speichert es dann im Akkumulator. Und es gibt eine Subtraktionsbefehl und subtraiert den Inhalt der Speicherzelle vom Akku und speichert es wieder im Akku. Und das Ergebnis der Subtraktion kann negativ sein, also muss nur zu behalten, wie negative Zahlen dargestellt werden. Lassen Sie uns an F4-Bettzahlen eingehen. Diese können Werte 0 bis 15 eingeben. Das erste Bit ist dann das Vorzeichen und die letzten drei Bit sind dann die Zahl selbst. Dieses Encoding ist schwierig damit zu arbeiten. Die Einserkomplement-Darstellung hat den Vorteil, dass die unterschiedlichen maximalen Abstand haben. Das Zweier-Komplement ist völlig backwards-compatible zu den Einserungen. Anzeihend Nummern können Werte von 0 bis 15 annehmen. Komplement, Werte von 0 bis 7 und von 0 bis minus 7. Also, eine Negation ist die einfache Kompliment, das ist die einfache Komplimentierung dieser Zahl. Das heißt, die 0 kann entweder als alle 0 oder als alle 1 dargestellt werden. Die Addition ist in positiven Zahlen genauso wie in normalen Additionen und in negativen Zahlen genau um das Gekehrt. Interessant wird, wenn wir eine 0-Transition haben. Das heißt, wenn wir jetzt über 0 subtrahieren, wird das jetzt ganz interessant. Wenn wir das jetzt tun, kriegen wir einen Carry. Das heißt, wir müssen jetzt über das duplizierte 0 springen und wir kriegen einen End-around-Carry. Das heißt, eine Addition 7 minus 1 würde in einem minus 7 enden und das wäre natürlich falsch. Das heißt, wir müssen jetzt die 6 übernehmen und dann auf die subtrahierte Zahl addieren. Das heißt, wir laden jetzt die 7FFF von Vermemory, addieren die 001. Das heißt, die Accumulator kriegt jetzt einen Flag. Das heißt, wir legen das wieder zurück ins Memory. Wir clearing die Overflow-Condition. Wir laden 1 nach A und wenn wir jetzt diesen Overflow überspringen, wir die nächste Instruktion und landen bei dem ... Im Einser-Komplement, das ist einfach genug, ein Wert zu negieren, indem wir einfach das Einser-Komplement bilden, indem wir jedes Bit flippen. Das heißt, das negative Bilden ist, die Bit flippen und den Accumulator schreiben. Es gibt eine dedizierte Instruktion, die ein Wert inkrementiert. Ein Dekrement gibt es nicht und daher wird das mit einem kleinen Trick gemacht. Das heißt, es gibt eine diminuelle Instruktion, die positiven Zahlen inkrementiert die Negativen. Die CPU hat dedizierte Multiplikation-Intruktion. Das heißt, wir nehmen jetzt eine Instruktion von Memory. Multiplizieren ist mit dem Akku und das heißt, wir brauchen jetzt für unser Result 29 Bit. Das heißt, wir brauchen jetzt 2 Register fürs Accumulator. Das heißt, wir nehmen jetzt A und B Register. Jetzt brauchen wir Instruktionen, die mit Double Word Values umgehen können. Das heißt, die Double Word Values werden in den Registern A und B abgespeichert. Das effektive Value ist die Verbindung der Werte A und B. Die Vision funktioniert ähnlich. Das heißt, wir addieren wieder die drei. Andere Instruktionen erlauben ebenfalls A und B als Doppel Register Wort zu benutzen. LoadRB ist eines davon. LoadC invertiert dabei alle Bits beim Laden. Es gibt ebenfalls eine Add-Instruktion, die auf 2. Wir können LoadB sagen, das heißt, wir exchange B, wir können den Accumulator in die Speicher schreiben und umgekehrt. Wir haben ebenfalls Index, plus IndirectA, zu 0. Wir nehmen also Index. Was bedeutet das? Zum Beispiel steht ein bestimmter Wert drin und wird als Index dazu addiert. Dann hat man eine neue Adresse und nehmen die Adresse von Index 2 aus dieser Tabelle. Und ohne BaseAdress laden wir einfach direkt von dieser Adresse. Jetzt guckt er nach an der Adresse da und addiert den Index 0. Die Adresse ist immer noch dasselbe. In diesem Fall der Speicher an dieser Stelle ist sozusagen ein Pointer. Normalerweise werden die Befehle in der richtigen Reihenfolge abgearbeitet. Der Program Counter geht dann weiter. Es gibt Jump und Conditioner. Und damit lässt sich der Ablauf verändern. Wenn eine Jump Instruction kommt, dann lädt es das Argument in den Programmzähler und dann geht automatisch die Ausführung dort weiter. Jump F0 gibt es noch. Es springt nur, wenn der Akku 0 ist. Oder es gibt zum Beispiel, wenn nur ein Sprung, wenn es negativ oder null ist. Es gibt noch einen vierfachen Sprung. Je nachdem ob es negativ positiv plus null oder minus null ist, springt es zu einer der nächsten vier Instruktionen. Wenn es null ist, kann man es einfach ignorieren. Und es einfach die beiden ersten Slots benutzen. Und wenn es negativ ist, muss man die ersten beiden überspringen. Die könnten nie erreicht werden, aber trotzdem ist es gut, da einfach einen bestimmten Wert reinzuschreiben. Wenn der absolute Value wird geladen und es ist ein spezieller Fall, davon kann für Schleifen benutzt werden. Und es gibt den Call Befehl. Es ist nicht so, um Subroutine aufzurufen. Es ist wie ein Jump, aber speichert die Rückkehradresse und es wird im Link Register gespeichert. Erst wird das zweite Argument in den Problem Counter geladen und dann geht dort die Ausführung weiter. Im Link Register steht jetzt die Rücksprung-Adresse und am Schluss wird dann die Linkadresse in den Problem Counter zurückgeladen und dann geht es an der Stelle weiter, wo vorher die Ausführung war. Wenn es eine eigene Subroutine-Staaten will, dann gibt es ein Exchange Befehl extra dafür und der Stack wird manuell hergestellt mit dem Link Register. A und B werden kombiniert für doppeltgenau Arithmetic und dann gibt es das Link Register, speichert die Rückkehradresse und es gibt ein Zero Register. Wenn man das reinschreibt, wird es gelöscht und es gibt noch mehr, die wir später behandeln. Die Register sind Nummerier, das heißt, die haben Speicheradressen. Das bedeutet, die erst acht Wörter im Speicher sind in Wirklichkeit von den Registern belegt und sie können auch die Adressen durch die Adressen angesprochen werden. Das heißt, wir haben ein flexibleres Instruktion. Wir können zum Beispiel einfach 0 laden, wenn wir von der Adresse 7 laden. Man kann einfach das erhöhen und man kann einfach doppelt indirekt indiziert von der Adresse 1 laden. Gucken wir uns noch mal den Speicher an. Es sind 4096 Wörter von 0000 bis 7FFF und ganz unten sind die Register und dann sind erst 1024 Wörter RAM und dann sind noch 3 Kilo Wörter Read Only Memory. Ursprünglich war es nur dieses bisschen Speicher, aber wir gucken uns das mal genauer an. Oben gibt es Bänke im oberen Bereich, jeweils 250 Wörter und das Erasable Bank Register, IB zeigt auf eine dieser Banken, dieser Bänke, wenn es 0 ist, zeigt es auf 0, 5 ist es, zeigt es auf 5 und so weiter. Und die Adresse in dem festen Bereich sind immer dieselben und diese. Und es gibt 8 mal 250 Wörter RAM durch dieses Banking. Das ROM ist ähnlich gemacht und es gibt einen Fixbankregister und es zeigt auf eine der ROM-Bänke. Wenn man mehr als 32 Kilo Wörter braucht, es gibt einen Superbank-Bit und es gibt im oberen Bereich der Fixbanks gibt es nochmal eine mehrere Bänke und die Fixdraw sind immer dieselbe und benutzt immer die Bänke 2 und 3. Und das Fixdrom, da stehen das Betriebssystem und Betriebssystem-Code und Daten. Und die restliche Funktion ist in den verschiedenen ROM- und RAM-Bänken zwischen den Ramm-Banken zu schreiben, wird mit dem IB-Register gemacht und man schreibt das in Speicherbereich 3 und dann, wenn man da 5 reinschreibt, ist Speicherbank 5 sichtbar. Man kann es genauso machen mit dem FB-Register und das würde aber normalerweise nicht funktionieren. Und wenn der Bank in einer anderen Bank ist, dann muss man erst umschalten und man kann natürlich nicht den, den Bank umschalten, in dem der gerade ein Programm läuft und dann hat man da plötzlich anderen Code, der zufällig in derselben Adresse ist. Wenn man eine andere Bank haben will, dann muss das ATOMA umgeschaltet werden und Call F ist dasselbe wie die Double Word Exchange Instruktion. Man muss erst die Bank laden und den Programmzähler in A und B und dann Call F wird das in PC und FB geladen und das kann man auch für Return benutzen und das speichert die Original-Werte in FB und PC zurück und die beiden Bankregister haben nur 5 und es gibt noch einen Register für beide Banken, die dann die zusammen merken und es gibt eine Double Word Exchange Instruktion, die beide Banken und den Programm Counter austauscht und es gibt noch private Variablen in den Banken und kann auch RAM-Banke umswitchen die ungewöhnliche Ordnung diese ungewöhnliche Ordnung erlaubt für einen gleichzeitig switch der RAM-Banke A und der Memory-Banke. Wir haben jetzt ebenfalls einen Schattenregister was wir uns später angucken. Wenn wir 15-Bit-Werte schreiben du das zum ROR-Resse verschieben wir das um ein Bit nach links ROR rotiert nach links SHR schifft nach links dupliciert dabei das unterste Bit SHR 7 schifftet nach 7 und füllt die unteren Werte mit der letzten Bit auf. Wir haben gesehen, dass die CPU zum RAM um zum Memory ist, aber die CPU kann ebenfalls zu Periphernen Devices reden. Wir haben bis jetzt nur den Memory Space gesehen, es gibt aber noch einen weiteren Memory, mit dem es mit dem I.O. Dieser ist ebenfalls 15-Bit lang und es gibt die In- und Out-Instructions mit dem er dann mit diesen Interfaces. Die I.O. Channels können jetzt zum Beispiel Lampen auf dem Display bedienen. Diese können auch ebenfalls die I.O. Channels also diese verschiedenen Channels bilden. Es gibt also and or an XOR. Die ersten beiden Registers sind allerdings auch Shadow Registers von A und B. Nach den Registern dem Shadow-Bereich und den Editing-Registern kommt ein weiterer spezieller Bereich, das sind die Counter. Diese sind gekoppelt an externe Devices und diese werden nur über Hardware-Pulse oder ZYTO-Hardware-Pulse angesprochen. Dabei werden die Werte dann um 1 inkrementiert. Wenn I.O. Devices die CPU signalisieren müssen, wenn ein Interrupt passiert, kopiert das in die Shadow-Register und springt dann zu einem speziellen Punkt im Memory und dann pro und lädt dann die beiden Werte aus dem Shadow-Register und lädt dann die beiden Werte aus dem Shadow-Register und lädt dann die beiden Werte aus dem Shadow-Register und lädt dann die beiden Werte aus dem Shadow-Register zurück in die tatsächlichen Register. PC und IR sind normalerweise durch Interrupt angesprochen. Die Overflow-Condition-Flight die Overflow-Condition-Flight wäre während dann die Overflow-Flight gesetzt ist, werden Interrupts enabled, bis der Flag wiedergegriffen ist. Die Interrupts liegen der Speichert A&B lädt A&B mit der Bank und PC des tatsächlichen Handlers und springt dann zurück. Die Interrupt Return Instruction gibt es ebenfalls auch eine Erzeugende Instruktion. Es gibt eine weitere spezielle Memory-Location das ist der Watchdog. Zu dieser muss entweder gelesen oder geschrieben werden alle 0,64 Sekunden. Jetzt haben wir den Instruction Set gesehen und in den Beispielen haben wir gesehen wir haben gesehen die die octoberen 6-Bits sind die Opcodes und dieser lautet 8 Instruktion aber es gibt mehr als 18 Instruktion. Rammadressen starten immer mit 0,0 und Rammadressen starten immer mit etwas ungleichen 0,0. Daher müssen das nur 10 anstelle von 12 Adress-Bits geschrieben werden. Deshalb gibt es jetzt weitere 4 Instruktionen. Es gibt jetzt verschiedene Befehle die auf verschiedene Teile Ramm oder Ramm accessen das heißt wir kriegen mehrere Befehle. Extend ist ein Prefix dass den Frontcode der nächsten Instruktion verändert. Das heißt wir kriegen einen zweiten Satz Instruktion. Es gibt einen weiteren speziellen Terminal Return ist ein Nebeneffekt des leading 0s der wieder in ein Call Instruktion überführt wird. Indexedressing indexiert die Adressierung Index ist eine tatsache Instruktion Index ist eine tatsache Instruktion Index ist eine tatsache Instruktion Index ist eine tatsache Instruktion Die PC liest von der gegebenen Instruktion adiert den Wert zu dem Instruktion Register was im internen IR Register das heißt er nimmt jetzt 3703 Wertes weil ein Interrupt occurred nach der wenn es jetzt eine Register ist es gibt sehr viele seltsame Features vergleichen mit modernen Architekturen zum Beispiel gibt es keinen 2-Komplement keinen Status Register das Overflowverk kann nicht gespeichert werden und deswegen werden Interrupts disabled bis der Overflow wieder und dann wird der Interrupt gespeichert und es gibt eine Instruktion die mehrere Befehle überspringen kann und es kann sehr gefährlich sein es gibt keine Shift Rotate Befehle aber man kann Schiff notieren wenn man den Speicher schreibt und es gibt iOut Channels und man kann indizieren indem man die Instruction Codes hackt und deswegen braucht man Indizierungen Und deswegen braucht man Indizierungen, wenn man es braucht. Das war die Architektur von dem Apollo 1 Computer. Und jetzt gucken wir mal die Hardware an. Die Hardware läuft mit einem Megahertz, hat Microcode und Integrated Circuits, Core Memory und Core Robe Memory. Und die Instruktion sind Microcode integriert, implementiert. Und dieses ist ein vereinfachtes Blockdiagramm. Und das ist die AGC auf Hardware, eben etwa 500 LogicGates. Und die gestrichelten sind Single-Bit und die durchgehenden sind 15-Bit Datenleitungen. Das ist Timing und Control. Das sind die zentrale Einheiten, zentrale Register-Einheit, die arithmetische Einheit für Manipulation von Zahlen, die Speicher, Ram und Rom, etwa ein Megahertz, der in Sequenzgenerator und rotiert immer durch 12 Zustände. Und braucht, belegt immer so viele Zyklen, wie er braucht, jeder Befehl. Und es gibt 12 Einzel-Schritt-Mikroprogramme für jeden Befehl. Dies zum Beispiel für die Ladeinstruktion in jedem Schritt senden die einzelnen Einträge Kontrollimpulse zu den einzelnen Einheiten, die mit dem Bus verbunden sind. Zum Beispiel das Kontrollsignal WA und AR liest von dem Bus. Das Speicher ist auch an dem Write-Bus angeschlossen und RW und WG und RG lesen und schreiben Register. Und in Schritt 7 wird RG, wird der Memory-Puffer auf den Bus gelegt und WB schreibt den Bus in das temporäre B-Register und dann kommt B, wird B auf den Bus gelegt und ist in das A-Register geschrieben. Am Anfang des Speicherzyklus wird es ins Speicher geschrieben und kopiert dann den in den Halt auf B und in der zweiten Hälfte wird B zurückgeschrieben. Und beim Microcode im Load-Instruktion können wir es led den Speicher in B und kopiert den dann in A und der Exchange Befehl led, kopiert dann den Inhalt in den Speicher. Die Vision hat ein sehr langes Mikroprogramm und es gibt aber nicht nur die für die Maschinenbefehle, sondern auch für Increment und Decrement werden die Pulse in spezielle Befehle übersetzt, die dann noch eingebaut werden. Und es gibt auch noch einen Memory Sequencer mit seinem eigenen Mikroprogramm und diese beiden steuern den Interrupt und Resets. Und die kompletten Schaltpläne fassen auf 49 Seiten und es gibt nur einen einzigen Gattatyp, das ist ein Nand mit drei Eingängen und etwa 100 davon sind immer in einer Logic-Einheit. Es gibt 24 Logiceinheiten und sind auch eingebaut immer IO und Debuganschlüsse und es gibt RAM und ROM. RAM ist magnetischer Kernspeicher und wenn man ein Bitliste wird es gelöscht, das heißt der Speichersequencer muss dann das Anschließen sofort wieder neu schreiben. Und für Zeit hat es einen hohen Anteil an ROM und der ROM geht das Kabelbündel entweder durch den Feritkern oder dran vorbei und es wurde komplett von Hand gewebt. Und A und B werden so zusammengebaut und Hermit verschlossen und dann gibt es einen relativ kompakten Computer. So ist es im Raumschiff installiert mit sechs ROM-Modulen, die direkt zugänglich sind und im Prinzip auch während der Mission ersetzt werden können und das ist die Hardware. Als nächstes Wort ist Devices Applaus. Lassen wir uns nur die Devices anschauen, die an den Computer angeschlossen werden. Wir haben einige Devices, die den Statevektor ausmessen. Wir haben das Chiroscope, das ist das Kernperipher und dieses Chiroscope misst Rotation des Raumschiffs aus und daher weist der Computer immer seine Ausrichtung im Wildraum. Das Accelerometer misst die Beschleunigung, die Optik kann über die Sterne die Position des Raumschiffs, das Landingradar vermisst die, das Rondefuhrer da misst die Entfernung zwischen dem Lunamodule und dem Command-Due-Due während des Docking, das CDU-T und CDUS-Register. Das Command-Module haben alle Reaction-Control-Jets. Diese können dazu verwendet werden, die Ausrichtung zu verändern. In dem Computer gibt es ein Bit pro Jet und so kann dann jede Dose einzengestellt werden. Das User-Interface ist das Disk-Key, kurz für Disk-Play und Keyboard, hat 19 Kies, 15 Lampen und mehrere Linien für numerische Eingaben. Das Memory-Display ist vom Auto. Es gibt ein bidirektionales Radiolink zum Missen-Control und die Datenwörter erscheinen im In-Link-Counter und die werden... ...dies waren nun die Peripherals. ...dies System Software... ...macht ein Priority-Based-Co-operative, aber auch prämtiv, realtime-interactive, fault-tolerant Computer ...macht ein Priority-Based-Premtiv, fault-tolerant Computer. Die Eigenschaften sind die Multitasking, Interpreter, Device-Rivers, Waitlist, Shell und Default-Recovery. Die AGC muss sehr viel tun. Mathematik, die mehrere Sekunden dauern kann, muss I.O. machen. Es macht Interrupt-Servicing, wenn ein I.O.-Device die Rechenleistung haben muss, macht realtime-Control und kümmern sich um das kontinuierliche Auslesendet, verschiedene Devices. Das Scheduling-Co-Obsnarkung. Wenn Jobs nun höhere Priorität daran sind, ist es sinnvoller, die Highest-Priority-Jobs zuerst laufen zu lassen und solange die Highest-Priority-Jobs zu laufen, die Jobs selber müssen prüfen, ob ein anderer Job eine höhere Priorität hat. Das macht es zu einem preemptive Multitasking-Cputer. Job 0 ist immer der, der gerade läuft. Wenn ein neuer Job gemacht wird mit einer höheren Priorität, dann werden die ausgetauscht. Das heißt, der neue ist dann Job 0. Und wenn man die Priorität negiert, wird er schlafen gelegt und noch mal negiert, wird er wieder aufgeweckt. Das heißt, der neue ist dann Job 0. Und wenn man die Priorität negiert, wird er schlafen gelegt und noch mal negiert, wird er wieder aufgeweckt. Das erste Job-Entry kann für Lokal-Daten benutzt werden und ist immer Job 0. Das heißt, die sind immer praktischerweise an derselben Adresse. Dann gibt es einen Satz von Unterroutinen, die die Datastruktur der Jobs kontrollieren. Zum Beispiel kann man einen neuen Job erzeugen. Man kann die Priorität ändern, den Job aufwäcken oder schlafen legen und den Job beenden. Hier ist keine wirkliche Funktion, sondern eine Sequenz, die neue Job-Variabilien checken. Und wenn null, höchste Priorität hat es nichts zu tun. Wenn es einen Job mit ein höherer Priorität gibt, dann werden die ausgetauscht. Und New Job ist nicht nur eine Variable im Speicher, sondern auch im Watchdog hört. Das heißt, wenn das Multitasking stehen bleibt, dann wird der Computer sich automatisch resetten und ein großer Teil macht wissenschaftliche Berechnungen, zum Beispiel einfach nur Vektor und Skalarberechnungen und macht viele hundert Instruktionen in den Maschinencode. Es gibt Signal-Double oder Triple-Precision, Vektoren oder Matrizen. Und es gibt ein Mehrzweck-Akumulator, kann zum Beispiel doppel- oder triple-Vektor enthalten. In Pseudocode würden wir den Vektor laden, denn mit einem Skalar multiplizieren, die der Speichern die zweite Multiplikation machen und das Ergebnis addieren. Und da muss man in Zwischenergebnisse speichern. Also gibt es einen kleinen Stack dafür. Wenn ein Job Mathematik benutzt, dann kann man die restlichen Daten speichern. Es gibt einen zusätzlichen Akkumulator, der heißt WEG. Und ein Job kann erzeugt werden mit oder ohne WEG, je nachdem, welche Subproutine benutzt wird. Die Maschinencode von diesem Beispiel benutzt ganz viele Pointer, die weitergegeben werden. Und dies spricht praktisch einer virtuellen Maschine. Die Maschine ist auch tieringvollständig und hat Schrittregister und Linkregister. Und so kann man zwei Opcodes in einen Wort packen. Also hat man 102 Opcodes. Das heißt, es gibt ein Shift by 7. Die beiden Operanden werden in beiden folgenden Wörtern gespeichert. 14-Bit Adressen bedeutet, man hat nicht dieses komplizierte Memory Layout. Das heißt, man kann das halbe Rom auf derselben zurzeit adressieren. Also interpretierter Code kann mit diesem vereinfachten Memory Layout arbeiten. Das ist der normale Instruktionsset. Man kann die Mission Exektiv Instruktionen oder man kann hier in den Interpreter-Mode wechseln. Neben lang laufenden Mathe-Jobs gibt es Device-Treiber. Zum Beispiel, wenn ein Diskey-Taste gedrückt wird, dann kommt ein Interrupt. Der Job wird unterbrochen und die Device-Daten werden gelesen und kehrt so schnell wie möglich zurück. Sonst wird es auch später verschoben. Manche Geräte müssen regelmäßig angesprochen werden. Zum Beispiel gibt es ein Timer der Interrupt-Machte, die Daten lesen und schreiben von bestimmten Geräten. Und Diskey zum Beispiel kann nur mehrere Zeichen auf einmal ändern. Deswegen gibt es hier ein Zyklus von acht Phasen und jeweils bei einem Interrupt-Tankler, wenn die ausgeführt. Manche müssen zu ganz bestimmten Zeiten getrieben werden. Manche Geräte, zum Beispiel, muss eine Lampe zweimal blinken und dann wird es sofort eingeschaltet und dann neue Tasks in die Ausführungskuhe geschoben, die dann die Lampe wieder an und wieder außen machen. Und es gibt schon bestimmte Zeitabfolgen und erst wird ein Timerregister runtergezählt und dann gibt es Paare von Program Counter und damit wird der Task gestartet und abgeschaltet. Und es gibt hier für die Granularität von zehn Millisekunden andere, können mit derselben Frequenz aber mit Offset getriggert werden. Aber die dürfen sich nie überlappen und das wird noch kompliziert von Device Interrupts und das erzeugt zusätzliche Latents und der Timerhändler darf nur eine maximale Zeit gebrauchen und es gibt keine garantierte Zeit, sondern es liegt immer nur an den einzelnen Komponenten, die Timerung einzuhalten. Und es gibt eine Shell, die festlegt, was auf dem Display angezeigt wird und es gibt den Display Update Code für das Display. Wenn es fertig ist, dann legt Pinwall einen neuen Job an. Es gibt eine Remote Shell mit einer Disky-Verbindung zum Remote vom Gerät. Und es gibt Alarmsupproutine und es lässt eine Lampe aufleuchten, die einen Fehler signalisiert. EDC hat ganz viele Sanity Checks und um Fehler zu finden, ganz bestimmte Arten von Fehler. Manche Hardware Watch Dogs können Fehler auslösen, sodass normale Funktionen nicht mehr weitergehen können und manchmal gibt es dann ein Hardware Set, aber dann gibt es Recovery Services und zum Beispiel gibt es Recovery Code für verschiedene Phasen und die Phase gesetzt, wenn zum Beispiel ein Abort passiert, ein Abbruch passiert, dann gibt es eine spezielle Recovery Routine, die ausgeführt wird. Zum Beispiel könnte man aufräumen und es nochmal probieren oder zu einer anderen Phase springen oder den Job ganz beenden. Die Phasenänderung setzt die Phase für den Job in der Recovery Table, zum Beispiel fünf für Job vier und alle haben eine Taskbeschreibung oder einen Job mit oder ohne Wacke und während der normalen Ausführung gibt es mehrere Jobs und Tasks, die in der Queue sind und dann wird die Wecklist gelöscht und dann wird der Recovery Code angelegt, aber manchmal gibt es zum Beispiel Fehler, die nicht recoverable sind und dann wird das ganze System neu initialisiert ohne Recovery Code und das war die System Software. Jetzt, wo wir einen guten Überblick haben, wir werden uns über die Missionen unterhalten. Wir werden uns das User Interface anschauen, das ist die Launch Sequence und wir werden uns die Orbit und Feststellung angucken. Wir gucken uns, sobald wir uns den Mond angewuchen, den Lunar Landing, Rendezvous, Reentry und wir möchten uns dann am Ende das User Interface anfangen. Es ist eigentlich ein Commander Interface, hat aber nur Zahlen und Buchstaben, hat aber, das heißt, wir würden uns auf dem Diski, in das Verb 01 und Memory 02 angucken. Das heißt, beim Diski wird ein Flashing, Verb und Noun die Erwartung eines Arguments anzeigen. Dieser ApolloGuygens-Computer nimmt die gleiche Syntax für die Specialcase ist, wenn die Diski eine Ja- oder Nein-Frage stellt, dann würde man mit dem ProCIP die Astronauten haben eine komplette Referenz auf Papier dabei. Nun wollen wir uns die Missionen im Genauen angucken. Wir haben uns nun natürlich gemacht. Wir sind im passiven Monitoring Mode und mit dem Abfall des, wenn das nicht stattfindet, können wir es mit 1665 den Mission-Counter starten. Während das Flug der Saturn V überwacht das AGC nur die, währenddessen zeigt es nur die Geschwindigkeit, die Höhe und die Position. Intern arbeitet das Ding in Metrisch, aber für die Astronauten wurde es in imperialer Einheiten umgefeindet. Falls Probleme mit dem Saturn-Computer auftraten, konnte das AGC die Kontrolle übernehmen oder zur Not konnten sogar die Astronauten manuell den gesamten Stack in Orbit fliegen. In unter 12 Minuten haben wir die erste und die zweite Stufe abgebrannt und benutzt die dritte Stufe, um unsere Zirkularisierung durchzuführen. Wir wollen nun wissen, ob wir im richtigen Orbit sind. Der AGC kann nun die Geschwindigkeit und die Höhe feststellen. Um in Weltraum navigieren zu können, müssen wir unsere dreidimensionalen Positionen feststellen. Das macht der AGC mit dem Statevektor. Das machen wir mit einem Sextanten. Dieser ist sehr ähnlich zu einem nautischen Sextanten. Wir messen also die Winkel zu verschiedenen Sternen und Himmelskörper und festzusetzen. Das AGC kennt bereits die Position für 45 Sterne. Das heißt, wenn wir jetzt welche einlesen, kann der AGC die tatsächliche Rotation des Raumschiff feststellen und mit den RTC-Düsen die Rotations... Wenn wir nun diese Messung mehrfach durchführen, können wir eine eindeutige Rotation im Weltraum feststellen. Während wir uns bewegen, werden wir nun unsere Position und Geschwindigkeit kennen. Können wir über dead-racketing einfach unsere Position und Geschwindigkeit integrieren. Es ist sinnvollerweise zwei weitere mathematischen mathematischen Modelle eingebaut. Das Kepler-Schirm-Modell und das Engel-Modell, das Kepler-Modell, das Kepler-Modell beeinträchtigt nur sphärische Potenzialpfe. Wie wir sehen können, ist das AGC in der Lage, komplett eigenständig zu fliegen. Links ist das Mission Control Center ebenfalls über S-Band-Radio mit dem Apollo Guidance Computer verbinden. Das eine, was das Raum für den Expresser weiß, ist seine Rotationsausrichtung. Mit dem Gyroscope können wir unsere Ausrichtung in allen drei Raumachsen feststellen. Drei Gyroscope, eins in jeder Achse, können wir unsere gesamte Rotationseinstellung feststellen. Wir werden uns kurz noch in den digitalen Autopilot unterhalten. Es ist ungefähr 10% des gesamten Source Codes. Die Implementationen für beide unterschiedlichen Fahrzeuge sind unser unterschiedlich, weil sie unterschiedliche Mission Profile fliegen müssen. Der digitale Autopilot benutzt die RTC Thrusters, um die Rotation konstant zu halten. Der Autopilot wird ebenfalls genutzt, wenn die Astronauten falls die RTCs zu irgendeinem Zeitpunkt ausfallen sollten, ist der AGC ebenfalls in der Lage, ein Ausweichmuster für die AGCs zu errechnen, um die gewollte Rotation durchzuführen. Der digitale Autopilot ist ebenfalls in der Lage den effizientesten Transfervektor zu berechnen und von einer Rotationszustand in eine andere überzugehen. Der Autopilot kann ebenfalls ein stable constant rolling berechnen. Er ist ebenfalls in der Lage, der Crew dabei zu helfen. Schub! Festuling, es hält ein Timer vor, um die korrekten Länge des... Das Reckoning ist nicht mehr von Vorteil, d.h. wir nehmen den Input der Akteurometer, um unseren Unterschied festzustellen. Normalerweise findet die Translunar Injection im zweiten Orbit um die Erde statt. Diese wird immer noch vom... ... Nach der Separation von der S4B-Stage ... werden wir uns dann mit der Lunar Landing beschachten. Die Separation findet 4 Stunden 45 Minuten vor der Landung statt. Bei Abdocken wird die IMU realigned und verschiedene Funktionen getestet. So, es gibt ein spezielles Programm für die Breaking Face und der Computer berechnet, wie lange das Triebwerk mit minimalem Spritverbrauch gezündet werden muss. Und die Astronauten sind nur da und lassen sich fahren, die Descent-Engine ... ... macht das Automat stehen. Die Astronauten können fast nichts sehen. Und um 8000 Fuß startet ein neues Programm und dann können die Astronauten den Boden sehen und jetzt können sie besser sehen und gucken, wo sie am besten landen. Und das dritte Programm behält eine konstante Orientierung bei und der Pilot kann manuell die Ausrichtung steuern und nach der Landung können die Crew-Programm 16 starten und bestätigt, dass tatsächlich die Landung stattgefunden hat. Und jetzt gibt es eine ganz ... ... der Autoplat wird nicht ganz abgeschaltet, denn vielleicht müssen sie schnell einen Notstart machen und jetzt kommt die Aufstiegsphase und das Rendezvous wieder. Das wurde im Gemini-Projekt schon mal erprobt und hier kann man Gemini im AirTorbit sehen und jetzt ... ... und es gibt zwei Möglichkeiten für das Rendezvous ein konservatives koaliptisches Rendezvous für anderthalb Orbits, um das Common-Service-Module zu brauchen und es gibt das direkt, riskantere Direct Rendezvous, wurde es direkt in weniger als einem Orbit sich annähert und das wurde ab Apollo 14, wurde das benutzt, um weniger Sprit zu verbrauchen. Die Vorbereitung musste zwei Stunden vor dem Start beginnen und berechnete Rendezvous-Daten und benutze ein Tracking-Programm dafür. Eine Stunde vorher startete Programm 12 und programmierte die entsprechenden Daten und der Computer macht dann ein Countdown und wartet auf Bestätigung und dann starten wir und es gibt nur 7,5 Minuten bis zum Orbit je nach Orbit habe gedauert es anderthalb oder dreieinhalb Stunden, um bis zum Common-Module zu kommen währenddessen läuft Programm 20 misst das andere Raumschiff das Service-Module und benutzt die Antennen für ein Alignment und die und dann wurde ein Interception-Kurs berechnet in Abfangkurs und steuert auch die Triebwerke um den zu erreichen und es gibt ein aktives Tracking des Lunamodules vom und steuert jeweils das andere Raumverzeug falls irgendetwas schief geht und es rotiert dann, damit die Docking-Positionen aufeinander zufliegen und dann wird das Common-Service-Module aktiv mit anderen Programmen Final Rendezvous bis zum endgültigen Docking einige Sekunden vorher schalten beide werden beide Programme abgeschaltet damit es nicht in letzter Sekunde noch irgendwelche falschen Sachen macht und dann kommt der Trans-Earth-Injection und geben Daten für den Earth-Orbit ein und der Computer programmiert und berechnet die entsprechenden Orbits und der letzte Orbit wird vom Boden berechnet und dann übertragen per S-Band und mehrere Landeparameter werden angefordert und Geschwindigkeit und Winkel und die Werte werden bestätigt und dann ist das Programm beendet und dann fragen sie die Astronauten in einer Checkliste, die dann durchgeführt werden muss und wenn das passiert ist dann kommt Programm 63 und das ist die Initialisierung und dann benutzt der Autopilot die Thruster um die Re-Entry die Windwiedeintredite in der Atmosphäre automatisch durchzuführen ein anderes Programm überwacht die Flugbahn und berechnet wie am besten gebremst werden kann und im wesentlichen surft dann das Modul auf der Atmosphäre oder feuert einfach das Modul eine Kanonkugel durch die Atmosphäre das letzte Programm ist die Endgültephase die Endphase für das Auslösen und die Fallschirme werden aber nicht vom AGC aus gelesen, sondern von dem Learning Sequence Computer und dies war eine ganz normale Mission was kann schon schiefgehen wir hörten mit Apollo 11 auf und normalerweise werden nur ein Teil der Leistung vom Küche gebraucht aber es wurden ganz viele zusätzliche Instruktionen erzeugt durch einen Fehler es entstand eine Queue von ganz vielen Jobs und dann gab es einen Alarm und das Betriebssystem beendet alle Programme und startet dies neu und das dauert noch ein paar Sekunden und dann konnte gelandet werden jetzt Apollo 13, es gab eine Explosion im Saustoff-Tank und weit weg schon von der Erde, aber glücklicherweise konnten sie die Free Returns Rejectory benutzen und kamen wieder bei der Erde an aber mussten ins Lunamodule, weil sie sonst nicht genug Saustoff gehabt hätten und Programme mussten übertragen werden auf den anderen Computer, weil die verschiedene Ausrichtungen hatten und mit das Baud-Geidenssystem wurde in dem Fall benutzt für die Triebwerkszündung unterwegs und zum Glück, wo konnte das gemacht werden noch vor dem Wiedereintritt und am Schluss Apollo 14, da gab es eine kalte Lötstelle die ein Problem erzeugte mit dem Abbruch und deswegen wurde auch irgendwie ein Programm ausgeführt was nicht mehr auf den Abortprogramm reagiert hat das ist nur ein Abortknopf und deswegen musste das Abortprogramm manuell über das Diskie eingegeben werden und das war die Missionssoftware die auf einem Flug zum Mond und zurück benutzt wurde jetzt wollen Sie wahrscheinlich Ihren eigenen Code auf einem Apollo-Geidens-Computer laufen lassen wir müssen also wissen wo wir einen herkriegen 42 wurden gebaut 3 wurden in der Erdnussiere verloren 11 sind zurückgekommen und sind wahrscheinlich Teil der Museen 1 ist im Mountain View California Computer History Museum zu sehen es gibt allerdings viele emulierte der gesamte Missionssoft ist auf GitHub zur Verfügung gestellt und kann frei heruntergeladen werden es brauchen viele Leute um eine Präsentation zu erstellen das heißt wir wollen uns bedanken bei den Leuten die die Bücher geschrieben haben und den ganzen und alle Leute die die Dokumentation dort geschrieben haben wir möchten uns um für Eure Aufmerksamkeit bedanken und verabschieden uns für den Akt weißt du nicht ob noch Zeit ist für Fragen und Antworten aber das war ein sehr dichter Vortrag das war wirklich unglaublich viel vielen Dank Michael, vielen Dank Christian für diese Information overload bitte noch mal eine große Rundapplaus wir haben leider keine Zeit mehr für Fragen und Antworten damit verabschieden sich aus der Übersetzerkabine Pink Dispatcher und Nobler