stringtranslate.com

Computadora de guía Apollo

El Apollo Guidance Computer ( AGC ) fue un ordenador digital producido para el programa Apollo que se instaló a bordo de cada módulo de comando Apollo (CM) y módulo lunar Apollo (LM). El AGC proporcionó interfaces electrónicas y de computación para la guía, navegación y control de la nave espacial. [3] El AGC fue el primer ordenador basado en circuitos integrados de silicio . [ cita requerida ] El rendimiento del ordenador era comparable al de la primera generación de ordenadores domésticos de finales de los años 1970, como el Apple II , el TRS-80 y el Commodore PET . [4]

El AGC tiene una longitud de palabra de 16 bits , con 15 bits de datos y un bit de paridad . La mayor parte del software del AGC se almacena en una memoria especial de solo lectura conocida como memoria de núcleo trenzado , creada tejiendo cables a través y alrededor de núcleos magnéticos , aunque hay disponible una pequeña cantidad de memoria de núcleo de lectura/escritura .

Los astronautas se comunicaban con el AGC mediante una pantalla numérica y un teclado llamado DSKY (por "display and keyboard", que se pronuncia "DIS-kee"). El AGC y su interfaz de usuario DSKY fueron desarrollados a principios de los años 1960 para el programa Apolo por el Laboratorio de Instrumentación del MIT y volaron por primera vez en 1966. [5]

Operación

Los astronautas volaron manualmente el Proyecto Gemini con palancas de control , pero las computadoras volaron la mayor parte del Proyecto Apolo, excepto brevemente durante los aterrizajes lunares. [6] Cada vuelo a la Luna llevaba dos AGC, uno en el módulo de comando y el módulo lunar Apolo , con la excepción del Apolo 7 , que era una misión en órbita terrestre, y el Apolo 8 , que no necesitaba un módulo lunar para su misión en órbita lunar. El AGC en el módulo de comando era el centro de su sistema de guía, navegación y control (GNC). El AGC en el módulo lunar ejecutaba su PGNCS (sistema primario de guía, navegación y control) Apolo , con el acrónimo pronunciado como pings .

La interfaz de pantalla y teclado (DSKY) de la computadora de guía Apollo montada en el panel de control del módulo de comando, con el indicador de actitud del director de vuelo (FDAI) encima
Lista parcial de códigos numéricos para verbos y sustantivos en la computadora de guía Apollo, impresa para referencia rápida en un panel lateral

Cada misión lunar tenía dos computadoras adicionales:

Diseño

Fotografía del chip de doble compuerta NOR utilizado para construir la computadora de guía Apollo Block II. Conexiones (en el sentido de las agujas del reloj desde el centro superior): tierra, entradas (3), salida, alimentación, salida, entradas (3).
Esquema de puerta NOR dual de 3 entradas AGC
Circuitos integrados de silicio en paquetes planos soldados a la PCB en el ordenador de guía Apollo

El AGC fue diseñado en el Laboratorio de Instrumentación del MIT bajo la dirección de Charles Stark Draper , con el diseño de hardware dirigido por Eldon C. Hall . [2] Los primeros trabajos de arquitectura vinieron de JH Laning Jr. , Albert Hopkins , Richard Battin , Ramon Alonso, [7] [8] y Hugh Blair-Smith. [9] El hardware de vuelo fue fabricado por Raytheon , cuyo Herb Thaler [10] también estaba en el equipo de arquitectura.

Según Kurinec et al., los chips se soldaron a las placas en lugar de soldarse como podría esperarse. [11] Los dibujos del módulo lógico de la computadora de guía Apollo especifican soldadura por resistencia. [12] [13]

Hardware lógico

Tras el uso de chips de circuitos integrados (CI) en la Plataforma de Monitoreo Interplanetario (IMP) en 1963, la tecnología de CI se adoptó posteriormente para el AGC. [14] La computadora de vuelo Apolo fue la primera computadora en utilizar chips de CI de silicio . [15]

Mientras que la versión Block I utilizaba 4.100 circuitos integrados, cada uno de los cuales contenía una única compuerta NOR de tres entradas , la versión Block II posterior (utilizada en los vuelos tripulados) utilizaba unos 2.800 circuitos integrados, en su mayoría compuertas NOR duales de tres entradas y un número menor de expansores y amplificadores de detección. [16] : 27, 266  Los circuitos integrados, de Fairchild Semiconductor , se implementaron utilizando lógica de resistencia-transistor (RTL) en un paquete plano . Se conectaron mediante envoltura de cable y luego el cableado se incrustó en plástico epoxi fundido . [16] : 129 

El uso de un único tipo de CI (el NOR3 dual) en todo el AGC evitó los problemas que plagaron otro diseño temprano de computadora con CI, la computadora de guía Minuteman II , que usaba una mezcla de lógica de diodo-transistor y puertas lógicas de diodo . [ cita requerida ] Las puertas NOR son puertas lógicas universales a partir de las cuales se puede hacer cualquier otra puerta, aunque al costo de usar más puertas. [17]

Memoria

La computadora tenía 2.048 palabras de memoria de núcleo magnético borrable y 36.864 palabras de memoria de núcleo magnético de solo lectura . [16] : 27, 90–93  Ambos tenían tiempos de ciclo de 11,72 microsegundos. [16] : 27  La longitud de palabra de memoria era de 16 bits: 15 bits de datos y un bit de paridad impar . El formato de palabra de 16 bits interno de la CPU era de 14 bits de datos, un bit de desbordamiento y un bit de signo ( representación de complemento a uno ). [16] : 35–37 

Interfaz DSKY

Unidad de interfaz de usuario DSKY de la computadora Apollo
Diagrama de interfaz LM DSKY

