- PVSM.RU - https://www.pvsm.ru -
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 пишет: «У одного пользователя возникла довольно серьёзная проблема с криогенным перемешиванием в кислородных баках с появлением сообщения о неисправности». Для воспроизведения ошибки в программе следует повторить такую последовательность действий:
«Если в модуле есть проблема с проводкой, то ошибка может быть воспроизведена. Будьте осторожны, потому что ситуация может опасна для тестировщика, кеоторый пытается воспроизвести ошибку», — отмечает не лишённый чувства юмора разработчик на Github.
Конечно, он имеет в виду знаменитую аварию [12] с оборудованием служебного модуля «Аполлон-13», после которой модуль пришлось экстренно возвращать на Землю с помощью неординарных манёвров.
Вообще, к настоящему времени сохранилась всего одна физическая копия [13] распечаток программы лунного модуля. Книга с распечаткой хранится в музее Массачусетского технологического института.
Код программы написал Дон Айлс [14] с коллегами. Лично Айлс является автором около 2000 строк кода, которые отвечали за посадку лунного модуля.
Управляющие команды «Аполлона» можете попробовать запустить в эмуляторе [15] (это лишь симулятор компьютера, без самого космического аппарата).
Эмулятор компьютера космического аппарата Apollo
Инструкция к эмулятору Apollo
Компьютеры Apollo Command Module (CM) и Lunar Module (LM) осуществляли посадку на лунную поверхность в автоматическом режиме. Компьютер управлял двигателями и сервомоторами в реальном времени.
Бортовой управляющий компьютер КА «Аполлон»
Дисплей бортового управляющего компьютера
Управление осуществлял Apollo Guidance Computer (AGC). Бортовой компьютер оснащался ОС реального времени с поддержкой многопоточности, он управлял всеми системами, получая сигналы с радаров, телескопов, гироскопов и акселерометров.
В книге «Цифровой Аполлон [16]» хорошо рассказано, как программа расставляла приоритеты и распределяла процессорное время.
Технические спецификации бортового управляющего компьютера КА «Аполлон»
Временные эталоны работы 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/
Нажмите здесь для печати.