Исходный код Apollo 11 опубликован на Github

ebde8dbc1c4241fab5d44d897287d723.jpg

20 июля 2009 года в честь 40-летия высадки на Луну распечатки с исходным кодом программы для бортового управляющего компьютера КА «Аполлон» (Apollo Guidance Computer, AGC) были оцифрованы и выложены в интернете. Прошло семь лет — и сейчас этот уникальный образец компьютерной истории получил вторую жизнь. Сегодня исходный код для AGC на ассемблере опубликован на Github в полном виде, открыт для поиска, комментариев, форков и т.д.

В коде можно найти вызовы ставших знаменитыми ошибок с кодами 1201 и 1202, которые так беспокоили Нила Армстронга, и многое другое.
На Github репозиторий Apollo-11 быстро взлетел на 1-е место в списке самых популярных репозиториев за сутки (можно не сомневаться, что в рейтинге за неделю у него будет 1-е место уже завтра). Там действительно есть на что посмотреть. Особенно интересно почитать некоторые названия процедур (BURN_BABY_BURN--MASTER_IGNITION_ROUTINE.s) и комментарии в оригинальном коде.

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


В программе есть «временный» код, как и во многих современных программах.

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 пишет: «У одного пользователя возникла довольно серьёзная проблема с криогенным перемешиванием в кислородных баках с появлением сообщения о неисправности». Для воспроизведения ошибки в программе следует повторить такую последовательность действий:

  1. Построить сервисный модуль.
  2. Пролететь до окололунной орбиты.
  3. На окололунной орбите запустить перемешивание в кислородных баках.


«Если в модуле есть проблема с проводкой, то ошибка может быть воспроизведена. Будьте осторожны, потому что ситуация может опасна для тестировщика, кеоторый пытается воспроизвести ошибку», — отмечает не лишённый чувства юмора разработчик на Github.

Конечно, он имеет в виду знаменитую аварию с оборудованием служебного модуля «Аполлон-13», после которой модуль пришлось экстренно возвращать на Землю с помощью неординарных манёвров.

Вообще, к настоящему времени сохранилась всего одна физическая копия распечаток программы лунного модуля. Книга с распечаткой хранится в музее Массачусетского технологического института.

Код программы написал Дон Айлс с коллегами. Лично Айлс является автором около 2000 строк кода, которые отвечали за посадку лунного модуля.

Управляющие команды «Аполлона» можете попробовать запустить в эмуляторе (это лишь симулятор компьютера, без самого космического аппарата).

9ae9dd716cb8463a81d2061b80696d22.png
Эмулятор компьютера космического аппарата Apollo

529e82ca9da54cecbf96a4ba0032d603.png
Инструкция к эмулятору Apollo

Компьютеры Apollo Command Module (CM) и Lunar Module (LM) осуществляли посадку на лунную поверхность в автоматическом режиме. Компьютер управлял двигателями и сервомоторами в реальном времени.

bbc20774010b4b0dbc0f03ce3b4e78eb.jpg
Бортовой управляющий компьютер КА «Аполлон»

c4cf0770ca94494e94f30ce814f58ebf.jpg
Дисплей бортового управляющего компьютера

Управление осуществлял Apollo Guidance Computer (AGC). Бортовой компьютер оснащался ОС реального времени с поддержкой многопоточности, он управлял всеми системами, получая сигналы с радаров, телескопов, гироскопов и акселерометров.

В книге «Цифровой Аполлон» хорошо рассказано, как программа расставляла приоритеты и распределяла процессорное время.

b182ea53a18341cf80049d71bf987ba7.png

Технические спецификации бортового управляющего компьютера КА «Аполлон»
Временные эталоны работы AGC задавались кварцевым резонатором с частотой в 2,048 МГц. Память компьютера состояла из 2048 слов перезаписываемого ОЗУ и 36 К слов ПЗУ с линейной выборкой на многократно прошитых сердечниках. Цикл чтения-записи ОЗУ и ПЗУ занимал 11,72 мкс. Длина слова составляла 16 бит: 15 бит данных и 1 бит чётности. Формат 16-битного слова процессора включал в себя 14 бит данных, бит переполнения и бит знака.

См. также:
Руководство по программированию Apollo Guidance Computer

© Geektimes