La interfaz de usuario del AGC era DSKY , que significa pantalla y teclado y que normalmente se pronuncia "DIS-kee". Tiene una serie de luces indicadoras, pantallas numéricas y un teclado estilo calculadora . Los comandos se ingresaban numéricamente, como números de dos dígitos: Verbo y Sustantivo . Verbo describía el tipo de acción que se debía realizar y Sustantivo especificaba qué datos se veían afectados por la acción especificada por el comando Verbo.

Cada dígito se mostraba a través de una pantalla electroluminiscente de siete segmentos de alto voltaje (especificada como 530 nm [18] ) ; estos eran accionados por relés electromecánicos , lo que limitaba la tasa de actualización. También se podían mostrar tres números con signo de cinco dígitos en octal o decimal , y generalmente se usaban para mostrar vectores como la actitud de la nave espacial o un cambio de velocidad requerido ( delta-V ). Aunque los datos se almacenaban internamente en unidades métricas , se mostraban como unidades habituales de los Estados Unidos . Esta interfaz de estilo calculadora fue la primera de su tipo.

El módulo de mando tiene dos DSKY conectados a su AGC: uno situado en el panel de instrumentos principal y un segundo situado en el compartimento de equipamiento inferior, cerca de un sextante utilizado para alinear la plataforma de guía inercial . El módulo lunar tenía un solo DSKY para su AGC. Un indicador de actitud del director de vuelo (FDAI), controlado por el AGC, estaba situado encima del DSKY en la consola del comandante y en el LM.

Momento

La referencia de tiempo del AGC provenía de un reloj de cristal de 2,048 MHz . El reloj se dividió por dos para producir un reloj de cuatro fases de 1,024 MHz que el AGC utilizó para realizar operaciones internas. El reloj de 1,024 MHz también se dividió por dos para producir una señal de 512 kHz llamada frecuencia maestra ; esta señal se utilizó para sincronizar los sistemas externos de la nave espacial Apolo.

La frecuencia maestra se dividió a su vez mediante un escalador , primero por cinco utilizando un contador de anillo para producir una señal de 102,4 kHz. Luego, esta se dividió por dos a través de 17 etapas sucesivas llamadas F1 (51,2 kHz) a F17 (0,78125 Hz). La etapa F10 (100 Hz) se realimentó al AGC para incrementar el reloj de tiempo real y otros contadores involuntarios utilizando Pinc (que se analiza a continuación). La etapa F17 se utilizó para ejecutar de forma intermitente el AGC cuando estaba funcionando en modo de espera .

Registros centrales

El AGC tenía cuatro registros de 16 bits para uso computacional general, llamados registros centrales :

También había cuatro ubicaciones en la memoria central, en las direcciones 20 a 23, denominadas ubicaciones de edición porque todo lo que se almacenaba allí salía desplazado o rotado una posición de bit, excepto una que se desplazaba siete posiciones de bit a la derecha, para extraer uno de los códigos operacionales interpretativos de siete bits que se empaquetaban de a dos por palabra. Esto era común a los AGC del bloque I y del bloque II.

Otros registros

Prototipos de DSKY y AGC en exposición en el Museo de Historia de la Computación . El AGC está abierto y se ven sus módulos lógicos.
Módulo lógico prototipo del Bloque I AGC
Módulo lógico de bloque II, con circuitos integrados de paquete plano

La AGC contaba con registros adicionales que se utilizaban internamente en el curso de su funcionamiento:

Conjunto de instrucciones

El formato de instrucción utilizaba 3 bits para el código de operación y 12 bits para la dirección. El bloque I tenía 11 instrucciones: TC, CCS, INDEX, XCH, CS, TS, AD, y MASK(básicas), y SU, MPy DV(extra). Las primeras ocho, llamadas instrucciones básicas , eran accedidas directamente por el código de operación de 3 bits. Las tres últimas se denominaban instrucciones de código extra porque se accedía a ellas ejecutando un tipo especial de TCinstrucción (llamada EXTEND) inmediatamente antes de la instrucción.

Las instrucciones del AGC del Bloque I consistieron en lo siguiente:

