- PVSM.RU - https://www.pvsm.ru -

Исходный код «Аполлона-11» опубликован на Github

Исходный код «Аполлона-11» опубликован на Github - 1

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

В коде можно найти вызовы ставших знаменитыми ошибок с кодами 1201 [4] и 1202 [5], которые так беспокоили Нила Армстронга, и многое другое.

На Github репозиторий Apollo-11 [6] быстро взлетел на 1-е место [7] в списке самых популярных репозиториев за сутки (можно не сомневаться, что в рейтинге за неделю [8] у него будет 1-е место уже завтра). Там действительно есть на что посмотреть. Особенно интересно почитать некоторые названия процедур (BURN_BABY_BURN--MASTER_IGNITION_ROUTINE.s [9]) и комментарии в оригинальном коде.

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 года [10] популярного комментария «Это никогда не должно произойти».

CA	A		# SHOULD NEVER HIT THIS LOCATION

В репозитории на Github уже создан первый тикет [11] — обсуждение «бага», которые необходимо исправить в программе.

Разработчик SilverWingedSeraph пишет: «У одного пользователя возникла довольно серьёзная проблема с криогенным перемешиванием в кислородных баках с появлением сообщения о неисправности». Для воспроизведения ошибки в программе следует повторить такую последовательность действий:

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

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

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

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

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

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

Исходный код «Аполлона-11» опубликован на Github - 2
Эмулятор компьютера космического аппарата Apollo

Исходный код «Аполлона-11» опубликован на Github - 3
Инструкция к эмулятору Apollo

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

Исходный код «Аполлона-11» опубликован на Github - 4
Бортовой управляющий компьютер КА «Аполлон»

Исходный код «Аполлона-11» опубликован на Github - 5
Дисплей бортового управляющего компьютера

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

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

Исходный код «Аполлона-11» опубликован на Github - 6

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

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

Автор: alizar

Источник [18]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/programmirovanie/152593

Ссылки в тексте:

[1] Apollo Guidance Computer: https://ru.wikipedia.org/wiki/Бортовой_управляющий_компьютер_КА_Аполлон

[2] выложены в интернете: http://www.ibiblio.org/apollo/listings/Comanche055/

[3] опубликован на Github: https://github.com/chrislgarry/Apollo-11/

[4] 1201: https://github.com/chrislgarry/Apollo-11/blob/dc4ea6735c464608d704fa183f3e3d08b013c42f/EXECUTIVE.s#L134

[5] 1202: https://github.com/chrislgarry/Apollo-11/blob/dc4ea6735c464608d704fa183f3e3d08b013c42f/EXECUTIVE.s#L200

[6] Apollo-11: https://github.com/chrislgarry/Apollo-11

[7] взлетел на 1-е место: https://github.com/trending

[8] за неделю: https://github.com/trending?since=weekly

[9] BURN_BABY_BURN--MASTER_IGNITION_ROUTINE.s: https://github.com/chrislgarry/Apollo-11/blob/dc4ea6735c464608d704fa183f3e3d08b013c42f/BURN_BABY_BURN--MASTER_IGNITION_ROUTINE.s

[10] версия 1969 года: https://github.com/chrislgarry/Apollo-11/blob/dc4ea6735c464608d704fa183f3e3d08b013c42f/IMU_PERFORMANCE_TESTS_4.s#L105

[11] первый тикет: https://github.com/chrislgarry/Apollo-11/issues/3

[12] аварию: https://ru.wikipedia.org/wiki/Аполлон-13#.D0.90.D0.B2.D0.B0.D1.80.D0.B8.D1.8F

[13] всего одна физическая копия: http://hackaday.com/2016/07/05/don-eyles-walks-us-through-the-lunar-module-source-code/

[14] Дон Айлс: http://www.doneyles.com/LM/Tales.html

[15] эмуляторе: http://svtsim.com/moonjs/agc.html

[16] Цифровой Аполлон: https://www.amazon.com/Digital-Apollo-Human-Machine-Spaceflight/dp/0262516101

[17] Руководство по программированию Apollo Guidance Computer: http://www.ibiblio.org/apollo/assembly_language_manual.html

[18] Источник: https://geektimes.ru/post/278208/