This is such an interesting peek into the engineering of these sort of systems with very constrained resources at the time. Like any random file you open contains little pragmatic design decisions like this
# THE POSITION OF THE MOON IS STORED IN THE COMPUTER IN THE FORM OF
# A NINTH DEGREE POLYNOMIAL APPROXIMATION WHICH IS VALID OVER A 15
# DAY INTERVAL BEGINNING SHORTLY BEFORE LAUNCH. THEREFORE THE TIME
# INPUT BY THE USER SHOULD FALL WITHIN THIS 15 DAY INTERVAL.
Damn, a control panel to input values, probably straight to the CPU. I guess the astronauts didn't have to learn assembly, but imagine a programmer having to recite all the raw code (I guess the commands (verbs) are numeric as well) to debug something, all the way at the moon.
The DSKY was the main input system for the AGC, and commands were inputted using the verb/noun system. Verb says what you want to do, and Noun says what you want to do that verb to.
For example, "Verb 35 Enter" lights every single segment and light on the DSKY, to make sure they're all working. "Verb 16 Noun 17 Enter" displays the IMU measurements, "Verb 16 Noun 36 Enter" displays the current time and "Verb 16 Noun 43 Enter" displays the current GPS lat/long. Verb 16 indicates to display something as decimal, and the noun indicates what to display.
Other commands could be used to input data, or set what program the AGC was running, for example if you wanted to change the current running program to 67, that would be "Verb 37 Enter 67 Enter"
While I know about the DSKY, I keep wondering if they were the first ones, i.e. inventing that way of entering data into a computer and others copied it later on, or if it was a already a more widespread and known pattern and the AGC copied it.
I know that other machines existed that used a similar system. I recall being asked, circa summer 2009 or so, to set up extensions on a quite old PABX that was configured that way.
The PABX was a huge electrical box full of giant PCBs stuck into a backplane (S-100 or maybe something proprietary?). I didn't get a good look tough, the box was mounted under the ceiling, directly above a desk with a terminal that you used for configuring it. There was a binder with laminated, typewritten cards, documenting "verbs" and "nouns" that you entered into a numeric keypad. As said, it worked like the Apollo DSKY, but the "display" was single slot that you had to squint through at just the right angle to make out faint numbers on a mirror, aimed downwards at some back projection thingy.
The funniest thing is that DSKY was, IIRC, a "temporary solution" that became the norm, and despite all the platitudes today it was apparently hated by astronauts.
The purpose of this project is to provide the original flight software and emulations of the onboard guidance computers flown in historical spacecraft, so that the flight software can be run on computers commonly available to the public today. The particular emphasis is on the Apollo Guidance Computer (AGC) flown in lunar missions in the 1960's and 1970's.
Well, I have no idea how complete this is, but perhaps a neat Christmas-time-project for anyone with seemingly unlimited tokens to take this and let it build up a simulator, using the real code to drive simulated machinery.
I have been collecting Autonetics artifacts off ebay for decades. What I find interesting about this time period is that Autonetics made 3 different efforts for digital inertial guidance. The first version used vacuum tubes and was never commpleted. The second version used the new discrete components developed by Sprague Electric. This version went into production. Autonetics then set about exploring the lithographic process to shrink the discrete component version into an IC based system. Autonetics essentially built the same computer using 3 different circuit construction methods. Here are some pictures of pieces of all 3 systems. The IC's are from about 1967.
One of the 2 nerds in the photo is Richard Stallman next to the Autonetics D-17B. An early inertial guidance system distributed to universities to study as real time computers after decommissioning.
There are also the hard disks(which the D-17B used as a clock) and gyroscopes that served as inputs.
Great to see the AGC assembly code and knowing that Apollo 11 is coded purely in assembly. Not sure if it has any compiler. Also found https://github.com/virtualagc/virtualagc while searching for compiler.
> knowing that Apollo 11 is coded purely in assembly
Of course. According to Wikipedia, it was introduced in 1966, so it's development must have been started earlier. Also according to Wikipedia higher-level languages like Fortran and Cobol were introduced in 1957/58. They were a cutting-edge technology of the era.
So programmers of the day would have been comfortable with assembly, and the inefficiency and novelty of higher-level languages would have probably been a bad fit for the application.
The assembler you're looking for, is called YUL. [0]
You can find much of that code here [1], but unless you have a Honeywell, it isn't much help. yaYUL is a modern remake, and can assemble most of the Apollo code.
Part of the AGC ROMs implemented a virtual machine for things like matrix multiplication. So, a higher level of abstraction was available but it was still very much coded in its own assembly language.
Strange that no one took the effort to fix yaYUL to read the YUL format, but instead of adapting the transcription of the source to match the 'quirks' of yaYUL.
Orion on Artemis has a bunch of really cool stuff like redundant computers but it's certainly jarring to go from Verbs and Nouns of Apollo to seeing them tapping on screens with a GUI
Not the same goals, risks, monetary budget, time budget.
If your goal was to absolutely prevent any errors and you would go great lengths to do it, you would.
Just look at any safety critical systems: medical, transportation. There has been some incidents, but some systems do work really well that are developed today.
Most significant discussion: https://news.ycombinator.com/item?id=12048945, 652 points, 145 comments on July 7, 2016
All previous submissions: https://news.ycombinator.com/from?site=github.com/chrislgarr...
Apollo 11 Guidance Computer source code for the command and lunar modules - https://news.ycombinator.com/item?id=22367416 - Feb 2020 (30 comments)
Apollo 11 Guidance Computer source code - https://news.ycombinator.com/item?id=12048945 - July 2016 (145 comments)
https://github.com/chrislgarry/Apollo-11/blob/master/Comanch...
# THE POSITION OF THE MOON IS STORED IN THE COMPUTER IN THE FORM OF # A NINTH DEGREE POLYNOMIAL APPROXIMATION WHICH IS VALID OVER A 15 # DAY INTERVAL BEGINNING SHORTLY BEFORE LAUNCH. THEREFORE THE TIME # INPUT BY THE USER SHOULD FALL WITHIN THIS 15 DAY INTERVAL.
Better be back home in 15 days! ;)
https://youtube.com/playlist?list=PL-_93BVApb59FWrLZfdlisi_x...
Damn, a control panel to input values, probably straight to the CPU. I guess the astronauts didn't have to learn assembly, but imagine a programmer having to recite all the raw code (I guess the commands (verbs) are numeric as well) to debug something, all the way at the moon.
For example, "Verb 35 Enter" lights every single segment and light on the DSKY, to make sure they're all working. "Verb 16 Noun 17 Enter" displays the IMU measurements, "Verb 16 Noun 36 Enter" displays the current time and "Verb 16 Noun 43 Enter" displays the current GPS lat/long. Verb 16 indicates to display something as decimal, and the noun indicates what to display.
Other commands could be used to input data, or set what program the AGC was running, for example if you wanted to change the current running program to 67, that would be "Verb 37 Enter 67 Enter"
I know that other machines existed that used a similar system. I recall being asked, circa summer 2009 or so, to set up extensions on a quite old PABX that was configured that way.
The PABX was a huge electrical box full of giant PCBs stuck into a backplane (S-100 or maybe something proprietary?). I didn't get a good look tough, the box was mounted under the ceiling, directly above a desk with a terminal that you used for configuring it. There was a binder with laminated, typewritten cards, documenting "verbs" and "nouns" that you entered into a numeric keypad. As said, it worked like the Apollo DSKY, but the "display" was single slot that you had to squint through at just the right angle to make out faint numbers on a mirror, aimed downwards at some back projection thingy.
Original scans (featuring Margaret Hamilton!)
https://28gpc.csb.app/
The Virtual AGC Project Spaceborne Computer Systems
https://www.ibiblio.org/apollo/
The purpose of this project is to provide the original flight software and emulations of the onboard guidance computers flown in historical spacecraft, so that the flight software can be run on computers commonly available to the public today. The particular emphasis is on the Apollo Guidance Computer (AGC) flown in lunar missions in the 1960's and 1970's.
Wikipedia on the hardware:
https://en.wikipedia.org/wiki/Apollo_Guidance_Computer
So yeah I'd like to see that lol
One of the 2 nerds in the photo is Richard Stallman next to the Autonetics D-17B. An early inertial guidance system distributed to universities to study as real time computers after decommissioning.
There are also the hard disks(which the D-17B used as a clock) and gyroscopes that served as inputs.
https://www.icloud.com/sharedalbum/#B1iG4TcsmGWIVSf
Of course. According to Wikipedia, it was introduced in 1966, so it's development must have been started earlier. Also according to Wikipedia higher-level languages like Fortran and Cobol were introduced in 1957/58. They were a cutting-edge technology of the era.
So programmers of the day would have been comfortable with assembly, and the inefficiency and novelty of higher-level languages would have probably been a bad fit for the application.
> Not sure if it has any compiler.
What you're looking for is an assembler.
You can find much of that code here [1], but unless you have a Honeywell, it isn't much help. yaYUL is a modern remake, and can assemble most of the Apollo code.
[0] https://www.ibiblio.org/apollo/Documents/agcis_13_yul.pdf
[1] https://klabs.org/history/software/yul/
If your goal was to absolutely prevent any errors and you would go great lengths to do it, you would.
Just look at any safety critical systems: medical, transportation. There has been some incidents, but some systems do work really well that are developed today.