TC(control de transferencia)
Una bifurcación incondicional a la dirección especificada por la instrucción. La dirección de retorno se almacenaba automáticamente en el registro Q, por lo que la TCinstrucción podía utilizarse para llamadas a subrutinas.
CCS(contar, comparar y saltar)
Una instrucción de bifurcación condicional compleja. El registro A se cargó con datos recuperados de la dirección especificada por la instrucción. (Debido a que el AGC utiliza la notación de complemento a uno , hay dos representaciones de cero. Cuando todos los bits se establecen en cero, esto se llama más cero . Si todos los bits se establecen en uno, esto se llama menos cero ). Luego, el valor absoluto disminuido (DABS) de los datos se calculó y almacenó en el registro A. Si el número era mayor que cero, el DABS decrementa el valor en 1; si el número era negativo, se complementa antes de que se aplique el decremento; este es el valor absoluto. Disminuido significa "decrementado pero no por debajo de cero". Por lo tanto, cuando el AGC realiza la función DABS, los números positivos se dirigirán hacia más cero, y lo mismo harán los números negativos, pero primero revelando su negatividad a través del salto de cuatro vías a continuación. El paso final CCSes un salto de cuatro vías, dependiendo de los datos en el registro A antes del DABS. Si el registro A era mayor que 0, CCSsalta a la primera instrucción inmediatamente después de CCS. Si el registro A contenía más cero, CCSsalta a la segunda instrucción después de CCS. Menos que cero hace que se salte a la tercera instrucción después de CCS, y menos cero salta a la cuarta instrucción después de CCS. El propósito principal del conteo era permitir que un bucle ordinario, controlado por un contador positivo, terminara en a CCSy a TCal principio del bucle, equivalente a un IBM 360. La BCTfunción de valor absoluto se consideró lo suficientemente importante como para ser incorporada en esta instrucción; cuando se usaba solo para este propósito, la secuencia después de la CCSera TC*+2, TC*+2, ADUNO. Un efecto secundario curioso fue la creación y el uso de CCSagujeros cuando se sabía que el valor que se estaba probando nunca era positivo, lo que ocurrió con más frecuencia de lo que uno podría suponer. Eso dejó dos palabras completas desocupadas, y un comité especial fue responsable de asignar constantes de datos a estos agujeros.
INDEX
Añade los datos recuperados en la dirección especificada por la instrucción a la siguiente instrucción. INDEXse puede utilizar para sumar o restar un valor de índice a la dirección base especificada por el operando de la instrucción que sigue INDEX. Este método se utiliza para implementar matrices y búsquedas en tablas; dado que la adición se realizó en ambas palabras completas, también se utilizó para modificar el código de operación en una instrucción siguiente (código adicional) y, en raras ocasiones, ambas funciones a la vez.
RESUME
Una instancia especial de INDEX( INDEX25). Esta es la instrucción que se utiliza para regresar de las interrupciones. Hace que la ejecución se reanude en la ubicación interrumpida.
XCH(intercambio)
Intercambia el contenido de la memoria con el contenido del registro A. Si la dirección de memoria especificada está en la memoria fija (de solo lectura), el contenido de la memoria no se ve afectado y esta instrucción simplemente carga el registro A. Si está en la memoria borrable, la "corrección" del desbordamiento se logra almacenando el bit más a la izquierda de los 16 bits en A como el bit de signo en la memoria, pero no hay un comportamiento excepcional como el de TS.
CS(limpiar y restar)
Cargue el registro A con el complemento de unos de los datos referenciados por la dirección de memoria especificada.
TS(transferencia a almacenamiento)
Almacena el registro A en la dirección de memoria especificada. TSTambién detecta y corrige desbordamientos de tal manera que propaga un acarreo para suma/resta de precisión múltiple. Si el resultado no tiene desbordamiento (los 2 bits más a la izquierda de A son iguales), no sucede nada especial; si hay desbordamiento (esos 2 bits difieren), el más a la izquierda va a la memoria como bit de signo, el registro A se cambia a +1 o −1 según corresponda y el control salta a la segunda instrucción después de TS. Siempre que el desbordamiento es un evento posible pero anormal, el TSfue seguido por un TCpara la lógica de no desbordamiento; cuando es una posibilidad normal (como en la suma/resta de precisión múltiple), el TSes seguido por CAFCERO ( CAF= XCHa memoria fija) para completar la formación del acarreo (+1, 0 o −1) en la siguiente palabra de mayor precisión. Los ángulos se mantuvieron en precisión simple , las distancias y velocidades en precisión doble y el tiempo transcurrido en precisión triple.
AD(agregar)
Agregue el contenido de la memoria al registro A y almacene el resultado en A. Los 2 bits más a la izquierda de A pueden ser diferentes (estado de desbordamiento) antes y/o después de AD. El hecho de que el desbordamiento sea un estado en lugar de un evento perdona extensiones limitadas de desbordamiento cuando se suman más de dos números, siempre que ninguno de los totales intermedios exceda el doble de la capacidad de una palabra.
MASK
Realice una operación bit a bit (booleana) y de memoria con el registro A y almacene el resultado en el registro A.
MP(multiplicar)
Multiplicar el contenido del registro A por los datos de la dirección de memoria referenciada y almacenar el producto de orden superior en el registro A y el producto de orden inferior en el registro LP. Las partes del producto concuerdan en signo.
DV(dividir)
Divide el contenido del registro A por los datos en la dirección de memoria referenciada. Almacena el cociente en el registro A y el valor absoluto del resto en el registro Q. A diferencia de las máquinas modernas, los números de punto fijo se trataban como fracciones (el punto decimal teórico estaba justo a la derecha del bit de signo), por lo que se podía producir basura si el divisor no era mayor que el dividendo; no había protección contra esa situación. En el AGC del Bloque II, un dividendo de doble precisión comenzaba en A y L (el LP del Bloque II), y el resto con el signo correcto se entregaba en L. Eso simplificó considerablemente la subrutina para la división de doble precisión.
SU(sustraer)
Restar (complemento a uno) los datos en la dirección de memoria referenciada del contenido del registro A y almacenar el resultado en A.

Las instrucciones se implementaban en grupos de 12 pasos, llamados pulsos de temporización . Los pulsos de temporización se denominaban TP1 a TP12. Cada conjunto de 12 pulsos de temporización se denominaba subsecuencia de instrucción . Las instrucciones simples, como TC, se ejecutaban en una sola subsecuencia de 12 pulsos. Las instrucciones más complejas requerían varias subsecuencias. La instrucción de multiplicación ( MP) utilizaba 8 subsecuencias: una inicial llamada MP0, seguida de una MP1subsecuencia que se repetía 6 veces y, a continuación, terminaba con una MP3subsecuencia. Esto se redujo a 3 subsecuencias en el Bloque II.

Cada pulso de temporización en una subsecuencia podía activar hasta 5 pulsos de control . Los pulsos de control eran las señales que realizaban el trabajo real de la instrucción, como leer el contenido de un registro en el bus o escribir datos del bus en un registro.

Memoria

Memoria de núcleo de cuerda AGC (ROM)

