chrislgarry/Apollo-11 Contiene una transcripción del código fuente de la computadora de navegación del Apolo 11. Esto no es una imitación de código conmemorativo, sino el código fuente de AGC digitalizado de la lista de programas en papel conservada por el Museo del MIT, incluido Comanche055 utilizado por el módulo de comando y Luminary099 utilizado por el módulo lunar.
Al abrir el almacén por primera vez, la parte más confusa es: ¿Por qué no hay src, scripts de compilación y entradas de aplicaciones familiares? La respuesta es que este software es de 1969, y su organización, herramientas de ensamblaje y modelos de hardware son anteriores a las prácticas modernas de ingeniería de software. Este artículo comienza con la tabla de contenido y ofrece una ruta que realmente se puede leer.
Respuesta rápida
Primero clona el código fuente:
|
|
Luego seleccione el directorio según el módulo de la nave espacial:
Comanche055/: Programa Colossus 2A para el Módulo de Comando;Luminary099/: Programa Luminaria 1A para el Módulo Lunar.
Se recomienda no leer línea por línea desde el principio. Primero abra README.md y MAIN.agc en cada directorio, y luego vea ALARM_AND_ABORT.agc, EXECUTIVE.agc, DISPLAY_INTERFACE_ROUTINES.agc y otros módulos según las tareas. Si desea compilar o simular la ejecución, debe recurrir a Virtual AGC. El propio almacén del Apollo-11 es el principal responsable de la preservación y revisión del código fuente histórico.
¿Qué se almacena en este almacén?
La computadora de guía Apollo, o AGC para abreviar, es una parte importante del sistema de guía, navegación y control de la nave espacial Apollo. El módulo de comando del Apolo 11 y el módulo lunar tenían misiones diferentes, por lo que se utilizaron dos conjuntos de procedimientos:
| Tabla de contenidos | Programa correspondiente | Propósito |
|---|---|---|
Comanche055 |
Coloso 2A / Comanche revisión 055 | Módulo de mando de navegación, control de actitud, cálculo de órbita y tareas de reentrada |
Luminary099 |
Luminaria 1A/LMY99 | Misiones de descenso, aterrizaje, ascenso y encuentro del módulo lunar |
Las instrucciones del almacén registran las fechas de ensamblaje como el 1 de abril de 1969 y el 14 de julio de 1969. El código fuente es transcrito y organizado por el personal relevante de la comunidad Virtual AGC y el Museo del MIT en base a copias escaneadas de la lista en papel, y está continuamente sujeto a corrección con respecto a las copias escaneadas originales.
Esto significa que el objetivo principal del repositorio es preservar fielmente el material histórico, no reconstruir programas en código moderno. Cuando vea ortografía, formato de comentarios o límites de módulos desconocidos, no es apropiado “arreglarlos” directamente de acuerdo con los estándares de codificación actuales.
Por qué el código fuente está dividido en una gran cantidad de archivos .agc
El programa original es una única pieza de código que se ensambla como un todo. En ese momento, no existía un proceso de compilación y vinculación común en la actualidad, y los módulos del programa se parecían más a pilas de tarjetas perforadas ensambladas en secuencia. Para facilitar la gestión del proyecto digital, el enorme código fuente se dividió en varios archivos .agc y luego se restableció el orden general mediante la relación de inclusión.
Por lo tanto, la división de archivos aquí representa límites naturales de subrutinas, pero no equivale a unidades de compilación independientes en proyectos modernos. El README.md de cada directorio proporciona un índice de código fuente, que corresponde al archivo con el número de página de la lista de impresión original. Debe leerse como un índice y no como una descripción general del proyecto.
El YUL original de AGC y el GAP posterior ya no están disponibles directamente desde el ensamblador. yaYUL proporcionado por el proyecto Virtual AGC utiliza un formato de entrada ligeramente diferente y el código fuente de transcripción en el almacén también se ha adaptado para yaYUL.
Orden de lectura recomendado
1. Primero lea el contrato, la información de montaje y la entrada.
A partir de los tres archivos siguientes, primero puede crear una imagen general del programa:
|
|
CONTRACT_AND_APPROVALS.agc Preserva la identidad del proyecto, el contrato y la información de aprobación. ASSEMBLY_AND_OPERATION_INFORMATION.agc Describe estructuras de ensamblaje y llamadas a subrutinas. MAIN.agc incorpora múltiples fragmentos de código fuente en el programa completo en secuencia.
2. Mire los módulos con significados claros de las tareas.
En comparación con estudiar el conjunto de instrucciones directamente, es más fácil ingresar al estado seleccionando primero un módulo cuyo nombre de archivo pueda explicar su propósito:
|
|
Entre ellos, EXECUTIVE.agc y WAITLIST.agc son útiles para comprender la programación de tareas; PINBALL_GAME_BUTTONS_AND_LIGHTS.agc está relacionado con la interfaz de pantalla y teclado utilizada por los astronautas; El módulo de alarma y reinicio puede ver cómo el sistema maneja condiciones anormales.
3. Finalmente ingresa a la etapa de vuelo específica.
El directorio del módulo de comando contiene programas como integración orbital, maniobras automáticas, control de reentrada y control de actitud. El catálogo de módulos lunares es más adecuado para partir de tareas como guía de descenso, fase de aterrizaje, piloto automático digital y procedimientos de ascenso.
El Pxx en el nombre del archivo normalmente corresponde al número de programa seleccionado por los astronautas a través de DSKY. Por ejemplo, P40-P47.agc, P51-P53.agc y otros archivos se pueden ver en el almacén. Rxx se utiliza a menudo para números de rutina. Antes de leer estos archivos, es mucho más eficaz comprender las etapas de vuelo y los procedimientos operativos correspondientes que traducir únicamente las instrucciones de montaje.
Localice rápidamente el código localmente
Hay muchos archivos de almacén y utilizar la búsqueda de texto es más conveniente que hacer clic uno por uno. Se ejecuta en Git Bash, Linux o macOS:
|
|
Cuando ripgrep está instalado, hay disponible un método de búsqueda más rápido:
|
|
El segundo comando se puede utilizar para encontrar las ubicaciones relevantes de las famosas alarmas del programa 1201, 1202, pero no concluye la lógica de activación completa basándose en una sola coincidencia de cadena. El número de alarma, las condiciones de generación, la programación de tareas y el proceso de visualización pueden estar dispersos en varios módulos y deben leerse junto con la relación de llamada.
En PowerShell puedes enumerar el código fuente de esta manera:
|
|
.agc ¿Cómo debería verse el archivo?
El ensamblaje AGC es muy diferente del ensamblaje x86 o ARM común en la actualidad. Cuando te enfrentas a una línea de código, puedes identificar las siguientes partes en orden:
- Etiqueta: nombre la entrada del programa o la ubicación de los datos;
- Código de operación: instrucción AGC o instrucción de intérprete;
- Operando: dirección, constante o símbolo;
- Notas: Explicar algoritmos, condiciones de vuelo y limitaciones de ingeniería;
- Marcado de número de página: Ayuda a corresponder con la lista de papel original y la copia escaneada.
No piense simplemente en los comentarios como texto interesante. Para el software histórico, los comentarios a menudo sirven como descripciones de requisitos, condiciones de operación y razones de diseño. Lea junto con módulos adyacentes, definiciones de símbolos y números de páginas del manifiesto original para evitar malinterpretar una etiqueta parcial como una función completa.
Cómo compilar y simular la ejecución
El archivo README del repositorio Apollo-11 señala claramente los requisitos de compilación para Virtual AGC. El proceso recomendado es:
- Mantener el almacén del Apollo-11 como código fuente histórico e índice de archivos;
- Lea las instrucciones de compilación para la plataforma actual de Virtual AGC;
- Utilice el ensamblador
yaYULy el simulador AGC; - Seleccione el código fuente Comanche o Luminary según la versión del programa de destino;
- Compare los resultados del ensamblaje y las sumas de verificación con la información de referencia proporcionada por el proyecto.
Las plataformas, dependencias y comandos de compilación admitidos por Virtual AGC pueden cambiar con las versiones, y la documentación más reciente en su almacén debe prevalecer antes de la ejecución. No asuma que ejecutar el make o npm install genérico en el directorio raíz del Apollo-11 dará como resultado una imagen del programa de vuelo; la presencia de archivos de proyecto modernos en el directorio raíz no cambia la cadena de herramientas real del código fuente histórico de .agc.
Cómo verificar que una transcripción es precisa
Este proyecto agradece contribuciones, pero las correcciones deben basarse en escaneos originales. Cuando encuentre caracteres u ortografías sospechosas, se recomienda seguir los siguientes pasos:
- Busque el número de página original correspondiente en el directorio
README.md; - Abra los datos de escaneo de Comanche 055 o Luminary 099 vinculados al proyecto;
- Comparar códigos, comentarios, símbolos y marcas de números de página;
- Lea
CONTRIBUTING.md; - Envíe una solicitud de extracción que contenga solo diferencias de transcripción explícitas.
No formatee el código fuente por lotes para unificar mayúsculas y minúsculas, corregir la ortografía histórica o adoptar un formato moderno. Los proyectos de archivos históricos se esfuerzan por lograr la trazabilidad por encima de todo, y una modificación mecánica aparentemente ordenada puede dificultar la revisión.
Preguntas frecuentes
¿Esto fue escrito solo por Margaret Hamilton?
No. Los contratos y aprobaciones del almacén enumeran a Margaret H. Hamilton como líder de programación de Colossus, pero también registran a varios líderes de proyectos. El software Apollo se construye como un esfuerzo de equipo y no es exacto atribuir todo el almacén a un solo programador.
¿Los códigos en GitHub son los archivos originales guardados por la nave espacial en ese entonces?
Más precisamente, es una versión transcrita y adaptada para yaYUL de un escaneo del inventario en papel mantenido en el Museo del MIT. El almacén conserva el contenido original del programa y la correspondencia con los números de página, pero el soporte y el formato se han organizado digitalmente.
¿Por qué está dividido en dos conjuntos de programas: el módulo de comando y el módulo lunar?
Los dos aviones tienen misiones diferentes. El módulo de comando tiene que manejar la órbita, la actitud, el encuentro y el reentrada, mientras que el módulo lunar tiene que completar el descenso, el aterrizaje, el despegue en la superficie lunar y el encuentro, por lo que cada uno utiliza un programa AGC diseñado para la misión.
¿Se pueden utilizar estos códigos directamente en los sistemas aeroespaciales modernos?
Esto no debería hacerse. Este repositorio es adecuado para investigaciones históricas, aprendizaje de arquitectura informática y experimentos de simulación, y no es un software de producción probado en entornos modernos. Los sistemas modernos críticos para la seguridad requieren requisitos independientes, verificación, certificación y procesos de adaptación de hardware.
Resumen
El punto de entrada correcto para leer el código fuente del Apollo 11 no es leer con atención desde la primera línea hasta la última línea, sino distinguir primero Comanche055 y Luminary099, usar el índice del directorio para encontrar el módulo de tareas y luego combinar el número de página original, el conjunto de instrucciones AGC y la cadena de herramientas Virtual AGC para profundizar capa por capa. El repositorio es a la vez un archivo de software histórico con capacidad de búsqueda y una demostración de cómo el control de vuelo, la programación de misiones, la recuperación de alarmas y la interacción persona-computadora se organizaron en sistemas completos en computadoras con recursos extremadamente limitados.
Dirección del proyecto: chrislgarry/Apollo-11
Herramientas de simulación y compilación: AGC virtual