What a truly inspiring human being. I can only dream of aspiring to her levels of contribution.
Check out some of the Apollo 11 code for the Lunar Module's (LM) Apollo Guidance Computer (AGC). It's just awesome browsing through it, reading the comments, and thinking about the zeitgeist of being on a team that was working on something of that world-altering magnitude.
"There was no second chance. We all knew that. We took our work very seriously, but we were young, many of us in our 20s. Coming up with new ideas was an adventure. Dedication and commitment were a given. Mutual respect was across the board. Because software was a mystery, a black box, upper management gave us total freedom and trust. We had to find a way and we did. Looking back, we were the luckiest people in the world; there was no choice but to be pioneers; no time to be beginners." - Margaret Hamilton
- - -
Edit: OK, this is interesting. Note the filename. The filename and comments suggest that it was for driving keyboard and information display...
According to wikipedia
"The onboard guidance software used a Kalman filter to merge new data with past position measurements to produce an optimal position estimate for the spacecraft."
https://en.wikipedia.org/wiki/Apollo_PGNCS
In turn the main source of navigation information came from mission control using least squares. A source on that would be nice too!
A lot of people will find it hard believing how smaller code can be in assembly than in our supposedly higher level languages, e.g, look at this example of quicksort, http://en.wikibooks.org/wiki/Algorithm_Implementation/Sortin...
go down to the C example below and note that it's longer.
The scalar case is not so bad; typically the filter is taught using the vector-input/vector-state case, which is more complex.
I can't make heads or tails of the assembler listing either. The specific thing I would look for in the assembler code is the division operation which is required to find the Kalman gain. I don't see it.
The amazing thing from my point of view is not the implementation. It is rather that the theory, which was quite novel at the time, was only understood and published in 1960/61. To have it used in a flight system, and indeed a manned flight system, only 8 years later is really incredible.
Check out some of the Apollo 11 code for the Lunar Module's (LM) Apollo Guidance Computer (AGC). It's just awesome browsing through it, reading the comments, and thinking about the zeitgeist of being on a team that was working on something of that world-altering magnitude.
Code Library:
https://code.google.com/p/virtualagc/source/browse/trunk/Lum...
KALMAN_FILTER.agc
https://code.google.com/p/virtualagc/source/browse/trunk/Lum...
LAMBERT_AIMPOINT_GUIDANCE.agc
https://code.google.com/p/virtualagc/source/browse/trunk/Lum...
LANDING_ANALOG_DISPLAYS.agc
https://code.google.com/p/virtualagc/source/browse/trunk/Lum...
LUNAR_AND_SOLAR_EPHEMERIDES_SUBROUTINES.agc
https://code.google.com/p/virtualagc/source/browse/trunk/Lum...
LUNAR_LANDING_GUIDANCE_EQUATIONS.agc
https://code.google.com/p/virtualagc/source/browse/trunk/Lum...
- - -
Incredible quote:
"There was no second chance. We all knew that. We took our work very seriously, but we were young, many of us in our 20s. Coming up with new ideas was an adventure. Dedication and commitment were a given. Mutual respect was across the board. Because software was a mystery, a black box, upper management gave us total freedom and trust. We had to find a way and we did. Looking back, we were the luckiest people in the world; there was no choice but to be pioneers; no time to be beginners." - Margaret Hamilton
- - -
Edit: OK, this is interesting. Note the filename. The filename and comments suggest that it was for driving keyboard and information display...
PINBALL_GAME_BUTTONS_AND_LIGHTS.agc
https://code.google.com/p/virtualagc/source/browse/trunk/Lum...