La memoria AGC del bloque I se organizó en bancos de 1 kilopalabra. El banco más bajo (banco 0) era de memoria borrable (RAM). Todos los bancos por encima del banco 0 eran de memoria fija (ROM). Cada instrucción AGC tenía un campo de dirección de 12 bits. Los bits inferiores (1-10) direccionaban la memoria dentro de cada banco. Los bits 11 y 12 seleccionaban el banco: 00 seleccionaba el banco de memoria borrable; 01 seleccionaba el banco más bajo (banco 1) de memoria fija; 10 seleccionaba el siguiente (banco 2); y 11 seleccionaba el registro de banco que podía usarse para seleccionar cualquier banco por encima del 2. Los bancos 1 y 2 se llamaban memoria fija-fija , porque siempre estaban disponibles, independientemente del contenido del registro de banco. Los bancos 3 y superiores se llamaban fijos-conmutables porque el banco seleccionado estaba determinado por el registro de banco.

El bloque I AGC inicialmente tenía 12 kilopalabras de memoria fija, pero luego se amplió a 24 kilopalabras. El bloque II tenía 36 kilopalabras de memoria fija y 2 kilopalabras de memoria borrable.

El AGC transfirió datos hacia y desde la memoria a través del registro G en un proceso llamado ciclo de memoria . El ciclo de memoria tomó 12 pulsos de temporización (11,72 μs). El ciclo comenzó en el pulso de temporización 1 (TP1) cuando el AGC cargó la dirección de memoria que se buscaría en el registro S. El hardware de memoria recuperó la palabra de datos de la memoria en la dirección especificada por el registro S. Las palabras de la memoria borrable se depositaron en el registro G mediante el pulso de temporización 6 (TP6); las palabras de la memoria fija estuvieron disponibles mediante el pulso de temporización 7. La palabra de memoria recuperada estuvo entonces disponible en el registro G para el acceso del AGC durante los pulsos de temporización 7 a 10. Después del pulso de temporización 10, los datos en el registro G se volvieron a escribir en la memoria.

El ciclo de memoria del AGC se produjo de forma continua durante la operación del AGC. Las instrucciones que necesitaban datos de la memoria tenían que acceder a ellos durante los pulsos de temporización 7 a 10. Si el AGC cambiaba la palabra de memoria en el registro G, la palabra modificada se escribía de nuevo en la memoria después del pulso de temporización 10. De esta forma, las palabras de datos circulaban continuamente de la memoria al registro G y luego de nuevo a la memoria.

Los 15 bits inferiores de cada palabra de memoria contenían instrucciones o datos de AGC, y cada palabra estaba protegida por un decimosexto bit de paridad impar. Este bit se establecía en 1 o 0 mediante un circuito generador de paridad, de modo que un recuento de los 1 en cada palabra de memoria siempre produjera un número impar. Un circuito de verificación de paridad probaba el bit de paridad durante cada ciclo de memoria; si el bit no coincidía con el valor esperado, se asumía que la palabra de memoria estaba dañada y se encendía una luz de alarma de paridad en el panel.

Interrupciones y contraataques involuntarios

El AGC tenía cinco interrupciones vectoriales :

El AGC respondió a cada interrupción suspendiendo temporalmente el programa actual, ejecutando una breve rutina de servicio de interrupción y luego reanudando el programa interrumpido.

El AGC también tenía 20 contadores involuntarios . Se trataba de posiciones de memoria que funcionaban como contadores ascendentes o descendentes, o registros de desplazamiento. Los contadores se incrementaban, decrementaban o desplazaban en respuesta a las entradas internas. El incremento ( Pinc ), decremento ( Minc ) o desplazamiento ( Shinc ) se gestionaba mediante una subsecuencia de microinstrucciones insertadas entre dos instrucciones regulares cualesquiera.

Las interrupciones se podían activar cuando los contadores se desbordaban. Las interrupciones T3rupt y Dsrupt se producían cuando sus contadores, controlados por un reloj de hardware de 100 Hz, se desbordaban después de ejecutar muchas subsecuencias Pinc. La interrupción Uprupt se activaba después de que su contador, al ejecutar la subsecuencia Shinc, hubiera desplazado 16 bits de datos de enlace ascendente al AGC.

Modo de espera

El AGC tenía un modo de ahorro de energía controlado por un interruptor de modo de espera permitido . Este modo apagaba la alimentación del AGC, excepto el reloj de 2,048 MHz y el escalador. La señal F17 del escalador encendía la alimentación del AGC y lo encendía nuevamente en intervalos de 1,28 segundos. En este modo, el AGC realizaba funciones esenciales, verificaba el interruptor de modo de espera permitido y, si aún estaba habilitado, apagaba la alimentación y volvía a dormir hasta la siguiente señal F17.

En el modo de espera, el AGC dormía la mayor parte del tiempo; por lo tanto, no estaba activo para ejecutar la instrucción Pinc necesaria para actualizar el reloj de tiempo real del AGC a intervalos de 10 ms. Para compensar, una de las funciones que realizaba el AGC cada vez que se activaba en el modo de espera era actualizar el reloj de tiempo real en 1,28 segundos.

El modo de espera fue diseñado para reducir la potencia entre 5 y 10 W (de 70 W) durante el vuelo a mitad de camino, cuando no se necesitaba el AGC. Sin embargo, en la práctica, el AGC se dejó encendido durante todas las fases de la misión y esta función nunca se utilizó.

Buses de datos

El AGC tenía un bus de lectura de 16 bits y un bus de escritura de 16 bits. Los datos de los registros centrales (A, Q, Z o LP) u otros registros internos podían enviarse al bus de lectura con una señal de control. El bus de lectura se conectaba al bus de escritura a través de un búfer no inversor, por lo que cualquier dato que apareciera en el bus de lectura también aparecía en el bus de escritura. Otras señales de control podían copiar los datos del bus de escritura de nuevo a los registros.

Las transferencias de datos funcionaban de la siguiente manera: para mover la dirección de la siguiente instrucción del registro B al registro S, se emitía una señal de control RB (lectura B); esto hacía que la dirección se moviera del registro B al bus de lectura y luego al bus de escritura. Una señal de control WS (escritura S) movía la dirección del bus de escritura al registro S.

