Ir al contenido
Menú principal
Menú principal
mover a la barra lateral
ocultar
Navegación
Página principal
Cambios recientes
Página aleatoria
Ayuda sobre MediaWiki
Buscar
Buscar
español
Apariencia
Crear una cuenta
Acceder
Herramientas personales
No has accedido
Discusión
Contribuciones
Crear una cuenta
Acceder
Edición de «
Apollo Guidance Computer
»
Página
Discusión
español
Leer
Editar
Editar código
Ver historial
Herramientas
Herramientas
mover a la barra lateral
ocultar
Acciones
Leer
Editar
Editar código
Ver historial
General
Lo que enlaza aquí
Cambios relacionados
Información de la página
Apariencia
mover a la barra lateral
ocultar
Advertencia:
no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si
inicias sesión
o
creas una cuenta
, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.
Comprobación antispam. ¡
No
rellenes esto!
{{Ficha de hardware | nombre = Apollo Guidance Computer | imagen = Agc view.jpg |piedeimagen=Apollo Guidance Computer and DSKY | invent-date = |desarrollador=[[MIT Instrumentation Laboratory]] | manuf1 = [[Raytheon]] |lanzamiento=Agosto de 1966 |descontinuación=Julio de 1975 | number_built = 75 |tipo=Aviación<br />Ordenador de guiado |procesador=Basado en lógica [[Resistor-transistor logic|RTL]] de CI discretos |frecuencia=2,048 MHz |memoria=palabras de [[16-bit]]s,<br />2048 palabras [[Memoria de acceso aleatorio|RAM]] ([[memoria de núcleos magnéticos]]), 36864 palabras de [[Read-only memory|ROM]] ([[memoria de núcleos cableados]]) |puertos=DSKY, IMU, Controlador manual, Radar de rendezvous (CM), Radar de aterrizaje (LM), Receptor de telemetría, Controlador del Motor, ''Reaction Control System'' |alimentación=55 W<ref name="Hall-1996" />{{rp|120}} |peso=31,8 kg |dimensiones=61x32x17 cm }} 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 Servicio de Apolo|módulo de mando]] y del [[módulo lunar]].<ref>[http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/20090016290_2009014409.pdf Apollo Guidance, Navigation and Control Hardware Overview]</ref> Este ordenador destaca por haber sido uno de los primeros computadores basados en [[Circuito integrado|circuitos integrados]]. El AGC y su [[interfaz de usuario|interfaz]] DSKY se desarrollaron a principios de los 1960 por el [[MIT Instrumentation Laboratory]] para el programa Apolo. [[Archivo:Dsky.jpg|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.]] [[Archivo:Agc verb-noun-list.jpg|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.]] [[Archivo:Agc flatp.jpg|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 Servicio de Apolo|módulo de mando]] y otro en el [[módulo lunar]]. El AGC del módulo de mando estaba situado en el centro del [[Guiado navegacion y control|sistema de navegación y orientación]] (GNC). El del módulo lunar llevaba su propio [[Apollo PGNCS|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 [[Launch Vehicle Digital Computer|computador digital del lanzador (LVDC)]], situado en el anillo de instrumentación del cohete [[Saturno V]]. * El [[Abort Guidance System|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]]:<ref>{{cita web|autor1=Lewin Day|título=SUPERCON 2023: RESTORING THE APOLLO GUIDANCE COMPUTER|url=https://hackaday.com/2024/11/06/supercon-2023-restoring-the-apollo-guidance-computer/|obra=Hackaday|idioma=en|fecha=6 de noviembre de 2024|fechaacceso=20 de febrero de 2025|cita=In the words of NASA engineer Dan Lickly, ‘The AGC did everything.” It was responsible for orienting the spacecraft, controlling rocket burns and guiding the craft into orbit, and for handling the landing of the lunar module as well as re-entry into the Earth’s atmosphere.}}</ref> {{cita|El AGC lo hacía todo.}} == 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.<ref name="Hall-1996">{{Obra citada | first = Eldon C. | last = Hall | author-link = Eldon C. Hall | title = Journey to the Moon: The History of the Apollo Guidance Computer | place = Reston, Virginia, USA | publisher = [[American Institute of Aeronautics and Astronautics|AIAA]] | year = 1996 | page = 196 | doi = | isbn = 156347185X}} </ref> Los primeros [[Arquitectura de computadoras|trabajos sobre la arquitectura]] llegaron de manos de J.H. Laning Jr., [[Albert Hopkins]], Ramón Alonso,<ref name="mithist"> {{Obra citada |url=http://authors.library.caltech.edu/5456/1/hrst.mit.edu/hrs/apollo/public/conference1/alonso-intro.htm |title=Ramon Alonso's introduction |publisher=MIT |date=27 de julio de 2001 |work=AGC History Project (Caltech archive, original site closed) |author= |accessdate=30 de agosto de 2009}} </ref><ref name="ray_alonso_interview"> {{Obra citada |url=https://www.lanacion.com.ar/sociedad/ramon-alonso-el-argentino-que-llevo-a-la-apollo-11-a-la-luna-nid1240769/ |title=Ramon Alonso's interview (Spanish) |publisher=Diario La Nacion |date=7 de marzo de 2010 |work= Ramón Alonso, el argentino que llevó a la Apollo 11 a la Luna }} </ref> y Hugh Blair-Smith.<ref> {{Obra citada |url=http://authors.library.caltech.edu/5456/1/hrst.mit.edu/hrs/apollo/public/people/hblairsmith.htm |title=Hugh Blair-Smith biography |publisher=MIT |date=January, 2002 |work=AGC History Project (Caltech archive, original site closed) |author= |accessdate=30 de agosto de 2009}} </ref> La empresa [[Raytheon]] fabricó el hardware de vuelo, y Herb Thaler<ref> {{Obra citada |url=http://authors.library.caltech.edu/5456/1/hrst.mit.edu/hrs/apollo/public/conference2/thaler-intro.htm |title=Herb Thaler introduction |publisher=MIT |date=14 de septiembre de 2001 |work=AGC History Project (Caltech archive, original site closed) |author= |accessdate=30 de agosto de 2009}} </ref> también estaba en el equipo de diseño. El computador de vuelo del Apolo fue el primero en usar [[circuito integrado|circuitos integrados (CI)]]. Mientras que la versión ''Block I'' usaba 4100 CIs, conteniendo cada uno una sencilla [[Puerta lógica#Puerta OR|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.<ref name="Hall-1996"/>{{rp|34}} Los CIs, de [[Fairchild Semiconductor]], se implementaron usando [[resistor-transistor logic|lógica resistencia-transistor]] (RTL) en un [[flat-pack]]. Fueron conectados mediante [[Wire-wrap|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 [[LGM-30 Minuteman|Minuteman II]], que usaba una mezcla de puertas con [[diode-transistor logic|lógica diodo-transistor]] y otras con [[diode logic|lógica diodo-resistor]]. El computador tenía 2048 palabras de [[memoria de núcleos magnéticos]] volátil y 36 [[prefijo binario|kilopalabras]] de [[memoria de núcleos cableados]] [[Memoria de sólo lectura|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 [[Desbordamiento aritmético|overflow]], y 1 bit de signo (en representación [[complemento a uno]]). === Interfaz DSKY === [[Archivo:Apollo display and keyboard unit (DSKY) used on F-8 DFBW DVIDS683588.jpg|thumb|250px|right|Interfaz de usuario DSKY del computador del Apolo.]] [[Archivo:Apollo DSKY interface.svg|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 [[Visualizador de siete segmentos|visualizadores de siete segmentos]] [[Electroluminiscencia|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 [[rectificador controlado de silicio|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 [[Sistema de numeración decimal|decimal]], y se usaban típicamente para mostrar [[Vector (espacio euclídeo)|vectores]] tales como la [[actitud (navegación)|actitud]] del vehículo espacial o un cambio de velocidad necesario ([[delta-V]]). Aunque los datos se almacenaban internamente en [[Sistema Internacional de Unidades|unidades métricas]], estos se mostraban según el [[sistema anglosajón de unidades]]. Esta interfaz tipo calculadora<ref group="nb">Los 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 [[Módulo de Mando y Servicio de Apolo|CSM]] del Apolo durante el [[proyecto de pruebas Apolo-Soyuz]] en 1975.</ref> 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 [[Sistema de navegación inercial|navegación inercial]]. El módulo lunar tenía una única interfaz DSKY. Unos [[Instrumentos de control (avión)#Indicador de actitud|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 {{Espacio duro|$50 788}} en la subasta pública organizada por [[Heritage Auctions]].<ref>{{Cite web |url=http://historical.ha.com/common/view_item.php?Sale_No=6033&Lot_No=41178 |title=Lot 41178 – Apollo Guidance Computer: Original Display and Keyboard (DSKY) Unit | date=8 de octubre de 2009 }}</ref> === Temporización === El [[Oscilador de cristal|cristal oscilador]] del [[Frecuencia de reloj|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 [[Señal de reloj|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 [[divisor de frecuencia|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 [[Registro (hardware)|registros]] de 16 bits con propósitos computacionales conocidos como los ''registros centrales'': {|border="0" style="margin: 1em auto 1em auto" |- | style="text-align:right;"| '''A''' : | El [[Acumulador (informática)|acumulador]], para uso general |- | style="text-align:right;"| '''Z''' : | El [[contador de programa]] - la dirección de la siguiente instrucción a ser ejecutada |- | style="text-align:right;"| '''Q''' : | El resto de la instrucción <code>DV</code>, y la [[dirección de retorno]] en las instrucciones <code>TC</code> |- | style="text-align:right;"| '''LP''' : | El producto inferior en las instrucciones <code>MP</code> |} 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 === [[Archivo:ApolloGuidanceComputerwithDSKY.agr.jpg|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.]] [[Archivo:AGClogicmodule.agr.jpg|thumb|Prototipo de módulo lógico del Bloque I de AGC.]] [[Archivo:Agc mount.jpg|thumb|Módulo lógico del Bloque II, con integrados flat-pack.]] [[Archivo:Agc nor2.jpg|thumb|Doble puerta NOR del AGC]] [[Archivo:Agc nor2a.jpg|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: {|border="0" |- valign="top" |'''S''' | Registro de 12 bits de dirección de memoria, la parte inferior de la dirección de memoria |- valign="top" |'''Bank/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-fijo |- valign="top" |'''Ebank''' | Registro de 3 bits de la RAM, para seleccionar las 256 palabras de la RAM cuando se direcciona en el modo conmutable-volátil |- valign="top" |'''Sbank''' (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 Fbank |- valign="top" |'''SQ''' | Registro de secuencia de 4 bits; la instrucción actual |- valign="top" |'''G''' | Registro de 16 bits del buffer de memoria, para mantener la transmisión de palabras de datos desde y hacia la memoria |- valign="top" |'''X''' | 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''') |- valign="top" |'''Y''' | La otra entrada ('y') al sumador |- valign="top" |'''U''' |No es realmente un registro, sino la salida del sumador (la suma en complemento a 1 del contenido de los registros '''X''' e '''Y''') |- valign="top" |'''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'''. |- valign="top" |'''C''' | No es un registro independiente, sino el complemento a uno del registro '''B''' |- valign="top" |'''IN''' | Cuatro registros de entrada de 16 bits |- valign="top" |'''OUT''' | 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: <code>TC</code>, <code>CCS</code>, <code>INDEX</code>,<code> XCH</code>, <code>CS</code>, <code>TS</code>, <code>AD</code>, y <code>MASK</code> (básicas), y <code>SU</code>, <code>MP</code> y <code>DV</code> (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 <code>INDEX</code> llamada <code>EXTEND</code>, justo antes de la instrucción. Las instrucciones del AGC de Block I son: ;<code>TC</code> (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 <code>TC</code> se podía emplear para llamar a subrutinas. ;<code>CCS</code> (count, compare, and skip): Instrucción de salto condicional complejo. El registro A se cargaba con datos recuperados de la dirección especificada en la instrucción. (Debido a que el AGC usa la notación de complemento a 1, existen dos representaciones del 0. Cuando todos sus bits están a 0, se llama +0 [''más cero'']. Si todos los bits están a 1, se llama -0 [''menos cero''].) El ''valor absoluto disminuido'' (DABS) se operaba y se almacenaba en el registro A. Si el número era mayor de 0, el DABS decrementaba el valor en 1; si el número era negativo se calculaba su complemento antes de ser decrementado (ese es el valor absoluto). Por ''disminuido'' se entiende “decrementado pero no por debajo de cero”. Por lo tanto, cuando el AGC ejecuta la función DABS, los números positivos tenderán a +0 y también lo harán los negativos, pero después de informar su valor negativo a través del salto de cuatro vías (a continuación). El último paso en <code>CCS</code> es el salto de cuatro vías, dependiendo del dato del registro A antes del DBAS. Si el registro A era mayor que 0, <code>CCS</code> saltaba a la primera instrucción inmediatamente después de <code>CCS</code>. Si el registro A contenía +0, <code>CCS</code> saltaba a la segunda instrucción después de <code>CCS</code>, y -0 saltaba a la cuarta instrucción después de <code>CCS</code>. El objetivo principal de la cuenta era facilitar los bucles sencillos, controlados por un contador positivo, para acabar en un <code>CCS</code>, y un <code>TC</code> al principio del bucle, equivalente al <code>BCT</code> del IBM 360. La función de valor absoluto se consideró suficientemente importante para ser incorporada dentro de esta instrucción; cuando se usa para solamente esta función, la secuencia después de <code>CCS</code> era <code>TC *+2, TC*+2, AD ONE</code>. Un efecto colateral curioso era la creación y uso de agujeros<code> CCS</code> cuando se sabía que el valor probado nunca sería positivo, que ocurría más a menudo de lo que se esperaba. Eso dejaba dos palabras completas desocupadas y era responsabilidad de un comité especial ubicar valores constantes en esos agujeros. ;<code>INDEX</code>: Suma el dato recuperado de la dirección especificada en la instrucción, a la siguiente instrucción. <code>INDEX</code> se puede usar para sumar o restar un índice a la dirección base especificada por el operando de la instrucción siguiente a <code>INDEX</code>. Este método se usa para implementar vectores, matrices y tablas de búsqueda; desde que la suma se hace en ambas palabras completas, también se usaba para modificar el código de operación en una instrucción extra, y en raras ocasiones ambas funciones a la vez. ;<code>RESUME</code>: Una particularidad de <code>INDEX</code> (<code>INDEX 25</code>). Esta es la instrucción usada para volver de una interrupción. Provoca que la ejecución vuelva al punto de la interrupción. ;<code>XCH</code> (exchange): Intercambie el contenido de la memoria con el contenido del registro A. Si la [[dirección de memoria]] especificada es de memoria de sólo lectura, el contenido de la memoria no se ve afectado, y la instrucción únicamente carga el registro A. Si es una [[memoria volátil]], se alcanza la corrección de desbordamiento (overflow) almacenando el bit más a la izquierda de los 16 bits de A como el bit de signo. ;<code>CS</code> (clear and subtract): Carga el registro A con el complemento a 1 del dato referenciado en la dirección de memoria especificada. ;<code>TS</code> (transfer to storage): Almacena el registro A en una dirección de memoria específica. <code>TS</code> además detecta y corrige desbordamientos de tal forma que puede propagar el acarreo de bits en una suma/resta multi precisión. Si el resultado no produce desbordamiento (los dos bits izquierdos de A con el mismo valor) no ocurre nada especial; si hay desbordamiento (esos dos bits distintos), el 1 más a la izquierda se lleva a la memoria como el bit de signo y 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. Como siempre es posible (aunque anormal) que suceda un desbordamiento, la instrucción TS se sigue de una <code>TC</code> a la lógica de no desbordamiento; cuando es una posibilidad normal (como en sumas/restas multi precisión), la instrucción TS va seguida por <code>CAF ZERO</code> (<code>CAF = XCH</code> a memoria fija) para completar la formación del bit de acarreo (+1, 0 o -1) en la siguiente palabra de alta precisión. Los ángulos se mantenían en precisión simple, mientras que las distancias y velocidades se almacenaban en doble precisión y el tiempo transcurrido en tripe precisión. ;<code>AD</code> (add): Añade el contenido de la memoria al registro A y almacena el resultado en A. Los dos bits más a la izquierda de A pueden ser diferentes (desbordamiento) antes o después de <code>AD</code>. El hecho de que el desbordamiento sea un estado más que un evento, perdona amplía las limitaciones del desbordamiento cuando se suman más de dos números siempre y cuando ninguno de los totales intermedios supera el doble de la capacidad de una palabra. ;<code>MASK</code>: Ejecuta un AND de bits (booleano) de la memoria con el registro A y almacena el resultado en el registro A. ;<code>MP</code> (multiply): Multiplica el contenido del registro A por el dato de la dirección de memoria referenciada y almacena la parte más significativa del producto en el registro A y la menos significativa en el registro LP. Ambas partes del producto comparten el signo. ;<code>DV</code> (divide): Divide el contenido del registro A por el dato referenciado en la dirección de memoria. Almacena el cociente en el registro A y el valor absoluto del resto en el registro Q. De forma distinta a las máquinas modernas, los números reales se trataban como fracciones (punto decimal justo a la derecha del bit de signo), de manera que se podía producir basura si el divisor no era tan largo como el dividendo; no había protección frente a estas situaciones. En el AGC del Block II, un dividendo de doble precisión comenzaba en A y L (el registro LP del Block II), y el resto, con su signo, se dejaba en L. Esto simplificaba considerablemente la [[subrutina]] para la división de doble precisión. ;<code>SU</code> (subtract): Resta (complemento a 1) el dato en la posición de memoria referencia del contenido del registro A, almacenando el resultado en A. Las instrucciones se implementaban en grupos de 12 pasos, llamados pulsos de temporización (''timing pulses''). Los pulsos se nombraban de TP1 a TP12. Cada conjunto de 12 pulsos se llamaba ''subsecuencia'' de instrucción. Las instrucciones simples, como <code>TC</code>, se ejecutaban en una sola subsecuencia de 12 pulsos. Las instrucciones más complejas necesitaban varias subsecuencias. La instrucción de multiplicación (MP) usaba 8 subsecuencias: una inicial llamapa MP0, seguida de una subsecuencia MP repetida 6 veces y terminada por MP3. Se redujo a 3 subsecuencias en Block II. Cada pulso de temporización (TP) en una subsecuencia podía disparar hasta 5 ''pulsos de control''. Los pulsos de control eran señales que hacía en trabajo de la instrucción, como leer el contenido de un registro en el bus, o escribir datos del bus en un registro. === Memoria === [[Archivo:Agc rope.jpg|thumb|250px|Memoria fija (ROM) del AGC.]] [[Archivo:Apollo 1024 bit core memory module.jpg|thumb|250px|right|Módulo de memoria volátil de 1024 bits del AGC del Apolo (vista frontal y trasera).]] La memoria del AGC Block I estaba organizada en bancos de 1K palabras (KP). El primer banco (banco 0) era de memoria volátil (RAM). Todos los siguientes bancos eran memoria fija (ROM). Cada instrucción AGC tenía un campo de direccionamiento de 12 bits. Los bits más bajos (1-10) direccionan la memoria dentro de cada banco. Los bits 11 y 12 seleccionan el banco: 00 selecciona el banco RAM (banco 0), 01 el banco 1 (ROM), 10 el siguiente (banco 2, ROM) y 11 selecciona el registro de banco, que se puede usar para seleccionar cualquier banco por encima del 2. Los bancos 1 y 2 se denominaban bancos de memoria fijo-fijo porque siempre estaban disponibles independientemente del contenido del registro de banco. Los bancos 3 y superior e llamaban fijo-seleccionable porque el banco seleccionado se seleccionaba por el registro de banco. Originalmente, el AGC Block I tenía 12KP de memoria fija, pero se incrementó posteriormente a 24 KP. El Block II tenía 32 KP de memoria fija y 4 KP de memoria RAM. El AGC transfería datos desde y hacia la memoria a través del registro G en un proceso llamado ''ciclo de memoria''. El ciclo de memoria duraba 12 pulsos de temporización (11,72 μs), comenzando en el TP1 cuando el AGC cargaba la dirección de memoria a ser leída en el registro S. El hardware de la memoria recuperaba el dato/la palabra de la memoria de la dirección especificada en el registro S. Las palabras de la RAM se depositaban en el registro G en el TP6; las palabras de la ROM estaban disponibles en el TP7. La palabra recuperada de la memoria quedaba disponible en el registro G para el acceso del AGC durante los TP7 a TP10. Después del TP10, el dato existente en el registro G se escribía en la memoria. El ciclo de memoria del AGC tenía lugar de forma continua durante el funcionamiento del AGC. Las instrucciones que necesitaban datos de la memoria accedían a ellos durante los pulsos TP7-10. Si el AGC cambiaba la palabra de memoria en el registro G, la palabra cambiada era restaurada en memoria tras el pulso TP10. De esta forma, las palabras de datos ciclaban continuamente de la memoria al registro G, y de nuevo a la memoria. Los 15 bits más bajos de cada palabra contenían instrucciones AGC o datos, usando el bit 16 como bit de paridad. Este bit se ponía a 0 o 1 a través de un circuito de generador de paridad de forma que la suma de 1 en cada palabra en la memoria, siempre fuera un número impar. Para verificar el bit de paridad, se disponía de un circuito de chequeo de paridad que se encargaba de la verificación en cada ciclo de memoria; si el bit no tenía el valor esperado, se asumía que el dato estaba corrompido y se iluminaba la luz de alarma de paridad en el panel. <!--=== Interrupciones y contadores involuntarios === The AGC had five vectored [[interrupt]]s: * ''Dsrupt'' was triggered at regular intervals to update the user display (DSKY). * ''Erupt'' was generated by various hardware failures or alarms. * ''Keyrupt'' signaled a key press from the user's keyboard. * ''T3Rrupt'' was generated at regular intervals from a hardware timer to update the AGC's [[real-time clock]]. * ''Uprupt'' was generated each time a 16-bit word of uplink data was loaded into the AGC. The AGC responded to each interrupt by temporarily suspending the current program, executing a short interrupt service routine, and then resuming the interrupted program. The AGC also had 20 involuntary [[counter]]s. These were memory locations which functioned as up/down counters, or shift registers. The counters would increment, decrement, or shift in response to internal inputs. The increment (''Pinc''), decrement (''Minc''), or shift (''Shinc'') was handled by one subsequence of microinstructions inserted between any two regular instructions. Interrupts could be triggered when the counters overflowed. The T3rupt and Dsrupt interrupts were produced when their counters, driven by a 100 Hz hardware clock, overflowed after executing many Pinc subsequences. The Uprupt interrupt was triggered after its counter, executing the Shinc subsequence, had shifted 16 bits of uplink data into the AGC. --> === Modo Standby === El AGC tenía un modo de ahorro de energía controlado por un interruptor de standby. Este modo cortaba la corriente del AGC excepto al reloj y al contador de impulsos. La señal F17 del contador de impulsos encendía y apagaba el AGC en intervalos de 1,28 segundos. En este modo, el AGC ejecutaba funciones esenciales, chequeaba el interruptor de standby y si estaba pulsado, cortaba la corriente y volvía a dormir hasta la siguiente señal F17. En el modo standby el AGC permanecía dormido la mayor parte del tiempo, por lo que no se despertaba para ejecutar la instrucción Pinc necesaria para actualizar el reloj en tiempo real del AGC a intervalos de 10 ms. Para compensarlo, una de las funciones ejecutadas por el AGC cada vez que se despertaba era actualizar el reloj en tiempo real en 1,28 segundos. El modo standby se diseñó para reducir el consumo de energía de 70 W a unos 5-10 W durante el curso medio del vuelo, cuando el AGC no era necesario. Sin embargo, en la práctica, el AGC se dejó encendido en todas las fases de la misión y nunca se usó esta característica. === Buses de datos === El ACG tenía unos buses de lectura y escritura de 16 bits. Los datos de los registros centrales (A, Q, Z o LP), u otros registros internos se podían colocar en el bus de lectura con una señal de control. El bus de lectura se conectaba con el bus de escritura a través de un búfer, de forma que cualquier dato que aparecía en el bus de lectura, también aparecía en el de escritura. Otras señales de control podían copiar los datos del bus de escritura en los registros. Las transferencias de datos se comportaban de la siguiente manera: para mover la dirección de la siguiente instrucción desde el registro B al registro S, se empleaba una señal de control RB (<code>READ B</code>). Esto causaba que la dirección se moviese del registro B al bus de lectura y de ahí al bus de escritura. Una señal de control WS (<code>WRITE S</code>) movía la dirección desde el bus de escritura al registro S. Existía la posibilidad de leer simultáneamente varios registros en el bus de lectura. Cuando esto ocurría, los datos de cada registro se incorporaban al bus a por medio de un OR (inclusivo). Este OR se usó para implementar la instrucción <code>MASK</code> que era una operación AND lógica. Debido a que el AGC no tenía posibilidad de hacer un AND lógico, pero sí un OR lógico a través del bus, y se puede invertir datos a través del registro C, según el teorema de De Morgan, se podía implementar un AND lógico a base de OR lógico y NOT, invirtiendo ambos operandos, ejecutando un OR lógico en el bus e invirtiendo el resultado. <!-- The AGC had a 16-bit read bus and a 16-bit write bus. Data from central registers (A, Q, Z, or LP), or other internal registers could be gated onto the read bus with a control signal. The read bus connected to the write bus through a non-inverting buffer, so any data appearing on the read bus also appeared on the write bus. Other control signals could copy write bus data back into the registers. Data transfers worked like this: To move the address of the next instruction from the B register to the S register, an RB (read B) control signal was issued; this caused the address to move from register B to the read bus, and then to the write bus. A WS (write S) control signal moved the address from the write bus into the S register. Several registers could be read onto the read bus simultaneously. When this occurred, data from each register was inclusive-''or''ed onto the bus. This inclusive-''or'' feature was used to implement the Mask instruction, which was a logical ''and'' operation. Because the AGC had no native ability to do a logical ''and'', but could do a logical ''or'' through the bus and could complement (invert) data through the C register, [[De Morgan's laws|De Morgan's theorem]] was used to implement the equivalent of a logical ''and''. This was accomplished by inverting both operands, performing a logical ''or'' through the bus, and then inverting the result. --> === Software === [[Archivo:Margaret Hamilton in action.jpg|thumb|[[Margaret Hamilton (científica)|Margaret Hamilton]], durante el periodo como principal ingeniera de software de vuelo del proyecto Apolo.]] Cuando se terminaron de definir los requisitos de diseño del AGC, el software necesario para su desarrollo, así como las técnicas de programación apropiadas no existían, por lo que tuvieron que ser diseñadas desde cero. El software AGC estaba escrito en [[lenguaje de programación]] AGC, y era almacenado en [[memoria de núcleos cableados]]. Existía un simple [[sistema operativo de tiempo real]] que consistía en el ''Exec'', un sistema de ordenamiento de [[Proceso (informática)|procesos]] que podía ejecutar hasta ocho 'tareas' a la vez usando una arquitectura cooperativa [[multitarea]] (cada tarea debía periódicamente devolver el control al Exec, que entonces comprobaba si había alguna tarea pendiente con mayor prioridad). También existía un componente de interrupción llamado ''Waitlist'', que podía programar múltiples tareas de una duración determinada. Estos procesos eran cortas listas de código de ejecución que podía autoprogramarse para una nueva ejecución en el ''Waitlist'', o podía lanzar una operación mayor, al iniciar una 'tarea' con el ''Exec''. La ejecución de los procesos del ''Exec'' se basaban en su prioridad. La tarea de menor prioridad, llamada ''dummy job'', se encontraba siempre presente. Realizaba chequeos de diagnóstico y controlaba una luz verde relacionada con la actividad del ordenador en el DSKY: si la aplicación ''dummy'' estaba en marcha, significaba que el ordenador no tenía ninguna aplicación más prioritaria, por lo que la luz se encontraba apagada. La aplicación ''dummy'' se cancelaba si existía alguna tarea de mayor prioridad pendiente de ejecutar, lo que se indicaba mediante el encendido de la luz de iluminación de la actividad del ordenador. El AGC también disponía de un sofisticado intérprete de software, desarrollado por el [[Laboratorio Draper|MIT Instrumentation Laboratory]], que implementaba una [[máquina virtual]] de mayor complejidad y capacidad de pseudo-instrucciones que el AGC nativo. Estas instrucciones simplificaban los programas navigacionales. El código interpretado, que permitía [[trigonometría]] de doble precisión, aritmética escalar y vectorial (16 y 24 bits), e incluso instrucciones <code>MXV</code> (matriz × vector), podía mezclarse con código AGC nativo. Mientras que el tiempo de ejecución de las pseudo-instrucciones se incrementaba (debido a la necesidad de interpretar estas instrucciones durante la ejecución) el intérprete proporcionaba muchas más instrucciones de las que el AGC soportaba de forma nativa, y los requisitos de memoria eran mucho más bajos que en el caso de que se incorporaran estas instrucciones al lenguaje de programación nativo del AGC, que requerirían la utilización de memoria adicional en el ordenador (en aquel tiempo la capacidad de memoria era muy cara). El tiempo medio de ejecución de las pseudo-instrucciones era de 24 ms. El compilador y el sistema de control de versión, llamado ''YUL'' por el prototipo previo ''Christmas Computer'',<ref>{{citation |url=http://authors.library.caltech.edu/5456/1/hrst.mit.edu/hrs/apollo/public/conference3/blairsmith.htm |title=Hugh Blair-Smith's Introduction |publisher=MIT |date=30 de noviembre de 2001 |work=AGC History Project (Caltech archive, original site closed) |author= |accessdate=21 de marzo de 2010}} </ref> aseguraba las transiciones adecuadas entre el código nativo e interpretado. Una serie de rutinas para interfaz del usuario llamadas ''Pinball'' proporcionaban los servicios de display y teclado para realizar las tareas de funcionamiento del AGC. Un extenso conjunto de rutinas de acceso estaban disponibles para permitir al operador (el astronauta) mostrar los contenidos de varios bloques de memoria en formato [[sistema octal]] o decimal en grupos de 1, 2, o 3 registros al mismo tiempo. También se proporcionaban rutinas de monitoreo para que el operador pudiera iniciar una tarea para volver a mostrar periódicamente los contenidos de ciertos bloques de memoria. Era posible también iniciar tareas. Las rutinas Pinball conformaban el equivalente (de forma muy aproximada) del núcleo [[UNIX]]. La mayor parte del software se encontraba en memoria de solo lectura y por tanto no podía ser cambiado en ejecución, pero algunas partes determinadas del software estaban almacenadas en [[Memoria de toros|memoria de núcleos magnéticos]] editables, por lo que podían ser sobreescritos por los astronautas utilizando la interfaz DSKY, como de hecho ocurrió durante el vuelo del [[Apolo 14]]. Las modificaciones a la programación se clausuraban unos seis meses antes de cada lanzamiento.<ref>{{cita web|título=First Conference - Software Issues |url=https://authors.library.caltech.edu/5456/1/hrst.mit.edu//hrs/apollo/public/conference1/software.htm |obra=Apollo Guidance Computer Project|editorial=[[Instituto Dibner de Historia de la Ciencia y la Tecnología]]|idioma=en|fecha=2002 |fechaacceso=19 de febrero de 2025|urlarchivo=https://wayback.archive-it.org/9060/20230418192333/https://authors.library.caltech.edu/5456/1/hrst.mit.edu//hrs/apollo/public/conference1/software.htm |fechaarchivo=18 de abril de 2023|cita=you have to have the programs frozen six months, or a few months before flight time}}</ref> Los principios de programación del AGC desarrollados por el [[MIT Instrumentation Laboratory]], primero bajo la dirección de [[Dan Lickly]] durante 1961-1969, y a partir de 1969 por [[Margaret Hamilton (científica)|Margaret Hamilton]], formarían los cimientos de la llamada "ingeniería de software", un término acuñado por Anthony Oettinger<ref>[https://dl.acm.org/citation.cfm?id=363717&picked=prox&cfid=747373433&cftoken=55351641/ ACM Digital Library] accessed January 24, 2016</ref><ref>[https://bertrandmeyer.com/2013/04/04/the-origin-of-software-engineering/ The origin of "software engineering"] 24 de enero de 2016</ref> - particularmente para el diseño de sistemas más fiables que se apoyaran en software asíncrono, [[Planificador|planificación por prioridad]], testeo y modelos en los que la capacidad de decisión del humano estuviera presente.<ref name=apolo11>NASA Press Release [http://history.nasa.gov/alsj/a11/a11Hamilton.html "NASA Honors Apollo Engineer"] (3 de septiembre de 2003)</ref> El software del AGC software influyó en el diseño posterior del [[Skylab]], el [[transbordador espacial]] y los primitivos sistemas de aviónica basados en ''[[fly-by-wire]]''.<ref name=klabs>NASA Office of Logic Design [http://klabs.org/home_page/hamilton.htm "About Margaret Hamilton"] (Last Revised: February 03, 2010)</ref><ref name=50th>By ''A.J.S. Rayl'' [http://www.nasa.gov/50th/50th_magazine/scientists.html "NASA Engineers and Scientists-Transforming Dreams Into Reality"] {{Wayback|url=http://www.nasa.gov/50th/50th_magazine/scientists.html |date=20100629170224 }}</ref> == Versión Block II == En 1966 se diseñó una nueva versión del AGC, llamada Block II (bloque II). Mantenía la misma arquitectura básica del bloque I, pero incrementaba la memoria volátil de 1000 a 2000 palabras. La memoria fija se expandió de {{Espacio duro|24 000}} a {{Espacio duro|36 000}} palabras. Las instrucciones se expandieron de 11 a 34 y se implementaron canales I/O para reemplazar a los registros I/O del bloque I. La versión del bloque II fue la que se utilizó en los vuelos que llegaron a la Luna. El bloque I fue utilizado durante los vuelos no tripulados del [[Apolo 4]] y [[Apolo 6]], así como a bordo del malogrado [[Apolo 1]]. <!-- The decision to expand the memory and instruction set for Block II, but to retain the Block I's restrictive 3-bit op. code and 12-bit address had interesting design consequences. Various tricks were employed to squeeze in additional instructions, such as having special memory addresses which, when referenced, would implement a certain function. For instance, an �5� to address 25 triggered the �16� instruction to return from an interrupt. Likewise, �5� 17 performed an <code>INHINT</code> instruction (inhibit interrupts), while �5� 16 reenabled them (<code>RELINT</code>). Other instructions were implemented by preceding them with a special version of �5� called �12� which arithmetically modified the 3-bit op. code by employing the overflow bit to extend it. The address spaces were extended by employing the Bank (fixed) and Ebank (erasable) registers, so the only memory of either type that could be addressed at any given time was the current bank, plus the small amount of fixed-fixed memory and the erasable memory. In addition, the bank register could address a maximum of 32 kilowords, so an Sbank (super-bank) register was required to access the last 4 kilowords. All across-bank subroutine calls had to be initiated from fixed-fixed memory through special functions to restore the original bank during the return—essentially a system of [[far pointer]]s. The Block II AGC also has the mysterious and poorly documented <CODE>EDRUPT</CODE> instruction (the name may be a contraction of ''Ed's Interrupt'', after [[Ed Smally]], the programmer who requested it) which is used a total of once in the Apollo software: in the Digital Autopilot of the [[Lunar Module]]. At this time, while the general operation of the instruction is understood, the precise details are still hazy, and it is believed to be responsible for problems emulating the LEM AGC [[Luminary software]]. --> == El problema del PGNCS durante el Apolo 11 == El PGNCS del Apolo generó avisos de error no previstos durante el vuelo de descenso a la superficie lunar del [[Apolo 11]], en la que el AGC mostraba la ''alarma 1201'' ("Executive overflow - no vacant areas") y la ''alarma 1202'' ("Executive overflow - no core sets").<ref> {{Obra citada |url=http://history.nasa.gov/SP-350/ch-11-4.html |title=A Yellow Caution Light |first=Michael |last=Collins |first2=Edwin |last2=Aldrin |editor-first=Edgar M. |editor-last=Cortright |publisher=NASA |year=1975 |pages="Chapter 11.4" |place=Washington, DC |work="NASA SP-350, Apollo Expeditions to the Moon" |isbn=978-9997398277 |accessdate=30 de agosto de 2009}} </ref> Esto se debió a una rápida y continuada corriente de "robos de ciclo" realizados por el radar de aproximación, dejado de forma intencionada en ''standby'' durante el descenso en caso de que fuera necesario por un aborto de la maniobra de alunizaje.<ref> {{Obra citada |url=http://www.hq.nasa.gov/office/pao/History/alsj/a11/a11.1201-pa.html |title=Apollo 11 Program Alarms |first=Peter |last=Adler |first2= |last2= |editor-first=Eric M. |editor-last=Jones |publisher=NASA |year=1998 |pages= |place= |work=Apollo 11 Lunar Surface Journal |isbn= |accessdate=1 de septiembre de 2009}} </ref><ref> {{Obra citada |url=http://www.hq.nasa.gov/alsj/a11/a11.1201-fm.html |title=Apollo 11 : 25 Years Later |first=Fred H. |last=Martin |first2= |last2= |editor-first=Eric M. |editor-last=Jones |publisher=NASA |date=July, 1994 |pages= |place= |work=Apollo 11 Lunar Surface Journal |isbn= |accessdate=1 de septiembre de 2009}} </ref> Durante esta parte del descenso, el procesador se debía encontrar normalmente a casi un 85% de carga de trabajo. Los 6.400 ciclos extras por segundo añadieron el equivalente a un 13% de carga, dejando justo la necesaria para que todas las tareas pudieran ejecutarse. A los cinco minutos de iniciar el descenso, [[Buzz Aldrin]] programó el ordenador con el comando 1668 que daba instrucciones de calcular y mostrar DELTAH (la diferencia entre la altitud medida con el radar y la calculada por el ordenador). Esto añadió un 10% adicional a la carga de trabajo del procesador, causando un desbordamiento y la alarma 1202. Tras el permiso desde el control de tierra en Houston, que dio luz verde para el alunizaje, Aldrin introdujo de nuevo el comando 1668, y la alarma 1202 volvió a saltar. Cuando informó de la segunda alarma, Aldrin comentó "Parece que aparece cuando tenemos la tarea 1668 en ejecución". Afortunadamente para el [[Apolo 11]], el software del AGC había sido diseñado con control de prioridad. Justo para lo que había sido diseñado, el software se recuperó automáticamente, eliminando las tareas no prioritarias incluyendo el comando 1668, para completar las tareas críticas de control y guiado. El [[controlador de vuelo]] Steve Bales y su equipo de apoyo, que incluía a Jack Garman, dio permiso en repetidas ocasiones para la continuidad del alunizaje, y este fue un éxito. Por su trabajo, Bales recibió la [[Medalla Presidencial de la Libertad]] en nombre de todo el equipo del centro de control y los tres astronautas del Apolo.<ref> {{Obra citada |url=http://www.abc.net.au/science/moon/computer.htm |title=The Lunar Module Computer |first= |last= |first2= |last2= |editor-first=Edgar M. |editor-last=Cortright |publisher=NASA |year=1975 |pages= |place= |work=Apollo 11 Lunar Surface Journal |isbn= |accessdate=4 de febrero de 2010}} </ref> El problema no era un error de programación del AGC ni un error de pilotaje, sino en el diseño del hardware periférico que ya había sido detectado y documentado por los ingenieros del Apolo 5.<ref> {{Obra citada |url=http://klabs.org/history/apollo_11_alarms/eyles_2004/eyles_2004.htm |title=Tales From The Lunar Module Guidance Computer |first=Don |last=Eyles |publisher=American Astronautical Society |date=6 de febrero de 2004 |work=27th annual Guidance and Control Conference |place=Breckenridge, Colorado}}</ref> Sin embargo, como el problema había ocurrido una sola vez durante las pruebas, determinaron que era más seguro operar con el hardware existente ya probado, que volar con un sistema de radar más nuevo pero no probado. En el hardware real, la posición del radar de encuentro se codificó con una sincronización excitada por una fuente diferente de [[Corriente alterna|CA]] de 800 Hz diferente a la utilizada por la computadora como referencia de tiempo. Las dos fuentes de 800 Hz fueron [[Lazo de seguimiento de fase|enclavadas en frecuencia]] pero no en fase, y las pequeñas variaciones aleatorias de fase hicieron que pareciera que la antena estaba "oscilando" rápidamente en su posición a pesar de estar completamente estacionaria. Estos movimientos fantasmas generaron la serie rápida de robos de ciclo. <!--== Código de error 00404 == The computer's other error codes included error ''00404'', which was shorthand for "IMU orientation unknown". Since the [[Inertial Measurement Unit]] device literally told the craft where to go, this has been compared to the [[HTTP]] [[404 error|404]] ''not found'' or ''browser navigation error'' code used on the [[World Wide Web]]. However, the later familiar HTTP error code did not originate with the AGC.<ref> {{Obra citada |url=http://articles.techrepublic.com.com/5100-10881-6172656.html |title=Geek Trivia: 404-letter Words |first=Jay |last=Garmon |magazine=Tech Republic |date=3 de abril de 2007 }} </ref> --> == Después del programa Apolo == [[Archivo:Fly by wire.jpg|thumb|Avión de prueba para sistemas ''[[fly-by-wire]]''. El DSKY del AGC es visible en el compartimento interior de la aeronave.]] Tras su uso en el programa Apolo, el AGC formó parte de un sistema experimental ''[[fly-by-wire]]'' (FBW) instalado a bordo de un [[F-8 Crusader]] para demostrar la practicidad de un FBW manejado mediante ordenador. El AGC usado en la primera fase del programa fue reemplazado por otro sistema en la segunda fase, y la investigación realizada en el programa derivó en el desarrollo de sistemas FBW para el [[transbordador espacial]]. El AGC también sirvió, aunque indirectamente, al desarrollo de sistemas FBW para la generación de cazas que se estaban desarrollando en aquella época.<ref> {{Obra citada |url=http://www.klabs.org/history/history_docs/reports/dfbw_tomayko.pdf |title=NASA SP-2000-4224 — Computers Take Flight: A History of NASA's Pioneering Digital Fly-By-Wire Project |publisher=NASA |year=2000 |place=Washington, D.C. |work=The NASA History Series |first=James E. |last=Tomayko |accessdate=1 de septiembre de 2009}} </ref> El AGC también fue usado en el [[Vehículo de rescate de inmersión profunda]] (DSRV, Deep Submergence Rescue Vehicle) de la [[Armada de los Estados Unidos]].<ref>''The Silent War: The Cold War Battle Beneath the Sea'', John Pina Craven, Simon and Schuster, 2002, p.120</ref> == Véase también == * [[Apolo PGNCS]] - el sistema primario de navegación y orientación del Apolo * [[AP-101]] - computadores (derivados del IBM S/360) que se usaron en el [[Programa del transbordador espacial|transbordador espacial]] * [[Historia del hardware de computador (1960-presente)|Historia del hardware de computador]] == Notas == {{listaref|group=nb}} == Referencias == {{listaref|2}} == Enlaces externos == {{commonscat}} === Documentación sobre el AGC y su desarrollo === * [https://web.archive.org/web/20080309202820/http://authors.library.caltech.edu/5456/01/hrst.mit.edu/hrs/apollo/public/archive/1689.pdf ''AGC4 Memo #9, Block II Instructions''] – The infamous memo that served as de facto official documentation of the instruction set * [http://www.hq.nasa.gov/office/pao/History/computers/Ch2-5.html ''Computers in Spaceflight: The NASA Experience''] – By James Tomayko (Chapter 2, Part 5, ''The Apollo guidance computer: Hardware'') * [https://web.archive.org/web/20040719084435/http://www.dfrc.nasa.gov/History/Publications/PDF/DFBW.pdf ''Computers Take Flight''] – By James Tomayko * [http://klabs.org/history/history_docs/ech/agc_scott.pdf ''The Apollo Guidance Computer - A Users View''] ([[Portable Document Format|PDF]]) – By David Scott, Apollo mission astronaut * [http://www.klabs.org/mapld04/papers/g/g202_portillo_p.pdf ''Lunar Module Attitude Controller Assembly Input Processing''] ([[Portable Document Format|PDF]]) – By José Portillo Lugo, History of Technology * [https://web.archive.org/web/20070612155102/http://authors.library.caltech.edu/5456/01/hrst.mit.edu/hrs/apollo/public/ The MIT AGC Project] – With comprehensive document archive ** [http://authors.library.caltech.edu/5456/01/hrst.mit.edu/groups/apollo/bibliography/q-and-a-fetch-comments.tcl_lastquestion_id=00016K&topic_id=11&topic=Document%20Library&entryformat=S&sortorder=author.html Luminary software source code listing], for Lunar Module guidance computer. (nb. 622 Mb) ** [http://authors.library.caltech.edu/5456/01/hrst.mit.edu/groups/apollo/bibliography/q-and-a-fetch-comments.tcl_lastquestion_id=000156&topic_id=11&topic=Document%20Library&entryformat=S&sortorder=author.html Colossus software source code listing], for Command Module guidance computer. (nb. 83 Mb) * [http://web.archive.org/web/http://collections.nasm.si.edu/code/emuseum.asp?style=browse¤trecord=1&page=search&profile=objects&searchdesc=A19720340000&quicksearch=A19720340000&newvalues=1&newstyle=single&newcurrentrecord=1 National Air and Space Museum's AGC Block I] and [http://web.archive.org/web/http://collections.nasm.si.edu/code/emuseum.asp?style=browse¤trecord=1&page=search&profile=objects&searchdesc=A19760811000&quicksearch=A19760811000&newvalues=1&newstyle=single&newcurrentrecord=1 Dsky] * [https://web.archive.org/web/20070809071736/http://authors.library.caltech.edu/5456/01/hrst.mit.edu/hrs/apollo/public/blairsmith3.htm Annotations to Eldon Hall's Journey to the Moon] – An AGC system programmer discusses some obscure details of the development of AGC, including specifics of Ed's Interrupt === Documentación del diseño del hardware del AGC === * [http://klabs.org/history/ech/agc_schematics/index.htm Apollo Guidance Computer Schematics] * [http://klabs.org/history/ech/ic_packages/index.htm AGC Integrated Circuit Packages] * [http://klabs.org/history/history_docs/integrated_circuits/ic4-po.pdf Integrated Circuits in the Apollo Guidance Computer] === Documentación del software operativo del AGC === * [http://history.nasa.gov/alsj/a15/A15Delco.pdf Delco Electronics, Apollo 15] - Manual for CSM and LEM AGC software used on the Apollo 15 mission, including detailed user interface procedures, explanation of many underlying algorithms and limited hardware information. Note that this document has over 500 pages and is over 150 megabytes in size. * Stengel, R., [http://www.princeton.edu/~stengel/LM.pdf Manual Attitude Control of the Lunar Module], J. Spacecraft and Rockets, Vol. 7, No. 8, Aug 1970, pp. 941–948. * [http://googlecode.blogspot.com/2009/07/apollo-11-missions-40th-anniversary-one.html Source code] for Command Module code (Comanche054) and Lunar Module code (Luminary099) as text. === Algunos proyectos y simuladores basados en el AGC === * [http://klabs.org/history/build_agc/ AGC Replica] – John Pultorak's successful project to build a hardware replica of the Block I AGC in his basement. Mirror site: [https://web.archive.org/web/20110222113340/http://echoesofapollo.com/resources/apollo-guidance-computer/ AGC Replica]. * [http://www.ibiblio.org/apollo/index.html Virtual AGC Home Page] – Ronald Burkey's AGC simulator, plus source and binary code recovery for the Colossus (CSM) and Luminary (LEM) SW * [http://www.orbiterwiki.org/wiki/NASSP Project Apollo for Orbiter] – Addon for [[Orbiter (simulador)|Orbiter]] spaceflight simulator, working towards a full simulation of the CSM and LEM including the Virtual AGC. * [http://www.eaglelander3d.com/ Eagle Lander 3D] Shareware Lunar Lander Simulator with a working AGC and DSKY (Windows only) === Reportajes === * [http://news.bbc.co.uk/1/hi/8148730.stm Weaving the way to the Moon] (BBC News) {{Control de autoridades}} [[Categoría:Programa Apolo]] [[Categoría:Software escrito en ensamblador]] [[Categoría:Introducciones relacionadas a la ciencia de la computación de 1966]] [[Categoría:Instituto de Tecnología de Massachusetts]]
Resumen:
Al guardar los cambios aceptas los
términos de uso
y liberas de forma irrevocable tu contribución conforme a los términos de las licencias
licencia CC BY-SA 4.0
y
GFDL
. Aceptas igualmente que un hipervínculo o URL es atribución suficiente conforme a la licencia Creative Commons.
Cancelar
Ayuda de edición
(se abre en una ventana nueva)
Buscar
Buscar
Edición de «
Apollo Guidance Computer
»
Añadir idiomas
Añadir tema