El Apollo Guidance Computer (por sus siglas, AGC; en español, Computador de Navegación del Apolo) fue un componente fundamental del programa Apolo. Proporcionaba la capacidad de cálculo necesaria para controlar la orientación y la navegación del módulo de mando y del módulo lunar.Apollo Guidance, Navigation and Control Hardware Overview Este ordenador destaca por haber sido uno de los primeros computadores basados en circuitos integrados. El AGC y su interfaz DSKY se desarrollaron a principios de los 1960 por el MIT Instrumentation Laboratory para el programa Apolo.
thumb|La interfaz de pantalla y teclado (DSKY) del Apolo Guidance Computer montada en el panel de control del módulo de mando, con el Flight Director Attitude Indicator (FDAI) encima. thumb|Lista parcial de los códigos numéricos para verbos y nombres en el Apolo Guidance Computer. Fueron impresos en un panel lateral como guía de referencia rápida. thumb|right|150px|Circuitos integrados con encapsulado flat-pack del AGC.
Programa Apolo
A excepción del Apolo 8, que no llevó módulo lunar, cada misión contaba con dos ordenadores AGC, uno en el módulo de mando y otro en el módulo lunar. El AGC del módulo de mando estaba situado en el centro del sistema de navegación y orientación (GNC). El del módulo lunar llevaba su propio sistema primario de orientación, control y navegación del Apolo, conocido por el acrónimo de PGNCS (pronunciado como pings).
Además, cada misión contaba con otros dos ordenadores adicionales: El computador digital del lanzador (LVDC), situado en el anillo de instrumentación del cohete Saturno V. El sistema de orientación para aborto (AGS) del módulo lunar, para su uso en caso de fallo eventual del LM PGNCS. El AGS se podía usar para despegar desde la Luna, y para reencontrarse con el módulo de mando, pero no para alunizar.
Funciones del ordenador de navegación El ordernador orientaba la nave, controlaba los varios cohetes —ya fuere los principales de propulsión o los de ajuste de dirección, la guiaba en órbita, y manejaba el alunizaje y reingreso atmosférico a la Tierra. Según Dan Lickly:
Diseño
El AGC se diseñó en el MIT Instrumentation Laboratory bajo la dirección de Charles Stark Draper, con el diseño hardware a cargo de Eldon C. Hall. Los primeros trabajos sobre la arquitectura llegaron de manos de J.H. Laning Jr., Albert Hopkins, Ramón Alonso, y Hugh Blair-Smith. La empresa Raytheon fabricó el hardware de vuelo, y Herb Thaler también estaba en el equipo de diseño.
El computador de vuelo del Apolo fue el primero en usar circuitos integrados (CI). Mientras que la versión Block I usaba 4100 CIs, conteniendo cada uno una sencilla puerta NOR de 3 entradas, la versión posterior Block II (usada en los vuelos tripulados) empleó 2800 CIs, cada uno con dos puertas NOR de 3 entradas. Los CIs, de Fairchild Semiconductor, se implementaron usando lógica resistencia-transistor (RTL) en un flat-pack. Fueron conectados mediante enrollamiento, y luego el cableado se incorporó en un molde plástico de epoxy. Al usar un único tipo de integrado (las doble NOR3) para todo el AGC, se evitaron los problemas que plagaban los primeros diseños de computadores basados en CIs, como el computador de guiado Minuteman II, que usaba una mezcla de puertas con lógica diodo-transistor y otras con lógica diodo-resistor.
El computador tenía 2048 palabras de memoria de núcleos magnéticos volátil y 36 kilopalabras de memoria de núcleos cableados de solo lectura. Ambas tenían un ciclo de 11,72 microsegundos. La longitud de la palabra de memoria era de 16 bits: 15 bits de datos y 1 bit de paridad impar. El formato de palabra de la CPU de 16 bits eran 14 bits de datos, 1 bit de overflow, y 1 bit de signo (en representación complemento a uno).
Interfaz DSKY thumb|250px|right|Interfaz de usuario DSKY del computador del Apolo. thumb|250px|right|Diagrama de la interfaz DSKY del LM.
La interfaz de usuario con la que se accedía al AGC era la DSKY (del inglés display and keyboard, en español teclado y pantalla), pronunciado comúnmente como dis-key. Poseía un vector de indicadores luminosos, varios visualizadores numéricos y un teclado tipo calculadora. Los comandos se introducían como números de dos dígitos: Verbo, y Nombre. El Verbo describía el tipo de la acción a realizar y el Nombre especificaba el dato afectado por la acción indicada por dicho verbo.
Los numerales se mostraban a través de visualizadores de siete segmentos electroluminescentes de alto voltaje de color verde. Para controlar estos visualizadores se usaban relés electromecánicos que limitaban su velocidad de refresco (la versión posterior Block II usaban rectificadores controlados de silicio más veloces). En ellos se podían visualizar tres números de 5 dígitos con signo en base octal o decimal, y se usaban típicamente para mostrar vectores tales como la actitud del vehículo espacial o un cambio de velocidad necesario (delta-V). Aunque los datos se almacenaban internamente en unidades métricas, estos se mostraban según el sistema anglosajón de unidades. Esta interfaz tipo calculadoraLos primeros modelos avanzados de calculadoras de mano llegaron al mercado aproximadamente en la misma época, mientras que las primeras calculadoras científicas de bolsillo aparecieron durante la siguiente década. La primera calculadora programable de bolsillo, la HP-65, se utilizó en computaciones de respaldo (backup) en el CSM del Apolo durante el proyecto de pruebas Apolo-Soyuz en 1975. fue la primera de su clase, y el prototipo para todas la interfaces de paneles de control similares.
El módulo de mando tenía dos DSKYs conectadas al AGC, una en el panel de instrumentos principal y otra en la bahía de equipos, cerca de un sextante que se usaba para alinear la plataforma de navegación inercial. El módulo lunar tenía una única interfaz DSKY. Unos indicadores de actitud (FDAI), controlados por el AGC, se situaban sobre la DSKY en la consola del comandante y en el LM.
En 2009, se vendió un DSKY por en la subasta pública organizada por Heritage Auctions.
Temporización
El cristal oscilador del reloj del AGC tenía una frecuencia de unos 2,048 MHz (2048 kHz). Esta señal se dividía por dos para producir un reloj de 1,024 MHz de cuatro fases que usaba el AGC para realizar las operaciones internas. Además, la señal de 1,024 MHz se dividía por dos para producir una señal de 512 kHz denominada frecuencia maestra; esta señal se usaba para sincronizar los sistemas externos del Apolo.
A su vez, la frecuencia maestra primero se dividía mediante un escalador por cinco, usando un contador en anillo para producir una señal de 102,4 kHz. Luego era dividida por dos a través de 17 etapas consecutivas: desde F1 (51,2 kHz) hasta F17 (0,78125 Hz). La etapa F10 (100 Hz) era retroalimentada hacia el AGC para incrementar el reloj en tiempo real y otros contadores involuntarios usando la instrucción Pinc. La etapa F17 se usaba para cargar intermitentemente el AGC cuando trabajaba en modo standby.
Registros centrales
El AGC tenía cuatro registros de 16 bits con propósitos computacionales conocidos como los registros centrales: A : El acumulador, para uso general Z : El contador de programa - la dirección de la siguiente instrucción a ser ejecutada Q : El resto de la instrucción DV, y la dirección de retorno en las instrucciones TC LP : El producto inferior en las instrucciones MP
También había cuatro posiciones en la memoria central, en las direcciones 20-23, denominadas posiciones de edición porque lo que estuviera almacenado allí sería devuelto desplazado o rotado un bit, excepto para lo que fuera desplazado a la derecha 7 bits, para extraer uno de los 2 códigos de operación de 7 bits empaquetados en una palabra. Esto era común a los AGC del Bloque I y del Bloque II.
Otros registros
thumb|El DSKY y el AGC en una exposición en el Computer History Museum. El AGC está desmontado mostrando sus módulos lógicos. thumb|Prototipo de módulo lógico del Bloque I de AGC. thumb|Módulo lógico del Bloque II, con integrados flat-pack. thumb|Doble puerta NOR del AGC thumb|Esquema de la doble puerta NOR del AGC
El AGC tenía varios registros adicionales que se usaban internamente durante el transcurso de una operación: S Registro de 12 bits de dirección de memoria, la parte inferior de la dirección de memoriaBank/Fbank Registro de 4 bits de la ROM, para seleccionar el 1 k de palabras de la ROM cuando se direcciona en el modo conmutable-fijoEbank Registro de 3 bits de la RAM, para seleccionar las 256 palabras de la RAM cuando se direcciona en el modo conmutable-volátilSbank (super-bank) Extensión de 1 bit al Fbank, necesario porque las últimas 4 kilopalabras de la ROM de 36-kilopalabras no es alcanzable usando solo FbankSQ Registro de secuencia de 4 bits; la instrucción actualG Registro de 16 bits del buffer de memoria, para mantener la transmisión de palabras de datos desde y hacia la memoriaX La entrada 'x' del sumador (el sumador se usaba para realizar toda la aritmética complemento a uno) o el incremento del contador de programa (registro Z)Y La otra entrada ('y') al sumadorUNo es realmente un registro, sino la salida del sumador (la suma en complemento a 1 del contenido de los registros X e Y)B Registro buffer de propósito general, también usado para pre-cargar la siguiente instrucción. Al comienzo de la siguiente instrucción, los bits superiores de B (con el siguiente código de operación) eran copiados a SQ, y los bits inferiores (la dirección) eran copiados a S.C No es un registro independiente, sino el complemento a uno del registro BIN Cuatro registros de entrada de 16 bitsOUT Cinco registro de salida de 16 bits
Conjunto de instrucciones
El formato de las instrucciones emplea 3 bits para el código de operación y 12 bits para las direcciones. Block I tenía 11 instrucciones: TC, CCS, INDEX, XCH, CS, TS, AD, y MASK (básicas), y SU, MP y DV (extras). Las ocho primeras, llamadas instrucciones básicas eran utilizadas directamente por el código de operación de 3 bits. El acceso a las últimas tres instrucciones era a través de un tipo especial de la instrucción INDEX llamada EXTEND, justo antes de la instrucción. Las instrucciones del AGC de Block I son: TC (transfer control) Salto incondicional a la dirección especificada en la instrucción. La dirección de retorno se almacenaba automáticamente en el registro Q, de forma que la instrucción TC se podía emplear para llamar a subrutinas.