Se podían leer varios registros en el bus de lectura simultáneamente. Cuando esto ocurría, los datos de cada registro se introducían en el bus mediante la operación OR inclusiva. Esta función OR inclusiva se utilizaba para implementar la instrucción Mask, que era una operación AND lógica . Debido a que el AGC no tenía la capacidad nativa de realizar una operación AND lógica, pero podía realizar una OR lógica a través del bus y podía complementar (invertir) datos a través del registro C, se utilizó el teorema de De Morgan para implementar el equivalente de una AND lógica . Esto se logró invirtiendo ambos operandos, realizando una OR lógica a través del bus y luego invirtiendo el resultado.

Software

Margaret Hamilton de pie junto a listas del software que ella y su equipo del MIT produjeron para el Proyecto Apolo . [19]

El software AGC se escribió en lenguaje ensamblador AGC y se almacenó en la memoria de la cuerda . La mayor parte del software estaba en la memoria de la cuerda de solo lectura y, por lo tanto, no se podía cambiar durante el funcionamiento, [20] pero algunas partes clave del software se almacenaron en la memoria de núcleo magnético de lectura y escritura estándar y los astronautas podían sobrescribirlas utilizando la interfaz DSKY, como se hizo en el Apolo 14 .

Un sistema operativo simple en tiempo real diseñado por J. Halcombe Laning [21] que consistía en el 'Exec', un programador de trabajos por lotes que utilizaba multitarea cooperativa , [22] y un programador preventivo controlado por interrupciones llamado 'Waitlist' que programaba 'tareas' controladas por temporizadores, controlaba la computadora. Las tareas eran hilos cortos de ejecución que podían reprogramarse para volver a ejecutarse en la lista de espera, o podían iniciar una operación más larga iniciando un 'trabajo' con el Exec. Los cálculos se realizaban utilizando el sistema métrico , pero las lecturas en pantalla estaban en unidades de pies, pies por segundo y millas náuticas, unidades a las que estaban acostumbrados los astronautas del Apolo. [23]

El AGC tenía un sofisticado intérprete de software, desarrollado por el Laboratorio de Instrumentación del MIT , que implementaba una máquina virtual con pseudoinstrucciones más complejas y capaces que el AGC nativo. Estas instrucciones simplificaban los programas de navegación. El código interpretado, que presentaba trigonometría de doble precisión , aritmética escalar y vectorial (16 y 24 bits), incluso una MXVinstrucción (matriz × vector), podía mezclarse con el código AGC nativo. Si bien el tiempo de ejecución de las pseudoinstrucciones se incrementó (debido a la necesidad de interpretar estas instrucciones en tiempo de ejecución), el intérprete proporcionó muchas más instrucciones de las que AGC admitía de forma nativa y los requisitos de memoria eran mucho menores que en el caso de agregar estas instrucciones al lenguaje nativo de AGC, lo que requeriría memoria adicional incorporada en la computadora (en la década de 1960 , la memoria era muy cara). La pseudoinstrucción promedio requería alrededor de 24 ms para ejecutarse. El ensamblador, llamado YUL por un prototipo temprano de Christmas Computer , [24] impuso transiciones adecuadas entre el código nativo y el interpretado.

Un conjunto de rutinas de interfaz de usuario controladas por interrupciones, llamadas "Pinball", proporcionaban servicios de teclado y pantalla para los trabajos y tareas que se ejecutaban en el AGC. Se proporcionaba un conjunto de rutinas accesibles para el usuario que permitían a los astronautas visualizar el contenido de varias ubicaciones de memoria en octal o decimal en grupos de 1, 2 o 3 registros a la vez. Se proporcionaban rutinas de "monitorización" para que el operador pudiera iniciar una tarea para volver a mostrar periódicamente el contenido de ciertas ubicaciones de memoria. Se podían iniciar trabajos.

Los principios de diseño desarrollados para el AGC por el Laboratorio de Instrumentación del MIT , dirigido a fines de la década de 1960 por Charles Draper , se convirtieron en fundamentales para la ingeniería de software , en particular para el diseño de sistemas más confiables que dependían de software asincrónico, programación de prioridades, pruebas y capacidad de decisión humana en el circuito . [25] Cuando se definieron los requisitos de diseño para el AGC, no existían el software y las técnicas de programación necesarios, por lo que tuvieron que diseñarse desde cero. Muchos de los algoritmos de trayectoria y guía utilizados se basaron en trabajos anteriores de Richard Battin . [21] El primer vuelo del módulo de comando fue controlado por un paquete de software llamado CORONA cuyo desarrollo fue dirigido por Alex Kosmala. El software para misiones lunares consistió en COLOSSUS para el módulo de comando, cuyo desarrollo fue dirigido por Frederic Martin, y LUMINARY [26] en el módulo lunar dirigido por George Cherry. Los detalles de estos programas fueron implementados por un equipo bajo la dirección de Margaret Hamilton . [27] Hamilton estaba muy interesado en cómo interactuarían los astronautas con el software y predijo los tipos de errores que podrían ocurrir debido a un error humano. [22] [27] En total, el desarrollo del software en el proyecto comprendió 1400 años-persona de esfuerzo, con una fuerza laboral máxima de 350 personas. [21] En 2016, Hamilton recibió la Medalla Presidencial de la Libertad por su papel en la creación del software de vuelo.

El software de la computadora de guía Apollo influyó en el diseño del Skylab , el transbordador espacial y los primeros sistemas de aviones de combate con control de vuelo por cable. [28] [29]

La computadora de guía Apolo ha sido llamada "El cuarto astronauta" por su papel en ayudar a los tres astronautas que confiaron en ella: Neil Armstrong , Buzz Aldrin y Michael Collins . [30]

