What Is the yaYUL Assembler in the Apollo 11 Code Repository?
The yaYUL assembler is a modern re-implementation of NASA's original YUL assembler that converts Apollo Guidance Computer (AGC) source code into binary memory images for the Lunar Module (Luminary 099) and Command Module (Comanche 055) programs.
The chrislgarry/Apollo-11 repository hosts the complete source code for the Apollo 11 Guidance Computer. Because the original assembly tools are no longer available, the project relies on the yaYUL assembler to transform the historic AGC source files into executable binaries that can run on modern emulators like VirtualAGC.
What Is yaYUL and Why Is It Used?
The Lost Original YUL and GAP Assemblers
According to the source code documentation in Luminary099/README.md (lines 28-30), the original YUL assembler and its successor GAP (Generalized Assembly Program) used at NASA to build the AGC software are no longer available. These historic tools translated handwritten assembly into the binary instructions executed by the AGC's rope memory.
yaYUL as the Modern Replacement
yaYUL is a modern reconstruction that understands a slightly different syntax than the original but produces identical binary output. As noted in the repository's top-level README.md at line 108, the project explicitly targets yaYUL for all assembly operations, making it the bridge between 1960s source listings and contemporary development workflows.
How yaYUL Is Used in the Apollo 11 Source Code
File Headers and Assembler Declaration
Every AGC source file in the repository begins with a standardized header comment that declares the intended assembler. In Luminary099/WAITLIST.agc at line 6, you will find:
# Assembler: yaYUL
This metadata ensures that build systems and developers immediately recognize which tool should process the file.
Assembling Individual Modules
You can assemble individual AGC source files using the yaYUL command-line interface. For example, to assemble the waitlist management routines:
yaYUL Luminary099/WAITLIST.agc -o WAITLIST.bin
This command produces WAITLIST.bin, a binary memory image compatible with AGC hardware emulators.
Master Build Files for Luminary and Comanche
The Apollo 11 codebase uses monolithic build scripts that include multiple source chunks. The Luminary099/MAIN.agc file serves as the master assembly file for the Lunar Module software, while Comanche055/MAIN.agc handles the Command Module. These files use INCLUDE directives to pull in subsystem code, all processed by yaYUL:
* MAIN.agc – Top-level build script for Luminary 099
INCLUDE "WAITLIST.agc"
INCLUDE "UPDATE_PROGRAM.agc"
INCLUDE "THROTTLE_CONTROL_ROUTINES.agc"
When yaYUL processes MAIN.agc, it recursively assembles all included components into a single binary suitable for the AGC's fixed memory banks.
Summary
-
yaYUL is the modern replacement for NASA's lost YUL and GAP assemblers, specifically designed to build Apollo Guidance Computer code.
-
Every source file in
chrislgarry/Apollo-11declares# Assembler: yaYULin its header (e.g.,Luminary099/WAITLIST.agc). -
The assembler translates
.agcsource files into binary images that can be loaded onto AGC emulators like VirtualAGC. -
Master build files (
Luminary099/MAIN.agcandComanche055/MAIN.agc) orchestrate the assembly of complete Lunar Module and Command Module programs.
Frequently Asked Questions
What does yaYUL stand for?
yaYUL stands for "yet another YUL," indicating its status as a modern re-implementation of the original YUL (Yale University Language) assembler developed for the Apollo program.
Can I use the original NASA assembler instead of yaYUL?
No. According to the Luminary099/README.md (lines 28-30), the original YUL assembler and its successor GAP are no longer available. yaYUL is the only known tool capable of assembling the Apollo 11 source code into valid AGC binary format.
What file extension does yaYUL expect?
The Apollo 11 source files use the .agc extension (Apollo Guidance Computer). The assembler processes these files along with their # Assembler: yaYUL header declarations to generate binary output.
Is yaYUL compatible with modern operating systems?
Yes. Unlike the original 1960s-era assembly tools that ran on mainframes, yaYUL is designed to run on modern operating systems including Linux, macOS, and Windows, making it accessible for historical research and education.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →