20 июля 2009 года в честь 40-летия высадки на Луну распечатки с исходным кодом программы для бортового управляющего компьютера КА «Аполлон» (Apollo Guidance Computer, AGC) были оцифрованы и выложены в интернете. Прошло семь лет — и сейчас этот уникальный образец компьютерной истории получил вторую жизнь. Сегодня исходный код для AGC на ассемблере опубликован на Github в полном виде, открыт для поиска, комментариев, форков и т.д.
В коде можно найти вызовы ставших знаменитыми ошибок с кодами 1201 и 1202, которые так беспокоили Нила Армстронга, и многое другое.
На Github репозиторий Apollo-11 быстро взлетел на 1-е место в списке самых популярных репозиториев за сутки (можно не сомневаться, что в рейтинге за неделю у него будет 1-е место уже завтра). Там действительно есть на что посмотреть. Особенно интересно почитать некоторые названия процедур (BURN_BABY_BURN--MASTER_IGNITION_ROUTINE.s) и комментарии в оригинальном коде.
code text
CAF CODE500 # ASTRONAUT: PLEASE CRANK THE TC BANKCALL # SILLY THING AROUND CADR GOPERF1 TCF GOTOP00H # TERMINATE TCF P63SPOT3 # PROCEED SEE IF HE'S LYING TC BANKCALL # ENTER INITIALIZE LANDING RADAR CADR SETPOS1 TC POSTJUMP # OFF TO SEE THE WIZARD ... CADR BURNBABY
В программе есть «временный» код, как и во многих современных программах.
code text
TC BANKCALL # TEMPORARY, I HOPE HOPE HOPE CADR STOPRATE # TEMPORARY, I HOPE HOPE HOPE TC DOWNFLAG # PERMIT X-AXIS OVERRIDE
А вот версия 1969 года популярного комментария «Это никогда не должно произойти».
CA A # SHOULD NEVER HIT THIS LOCATION
В репозитории на Github уже создан первый тикет — обсуждение «бага», которые необходимо исправить в программе.
Разработчик SilverWingedSeraph пишет: «У одного пользователя возникла довольно серьёзная проблема с криогенным перемешиванием в кислородных баках с появлением сообщения о неисправности». Для воспроизведения ошибки в программе следует повторить такую последовательность действий:
Построить сервисный модуль. Пролететь до окололунной орбиты. На окололунной орбите запустить перемешивание в кислородных баках. >
«Если в модуле есть проблема с проводкой, то ошибка может быть воспроизведена. Будьте осторожны, потому что ситуация может опасна для тестировщика, который пытается воспроизвести ошибку», — отмечает не лишённый чувства юмора разработчик на Github.
Конечно, он имеет в виду знаменитую аварию с оборудованием служебного модуля «Аполлон-13», после которой модуль пришлось экстренно возвращать на Землю с помощью неординарных манёвров.
Вообще, к настоящему времени сохранилась всего одна физическая копия распечаток программы лунного модуля. Книга с распечаткой хранится в музее Массачусетского технологического института.
Код программы написал Дон Айлс с коллегами. Лично Айлс является автором около 2000 строк кода, которые отвечали за посадку лунного модуля.
Управляющие команды «Аполлона» можете попробовать запустить в эмуляторе (это лишь симулятор компьютера, без самого космического аппарата).
Эмулятор компьютера космического аппарата Apollo
Инструкция к эмулятору Apollo
Компьютеры Apollo Command Module (CM) и Lunar Module (LM) осуществляли посадку на лунную поверхность в автоматическом режиме. Компьютер управлял двигателями и сервомоторами в реальном времени.
Бортовой управляющий компьютер КА «Аполлон»
Дисплей бортового управляющего компьютера
Управление осуществлял Apollo Guidance Computer (AGC). Бортовой компьютер оснащался ОС реального времени с поддержкой многопоточности, он управлял всеми системами, получая сигналы с радаров, телескопов, гироскопов и акселерометров.
В книге «Цифровой Аполлон» хорошо рассказано, как программа расставляла приоритеты и распределяла процессорное время.
Технические спецификации бортового управляющего компьютера КА «Аполлон»
Временные эталоны работы AGC задавались кварцевым резонатором с частотой в 2,048 МГц. Память компьютера состояла из 2048 слов перезаписываемого ОЗУ и 36 К слов ПЗУ с линейной выборкой на многократно прошитых сердечниках. Цикл чтения-записи ОЗУ и ПЗУ занимал 11,72 мкс. Длина слова составляла 16 бит: 15 бит данных и 1 бит чётности. Формат 16-битного слова процессора включал в себя 14 бит данных, бит переполнения и бит знака.
См. также:
Руководство по программированию Apollo Guidance Computer
What's the deal with "verbs" and "nouns"?
The following amusing (if not necessarily helpful) comment may be found in the source code of the keyboard and display program (otherwise known as "pinball"):
THE FOLLOWING QUOTATION IS PROVIDED THROUGH THE COURTESY OF THE AUTHORS.
"IT WILL BE PROVED TO THY FACE THAT THOU HAST MEN ABOUT THEE THAT
USUALLY TALK OF A NOUN AND A VERB, AND SUCH ABOMINABLE WORDS AS NO
CHRISTIAN EAR CAN ENDURE TO HEAR."
HENRY 6, ACT 2, SCENE 4
It turns out, though, that the authors' literary skills didn't quite match their programming skills, as this quote is really from Henry VI, Part 2, Act IV, Scene VII. (Thanks to Frank O'Brien of the Apollo Flight Journal and Apollo Lunar Surface Journal for this correction.) By the way, if you take it upon yourself to actually read the play to figure out the context, you may find yourself reading about "a Nowne and a Verbe" rather than "a noun and a verb".
Original AGC hardware developer Ramón Alonso provides a little more insight: Apparently, nobody had yet arrived at any kind of software requirements for the AGC's user interface when the desire arose within the Instrumentation Laboratory to set up a demo guidance-computer unit with which to impress visitors to the lab. Of course, this demo would have to do something, if it was going to be at all impressive, and to do something it would need some software. In short order, some of the coders threw together a demo program, inventing and using the verb/noun user-interface concept (in the whimsical fashion seen in much of this code), but without any idea that the verb/noun concept would somehow survive into the flight software. As time passed, and more and more people became familiar with the demo, nobody got around to inventing an improvement for the user interface, so the coders simply built it into the flight software without any specific requirements to do so.
However, that does not mean that the verb/noun interface was universally beloved. Ramón says that many objections were received from naysayers, such as "it's not scientific", "it's not dignified", or even "astronauts won't understand it". Even though the coders of the demo hadn't seriously intended the verb/noun interface to be used in any permanent way, it became a kind of devilish game to counter these objections with (perhaps) sophistic arguments as to why the interface was really a good one. In the end, the coders won. I don't know whether they were elated or dismayed by this victory.
The astronauts, of course, could understand the interface, but they did not like it. Most of them really wanted an interface much more like that they had used in aircraft: i.e., lots of dials and switches. Dave Scott is the the only astronaut I'm aware of who had kind words for it (or for the AGC in general), though we are told that Jim McDivitt wasn't necessary completely hostile to it.