Bloque II

En 1966 se diseñó una versión del Bloque II del AGC. Mantuvo la arquitectura básica del Bloque I, pero aumentó la memoria borrable de 1 a 2 kilopalabras. La memoria fija se amplió de 24 a 36 kilopalabras. Las instrucciones se ampliaron de 11 a 34 y se implementaron canales de E/S para reemplazar los registros de E/S del Bloque I. La versión del Bloque II es la que realmente voló a la Luna. El Bloque I se utilizó durante los vuelos no tripulados del Apolo 4 y 6 , y estuvo a bordo del desafortunado Apolo 1 .

La decisión de ampliar la memoria y el conjunto de instrucciones para el Bloque II, pero manteniendo el restrictivo código de operación de tres bits y la dirección de 12 bits del Bloque I tuvo interesantes consecuencias de diseño. Se emplearon varios trucos para incluir instrucciones adicionales, como tener direcciones de memoria especiales que, cuando se hiciera referencia a ellas, implementarían una determinada función. Por ejemplo, una INDEXdirección a 25 activaba la RESUMEinstrucción para regresar de una interrupción. Del mismo modo, INDEX17 realizaba una INHINTinstrucción (inhibir interrupciones), mientras que INDEX16 las rehabilitaba ( RELINT). Otras instrucciones se implementaron precediéndolas con una versión especial de TCllamada EXTEND. Los espacios de direcciones se ampliaron empleando los registros Bank (fijo) y Ebank (borrable), de modo que la única memoria de cada tipo que podía direccionarse en un momento dado era el banco actual, más la pequeña cantidad de memoria fija-fija y la memoria borrable. Además, el registro bank podía direccionar un máximo de 32 kilopalabras, de modo que se requería un registro Sbank (superbanco) para acceder a las últimas 4 kilopalabras. Todas las llamadas a subrutinas entre bancos debían iniciarse desde una memoria fija a través de funciones especiales para restaurar el banco original durante el retorno: esencialmente un sistema de punteros lejanos .

El AGC del Bloque II también tiene la EDRUPTinstrucción (el nombre es una contracción de Ed's Interrupt , en honor a Ed Smally, el programador que la solicitó). Esta instrucción no genera una interrupción, sino que realiza dos acciones que son comunes al procesamiento de interrupciones. La primera acción, inhibe futuras interrupciones (y requiere una RESUMEinstrucción para habilitarlas nuevamente). En la segunda acción, el ZRUPTregistro se carga con el valor actual del contador de programa (Z). Solo se usó una vez en el software Apollo, para configurar la secuencia de terminación del ciclo DAP en el piloto automático digital del módulo lunar . [31] Se cree que es responsable de los problemas para emular el software LEM AGC Luminary.

Alarmas de programa 1201 y 1202

DSKY y Buzz Aldrin en el módulo lunar Eagle del Apolo 11 en camino a la Luna

El PGNCS generó advertencias imprevistas durante el descenso lunar del Apolo 11 , con el AGC mostrando una alarma 1202 ("Desbordamiento ejecutivo - NO CORE SETS"), [32] y luego una alarma 1201 ("Desbordamiento ejecutivo - NO VAC AREAS"). [33] [ cita requerida ] La respuesta del AGC a cualquiera de las alarmas fue un reinicio suave. La causa fue un flujo rápido y constante de robos de ciclos espurios del radar de encuentro (que rastreaba el módulo de comando en órbita), dejado intencionalmente en espera durante el descenso en caso de que fuera necesario para un aborto. [34] [35]

Durante esta parte de la aproximación, el procesador normalmente estaría cargado casi al 85%. Los 6.400 ciclos adicionales por segundo añadieron el equivalente a un 13% de carga, dejando justo el tiempo suficiente para que todas las tareas programadas se completaran. A los cinco minutos de descenso, Buzz Aldrin le dio a la computadora el comando 1668 , que le indicaba que calculara y mostrara periódicamente DELTAH (la diferencia entre la altitud detectada por el radar y la altitud calculada). [nb 1] El 1668 añadió otro 10% a la carga de trabajo del procesador, lo que provocó un desbordamiento ejecutivo y una alarma 1202. Después de recibir el "GO" de Houston, Aldrin volvió a introducir el 1668 y se produjo otra alarma 1202. Al informar de la segunda alarma, Aldrin añadió el comentario "Parece que aparece cuando tenemos un 1668 en ascenso". El software AGC había sido diseñado con programación de prioridades y se recuperaba automáticamente, eliminando las tareas de menor prioridad, incluida la tarea de visualización 1668 , para completar sus tareas críticas de guía y control. El controlador de guía Steve Bales y su equipo de apoyo, que incluía a Jack Garman, emitieron varias llamadas de "GO" y el aterrizaje fue exitoso. [36]

El problema no era un error de programación en el AGC, ni tampoco un error del piloto. Era un error de diseño de hardware periférico que ya había sido conocido y documentado por los ingenieros del Apolo 5. [37] Sin embargo, debido a que el problema sólo había ocurrido una vez durante las pruebas, concluyeron que era más seguro volar con el hardware existente que ya habían probado, que volar con un sistema de radar más nuevo pero en gran parte no probado. En el hardware real, la posición del radar de encuentro estaba codificada con sincros excitados por una fuente diferente de 800 Hz CA que la utilizada por la computadora como referencia de tiempo. Las dos fuentes de 800 Hz estaban sincronizadas en frecuencia pero no en fase, y las pequeñas variaciones aleatorias de fase hicieron que pareciera como si la antena estuviera "oscilando" rápidamente en posición, a pesar de que estaba completamente estacionaria. Estos movimientos fantasmas generaron la rápida serie de robos de ciclo.

El software y el diseño informático de J. Halcombe Laning salvaron la misión de aterrizaje del Apolo 11. De no haber sido por el diseño de Laning, el aterrizaje se habría abortado por falta de un ordenador de guía estable. [37] [38]

Aplicaciones fuera de Apollo

Avión de pruebas Fly By Wire. El AGC DSKY es visible en el compartimento de aviónica

El AGC formó la base de un sistema experimental fly-by-wire (FBW) instalado en un F-8 Crusader para demostrar la viabilidad del FBW controlado por computadora. El AGC utilizado en la primera fase del programa fue reemplazado por otra máquina en la segunda fase, y la investigación realizada en el programa condujo al desarrollo de sistemas fly-by-wire para el transbordador espacial . El AGC también condujo, aunque indirectamente, al desarrollo de sistemas fly-by-wire para la generación de cazas que se estaban desarrollando en ese momento. [39]

Publicación del código fuente

En 2003, Ron Burkey inició un esfuerzo para recuperar el código fuente que alimentaba el AGC y construir un emulador capaz de ejecutarlo, el VirtualAGC. [40] [41] Parte de la gran cantidad de código fuente rescatado como resultado de este esfuerzo fue subido por un ex pasante de la NASA a GitHub el 7 de julio de 2016, atrayendo una importante atención de los medios. [42] [43] El código fuente original de la computadora de guía del Apolo 11 se hizo accesible originalmente en 2003 [44] por el Proyecto Virtual AGC y el Museo del MIT . [45] Fue transcrito y digitalizado a partir de los listados de código fuente originales en papel que se hicieron en los años 60. A mediados de 2016, el ex pasante de la NASA Chris Garry subió el código fuente de AGC a GitHub . [46] [47]

Véase también

Notas

  1. ^ Más específicamente, el verbo 16 le indica al AGC que imprima el sustantivo (en este caso, 68, DELTAH) aproximadamente dos veces por segundo. Si Aldrin hubiera sabido esto, un simple 0668 (calcular y mostrar DELTAH, una vez) solo habría agregado aproximadamente un 5% de carga al sistema, y ​​solo lo habría hecho una vez, cuando se presionó ENTER.

Referencias

  1. ^ Manual del programador, Bloque 2 Lenguaje ensamblador AGC , consultado el 27 de agosto de 2018
  2. ^ ab Hall, Eldon C. (1996), Viaje a la Luna: La historia de la computadora de guía Apolo , Reston, Virginia, EE. UU.: AIAA , pág. 196, ISBN 1-56347-185-X
  3. ^ Interbartolo, Michael (enero de 2009). "Descripción general del hardware de control, navegación y guía del Apolo" (PDF) .
  4. ^ "¿Cómo lograron los ordenadores del vuelo Apolo llevar al hombre a la Luna y traerlo de regreso?". 11 de marzo de 2017.
  5. ^ James E. Tomayko (1988). "El ordenador de guía del Apolo: hardware". Ordenadores en los vuelos espaciales: la experiencia de la NASA . NASA. Archivado desde el original el 29 de diciembre de 2023.
  6. ^ Agle, DC (septiembre de 1998). "Flying the Gusmobile". Air & Space . Consultado el 15 de diciembre de 2018 .
  7. ^ "Introducción de Ramón Alonso", AGC History Project (archivo Caltech, sitio original cerrado) , MIT, 27 de julio de 2001 , consultado el 30 de agosto de 2009
  8. "Entrevista a Ramon Alonso (español)", Ramón Alonso, el argentino que llevó a la Apollo 11 a la Luna , Diario La Nacion, 7 de marzo de 2010
  9. ^ "Biografía de Hugh Blair-Smith", AGC History Project (archivo de Caltech, sitio original cerrado) , MIT, enero de 2002 , consultado el 30 de agosto de 2009
  10. ^ "Introducción a Herb Thaler", AGC History Project (archivo Caltech, sitio original cerrado) , MIT, 14 de septiembre de 2001 , consultado el 30 de agosto de 2009
  11. ^ Kurinec, Santosh K; Indovina, Mark; McNulty, Karl; Seitz, Matthew (2021). "Recreando la historia: Fabricando el chip que fue a la Luna en 1969 en el Apolo 11" (PDF) . Instituto Tecnológico de Rochester . p. 9 . Consultado el 29 de agosto de 2023 .
  12. ^ "CONJUNTO DE MÓDULO LÓGICO N.º A1-A16". MIT Instrumentation Lab. 11 de julio de 1963. pág. Hoja 1 de 2, Nota 2.
  13. ^ "Requisitos de Apollo para el control de procesos y la fabricación de módulos y conjuntos de circuitos electrónicos soldados por resistencia". Archive.org . NASA. 22 de mayo de 1963 . Consultado el 19 de febrero de 2024 .
  14. ^ Butrica, Andrew J. (2015). "Capítulo 3: El papel de la NASA en la fabricación de circuitos integrados". En Dick, Steven J. (ed.). Estudios históricos sobre el impacto social de los vuelos espaciales (PDF) . NASA . págs. 149–250. ISBN. 978-1-62683-027-1.
  15. ^ "Computadora de guía Apollo y los primeros chips de silicio". Museo Nacional del Aire y el Espacio . Instituto Smithsoniano . 14 de octubre de 2015 . Consultado el 1 de septiembre de 2019 .
  16. ^ abcde Hall, Eldon C. (1972). El papel del MIT en el Proyecto Apolo: informe final sobre los contratos NAS 9-163 y NAS 94065 (PDF) . Cambridge, MA: MIT . Consultado el 15 de junio de 2021 .
  17. ^ Peirce, CS (manuscrito de invierno de 1880-81), "A Boolian Algebra with One Constant", publicado en 1933 en Collected Papers v. 4, párrafos 12-20. Reimpreso en 1989 en Writings of Charles S. Peirce v. 4, pp. 218-21, Google [1]. Véase Roberts, Don D. (2009), The Existential Graphs of Charles S. Peirce , p. 131.
  18. ^ "Reiluminación del panel del Apollo DSKY: la historia completa". YouTube . 27 de julio de 2021.
  19. ^ Weinstock, Maia (17 de agosto de 2016). «Escena en el MIT: el código Apollo de Margaret Hamilton». MIT News . Consultado el 17 de agosto de 2016 .
  20. ^ Mindell 2008, págs. 154, 157.
  21. ^ abc Hoag, David (septiembre de 1976). "La historia de la guía, navegación y control a bordo del programa Apolo" (PDF) . Laboratorio Charles Stark Draper.
  22. ^ desde Mindell 2008, pág. 149.
  23. ^ "Los alunizajes". Asociación Métrica del Reino Unido. 18 de octubre de 2018.
  24. ^ "Introducción de Hugh Blair-Smith", AGC History Project (archivo de Caltech, sitio original cerrado) , MIT, 30 de noviembre de 2001 , consultado el 21 de marzo de 2010
  25. ^ "La NASA rinde homenaje a un ingeniero del programa Apolo" (Comunicado de prensa). 3 de septiembre de 2003.
  26. ^ "Página de luminarias virtuales de AGC".
  27. ^ ab Harvey IV, Harry Gould (13 de octubre de 2015). "Su código llevó a los humanos a la Luna y inventó el software". WIRED . Consultado el 25 de noviembre de 2018 .
  28. ^ "Acerca de Margaret Hamilton". Oficina de Diseño Lógico de la NASA. 3 de febrero de 2010.
  29. ^ AJS Rayl. "Ingenieros y científicos de la NASA: transformando los sueños en realidad". Archivado desde el original el 16 de mayo de 2016.
  30. ^ Fong, Kevin (2019). "13 minutos hasta la luna: Episodio 5 El cuarto astronauta". bbc.co.uk . BBC World Service .
  31. ^ O'Brien, Frank (25 de junio de 2010). La computadora de guía Apollo: arquitectura y funcionamiento. Springer Science & Business Media. ISBN 978-1-4419-0877-3.
  32. ^ Collins, Michael; Aldrin, Edwin (1975), Cortright, Edgar M. (ed.), "Una luz amarilla de precaución", NASA SP-350, Expediciones Apolo a la Luna , Washington, DC: NASA, págs. Capítulo 11.4, ISBN 978-0486471754, consultado el 30 de agosto de 2009
  33. ^ "chrislgarry/Apollo-11". GitHub . Consultado el 17 de julio de 2016 .
  34. ^ Adler, Peter (1998), Jones, Eric M. (ed.), "Alarmas del programa Apollo 11", Apollo 11 Lunar Surface Journal , NASA , consultado el 1 de septiembre de 2009
  35. ^ Martin, Fred H. (julio de 1994), Jones, Eric M. (ed.), "Apollo 11: 25 Years Later", Apollo 11 Lunar Surface Journal , NASA , consultado el 1 de septiembre de 2009
  36. ^ Cortright, Edgar M., ed. (1975), "The Lunar Module Computer", Apollo 11 Lunar Surface Journal , NASA , consultado el 4 de febrero de 2010
  37. ^ ab Eyles, Don (6 de febrero de 2004), "Cuentos de la computadora de guía del módulo lunar", 27.ª conferencia anual sobre guía y control , Breckenridge, Colorado: Sociedad Astronáutica Estadounidense
  38. ^ Witt, Stephen (24 de junio de 2019). «Apollo 11: Mission Out of Control». Wired . San Francisco: Condé Nast Publications . Consultado el 18 de septiembre de 2019 .
  39. ^ Tomayko, James E. (2000), "NASA SP-2000-4224 — Las computadoras toman vuelo: una historia del proyecto pionero de vuelo por cable digital de la NASA" (PDF) , The NASA History Series , Washington, DC: NASA , consultado el 1 de septiembre de 2009
  40. ^ Burkey, Ron. "VirtualAGC". iBiblio . Consultado el 10 de abril de 2021 .
  41. ^ "Colección de código fuente de AGC en Github, mantenida por iBiblio". GitHub . Archivado desde el original el 7 de mayo de 2021.URL alternativa
  42. ^ Collins, Keith (9 de julio de 2016). "El código que llevó a Estados Unidos a la Luna acaba de publicarse en GitHub y es como una cápsula del tiempo de los años 60". Quartz . Consultado el 19 de agosto de 2016 .
  43. ^ Garry, Chris. "Código fuente original del ordenador de guía (AGC) del Apolo 11 para los módulos lunares y de mando". GitHub . Archivado desde el original el 12 de abril de 2021.URL alternativa
  44. ^ "Archivado y referencia del código fuente de Apollo". www.softwareheritage.org . Consultado el 9 de septiembre de 2021 .
  45. ^ "Página de inicio virtual de AGC". ibiblio.org . Consultado el 9 de septiembre de 2021 .
  46. ^ "GitHub - chrislgarry/Apollo-11: Código fuente original del ordenador de guía (AGC) del Apolo 11 para los módulos lunar y de mando". GitHub . Consultado el 9 de septiembre de 2021 .
  47. ^ "El código fuente del Apolo 11 ya está en GitHub". Engadget . 10 de julio de 2016 . Consultado el 9 de septiembre de 2021 .

Fuentes

Enlaces externos

Documentación sobre el AGC y su desarrollo
Documentación del diseño del hardware de AGC y, en particular, del uso de los nuevos circuitos integrados en lugar de transistores.
Documentación del funcionamiento del software AGC
Algunos proyectos y simuladores basados ​​en AGC

Historias destacadas