Бортовой управляющий компьютер «Аполлона»: дипстик и инженерный анализ памяти на многократно прошитых сердечниках

Автор оригинала: Ken Shirriff
  • Перевод
Расположенный на борту космического корабля «Аполлон» управляющий компьютер (Apollo Guidance Computer, AGC) помог кораблю попасть на Луну и сесть на её поверхность. ПО AGC было физически вплетено в постоянное запоминающее устройство на многократно прошитых сердечниках [core rope memory]. Кен Ширриф с единомышленниками восстанавливают AGC (на фото ниже), которому не хватает памяти на сердечниках, вместо которой установлены коробочки-симуляторы такой памяти. Эти коробочки использовались во время разработки программ и наземного тестирования, чтобы инженерам не приходилось постоянно прошивать память. У симулятора отсутствует документация, поэтому я [автор записи в блоге / прим. перев.] провел его инженерный анализ, собрал интерфейс, и мы при помощи симулятора запускали на нашем AGC программы. Однако в процессе мы столкнулись с некоторыми сложностями.


Компьютер AGC со снятой крышкой. Видно системную плату с кучей проводов. В местах для памяти видны коробочки-симуляторы. Интерфейсные платы на переднем плане современные.

Память на многократно прошитых сердечниках


В AGC находилось шесть модулей памяти на многократно прошитых сердечниках, каждый из которых хранил всего 6 килослов информации (порядка 12 Кб). Модули памяти немного напоминали ROM-картриджи для видеоигры, и хранили ПО в постоянном, но стираемом виде. Программы были записаны путём вплетания проводов, проходивших через магнитные сердечники. Проходящий через сердечник провод обозначал бит 1, а обходивший стороной – бит 0. Вплетя 192 провода через или вокруг сердечника, можно было хранить 192 бита, что давало гораздо большую плотность, чем перезаписываемая память на магнитных сердечниках, хранившая по одному биту на сердечник.


Память на многократно прошитых сердечниках (Блок I) с AGC

Изготовление такой памяти было кропотливым процессом, занимавшим 8 недель и стоившим по $15 000 за модуль. Опытные женщины продевали провода вручную, прошивая один за другим сердечники пустотелой иглой, через которую был продет провод (на фото ниже). Им помогала автоматическая система, считывавшая программу с перфоленты и располагавшая отверстие над массивом сердечников. Ткачиха продевала иголку через отверстие, проводя провод там, где нужно. После этого память монтировалась на модуле вместе с сотнями резисторов и диодов, и заливалась эпоксидкой для надёжности в полёте.


Женщина прошивает постоянную память, внося в неё программу

Симулятор памяти на многократно прошитых сердечниках


Процесс прошивания памяти требовал серьёзного времени и денег, поэтому на время тестирования и разработки требовалась альтернатива. Вместо прошитых сердечников НАСА использовала их симуляторы, позволявшие AGC загружать данные из внешней системы. Наш AGC использовался для наземного тестирования, поэтому у него не было прошитых сердечников, а был их симулятор. Он состоит из двух коробочек, подключаемых в разъёмы для прошитых сердечников, причём каждая коробочка занимает по три слота памяти. Их видно на левой стороне AGC на фото ниже, и у них круглые разъёмы военного типа для подключения к внешнему компьютеру.


Коробки симуляторов устанавливаются в левую часть AGC вместо реальных модулей памяти.

И хотя у нас есть подробная документация на AGC, я не смог найти документацию на симулятор. Пришлось применить инженерный анализ, проследив все схемы и поняв, что делают коробки. Наружное их изучение мало что даёт. С одной стороны каждой коробки есть разъём MIL-Spec для подсоединения к внешней системе. С другой стороны есть три группы по 96 контактов, подсоединяющихся к AGC. Каждая группа контактов занимает место одного модуля памяти на сердечниках.



Вскрытие коробок показало нестандартную технику сборки. Частично в контурах использовался метод, конструктивно сходный с кордвудом – компоненты крепились вертикально при помощи отверстий в металлическом блоке. С обеих сторон блока контакты были припаяны к проводам. Другие схемы в коробках использовали стандартные интегральные схемы (TTL 7400). Но в отличие от современных печатных плат, чипы крепились внутри пластиковых модулей под названием «дипстик» [Dipstik, англ. — щуп] и были смотаны вместе проводами.



Компоновка «кордвуд»


Компоновка «кордвуд» активно использовалась в AGC для создания аналоговых схем, и она же присутствует и в симуляторах памяти (см. фото ниже). Белые круги в центре – это концы резисторов и диодов, закреплённых в модуле вертикально, и с припаянными с обеих сторон контактами. Компоненты плотно упакованы, словно брёвна, из-за чего такая компоновка и называется кордвуд. Импульсные трансформаторы находятся под большими серыми кругами. Такие же есть с другой стороны модуля, и из отверстий выходят их оранжевые, жёлтые, красные и коричневые провода. Чёрные провода соединяют схему кордвуд с цифровой логикой. Вверху на фото видно колышки, на которых смонтированы диоды и резисторы, вместе с соединением с контактами, подключающимися к AGC.



Главная цель компоновки кордвуд – обеспечивать электрическую изоляцию между схемами AGC и коробками-симуляторами памяти. В современных схемах эту функцию выполняют оптоизоляторы, но симуляторы использовали вместо них небольшие импульсные трансформаторы. Поскольку каждая коробка получает сигналы, предназначенные для трёх разных модулей памяти, множество диодов объединяют три сигнала в один. Резисторы управляют током, проходящим через импульсные трансформаторы.

Разбираться в строении аналоговых кордвуд-схем было тяжело. Во-первых, компонент не видно, поскольку они интегрированы в модуль. Приходилось использовать мультиметр, чтобы понять, где они находятся. Во-вторых, поскольку в компоновке кордвуд контакты выступают с двух сторон, я много времени провёл за переворачиванием коробки в поисках нужных контактов. Наконец, я не смог придумать удобного способа нарисовать диаграмму компоновки кордвуд, не порождавшего лабиринт из линий.

Цифровая логика и дипстик


Дипстик [Dipstik] был подключаемым модулем, представленным в 1968 году для облегчения прототипирования интегральных схем. Он заменил печатные платы системой упаковки, дававшей удвоенную плотность.



Идея состояла в пластиковом блоке коннектора с соединением контактов накруткой снизу для соединения схемы. Интегральные схемы устанавливались на держатель, вставлявшийся в блок коннекторов. У держателя сверху были ушки для пайки для установки дополнительных компонентов, например, развязывающих конденсаторов. На фото ниже показаны модули дипстик с одним вынутым держателем. На каждом держателе помещалось 5 ИС. Контакты ИС помещались между контактами держателя и контактами блока коннектора. Эта идея казалась хорошей, однако в итоге была ненадёжной. Дипстик оказался провальным проектом.



Ниже на фото показаны соединённые при помощи накрутки проводов контакты с нижней части дипстиков. Мне было чрезвычайно трудно их отслеживать, невозможно было идти по каждому проводочку в море одинаковых синих проводов. Мне приходилось прозванивать всё мультиметром. Затем я уже смог нарисовать схематическую диаграмму и думать над тем, что она делает. В сумме в симуляторе использовалось порядка 50 ИС.



Судя по маркировке компонентов, коробки симулятора собирали в 1971-м. И хотя тогда прошло лишь несколько лет с момента проектирования AGC, технологии в симуляторах уже выглядят более продвинутыми, что иллюстрирует быстрый прогресс ИС с середины 1960-х до начала 1970-х. AGC был собран на основе простых интегральных схем, в каждой из которых содержится два вентиля NOR и встроена примитивная резисторно-транзисторная логика (РТЛ). В коробках симуляторов есть уже более сложные чипы 7400-й серии, содержащие более десяти элементов на транзисторно-транзисторная логике (ТТЛ). В отличие от устаревших плоских ИС в AGC, коробки симуляторов используют микросхемы в корпусе DIP (dual in-line package), а такие корпуса используются до сих пор.

Результаты инженерного анализа


Отследив все контуры, я понял, как работает симулятор, и нарисовал схемы. По сути, одна коробка декодирует адрес, с которому идёт доступ, а вторая отправляет нужные данные в AGC (назову их «адресной коробкой» и «коробкой данных»).

Адресная коробка получает сигналы и преобразует их в двоичный вид. Задача не простая, поскольку сигналы приходят в виде импульсов тока большой мощности и напряжения 14 В, которые предназначены для переключения сердечников. Также эти импульсы разделены во времени, поскольку одни переключают сердечник в одну сторону, а другие – обратно. Наконец, импульсы отправляющиеся к сердечникам, содержат не только адрес, но и сигнал на выбор одного из 6 модулей, и на выбор одной из 12 нитей в модуле.

Адресная коробка использует импульсные преобразователи, превращая импульсы 14 В в ТТЛ-сигналы. Там содержится куча логики AND-OR для преобразования сигналов в двоичные адреса (а это нетривиально, поскольку в каждом модуле содержится по 6 килослов, это не степень двойки, поэтому требуется множество побитовых манипуляций). Флип-флоп блокирует адрес, когда тот доступен. Наконец, RC-цепь мультивибратора управляет таймингом, определяя на основании различных сигналов готовность адреса, и то, когда нужно отправлять результат в AGC.

Коробка с данными устроена проще. Она получает 16 бит данных от внешней системы и отправляет сигналы в усилители AGC, симулируя милливольтные сигналы от сердечника. Эти сигналы генерируются импульсными преобразователями. Адресная коробка и коробка данных общаются по проводам объединяющей панели AGC.

С внешней системой коробки общаются по дифференциальным сигналам, чтобы исключить шум от длинных кабелей. В коробках содержатся регуляторы на 5 В LM109, питающие ТТЛ. Одна коробка получает нерегулируемый DC через внешний разъём и отправляет нерегулируемый DC в другую через объединяющую панель AGC (что, как по мне, довольно странно).



BeagleBone в качестве интерфейса


Разобравшись с работой симулятора, дальше нужно было создать интерфейс, способный выдавать данные от программы в симулятор. Я использовал BeagleBone, крохотный одноплатный компьютер на базе Linux. Преимущество BeagleBone в том, что на нём стоят быстрые микроконтроллеры, способные в реальном времени реагировать на запросы к памяти от AGC.


Интерфейсом служит плата, воткнутая в BeagleBone. Каждый из двух кабелей идёт на свою коробку симулятора.

Я разработал интерфейсную плату для подключения к BeagleBone. Она довольно простая: дифференциальные линейные приёмники AM26C32, преобразующие дифференциальные сигналы симулятора в логические сигналы 3,3 В для BeagleBone, и дифференциальные линейные драйверы AM26C31 для отправки сигналов в симулятор. Плату я спроектировал в KiCad и заказал изготовление у PCBWay, спонсора восстановления AGC.

Я написал программу, работающую на микроконтроллере BeagleBone, PRU. Это, по сути, конечный автомат, ожидающий адреса от симуляторной коробки, ожидающий сигнала тайминга, читающий слово из BeagleBone RAM, и отправляющий слово в симулятор. Программу я выложил на Github.

Проблемы с симулятором


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



Больше всего проблем было с дипстиками, поскольку многие контакты перемежались между дипстиками и ИС. Проблема была в том, что контакты ИС располагались на манер сэндвича между контактами на держателе дипстика и блока, куда они вставлялись. Пластиковые дипстики выгибаются наружу, из-за чего контакты периодически не работают. Согнув ножки ИС в виде буквы S, Марк сумел обеспечить им контакт с обеих сторон, по крайней мере, на некоторое время. Но через несколько часов мягкие ножки ИС выгибались обратно, контакты вновь начинали работать плохо, поэтому долговременного решения этой проблемы у нас не было.

Самой интересной проблемой была гонка двух сигналов от AGC, которые должны были прекращаться одновременно. Они питали оба конца катушки импульсного преобразователя, который не должен был выдавать сигнал. Однако один сигнал отставал от другого, что приводило к появлению паразитного импульса. К сожалению, цифровая логика в коробке симулятора была асинхронной, этот импульс блокировал неверный бит адреса в флип-флопах, и в результате происходил доступ к неправильному месту в памяти. В итоге мы отследили эту проблему и установили дополнительные конденсаторы, фильтрующие импульс. К сожалению, мы взяли слишком большие конденсаторы и сигнал в других случаях задерживался слишком сильно, что привело к появлению других ошибок. Потом мы поставили конденсаторы поменьше, и, наконец, сумели успешно запускать на AGC программы при помощи винтажных симуляторов памяти на сердечниках.

Заключение


Бортовой управляющий компьютер «Аполлона» использует память на многократно прошитых сердечниках. Поскольку во время разработки постоянно переделывать такую память было бы непрактично, вместо неё использовались симуляторы. Я провёл инженерный анализ симулятора и создал интерфейс для его работы при помощи BeagleBone. Мы с успехом запустили программы на AGC посредством этого интерфейса. Однако симулятор памяти оказался проблемным и ненадёжным.

@CuriousMarc сделал видео, где подробно показана наша работа с симулятором памяти:

Поддержать автора
Поделиться публикацией

Комментарии 25

    +3
    Низкий поклон таким людям
      +3
      Кто смог разработать и собрать такую адскую схему? Блин, а ведь на этом еще летали…
        +1
        В сумме в симуляторе использовалось порядка 50 ИС.

        С учётом степени интеграции — ничего адского.
        Это не летало, а использовалось при отладке.
          +1
          не сложно смотреть на план заказа? да и годы 60х
        +1
        Жесть.
        Интересно каких размеров этот компьютер был бы сегодня, при нынешних технологиях?
          +10
          При нынешних технологиях это микроконтроллер размером с ноготь.
            0
            Вся цифровая часть займёт какие-то доли квадратного миллиметра, так что всё будет зависеть от того, к чему этот компьютер нужно будет подключать…
              0
              Думаю что STM32F103C8T6 справился бы с ролью такого компьютера.
              +16
              Так вот, откуда появилось слово «прошивка»!
                0
                Кстати, нормы перепрошивки на компьютере "Мир": 1 провод — 1 день отгула. Мир умел интегрировать символьные выражения, но в не были баги. Вот эти баги и приходилось перепрошивать, чем знакомая и занималась время от времени.
                  +1

                  Ага, именно с тех пор, когда память прошивали буквально, и осталось.

                  +5
                  Фраза «прошивать память» приобрела более четкие формы)
                    +7
                    Слава роботам гуглопереводу. Кровь-из-глаз.
                      +1
                      «схематическая диаграмма», «флип-флоп»… хи-хи
                      +1
                      На днях попалось на YouTube:
                      How did NASA Steer the Saturn V?



                      Совпадение? :)
                      –20

                      Опять суки американские пиарятся и подделывают свою историю. А недоразвитые и неокрепшие умишки из числа программистов слушают развесив уши )).
                      Флип флоп — это RS триггер. "Прошивка" — не поэтому. Это слово возникает само собой у русских. "Устаревшие плоские корпуса микросхем" — это смешное умозаключение недоразвитого американского программиста )).

                        +1
                        За второй абзац плюсанул. Но это, скорее, машинный перевод не облагороженный человеком, знакомым хотя-бы с терминологией.
                        Первый — таки мало понятен. Да и мало уместен — Хабр весьма чопорен.
                        0
                        Помню в детстве мне такая плата с ферритовыми кольцами досталась. Проводочки из нее трудно выплетать…
                        Гораздо позже узнал, что это какая-то память.
                          0
                          Однако один сигнал отставал от другого, что приводило к появлению паразитного импульса
                          Когда мы в НИИ проектировали и тестировали цифровые устройства, тоже было много проблем из-за этого. И я тогда сказал, что перейдя от аналога к цифре, мы просто сменили плоскость амплитуды на плоскость времени. Но, принципиально, аналоговость осталась, просто она перешла во временную плоскость. И неважно, вводим мы дискретность по времени (синхронизация) или дискретность по амплитуде, для повышения помехоустойчивости — решения идентичны «по принципу», хотя и разные по реализации.
                            0
                            Есть интересный плейлист по востановлению одного из таких компютеров
                              0
                              Это как раз один из эпизодов оттуда…
                              0
                              Интересно было прочитать, история. У нас к ней так бережно не относятся, бомбят крысы-металлисты советские ЭВМ на золото не задумываясь, коллекционеров мало, и денег у них еще меньше чтобы покупать те-же ДВК, Э-60, СМ в которых золота на разъемах и КМ-ок на тысячи и десятки тысяч.
                                +1
                                Не преувеличивайте, золото там есть, но не настолько много, тем более в ДВК-шках. Да и в целом состоянии это железо стоит сейчас гораздо дороже чем по цене вторсырья и металлизмом в наше время в основном занимаются больше из любви к процессу, чем ради мизерной выгоды.
                                Плюс я бы не сказал что мы такие уникальные, тот же экземпляр AGC (довольно уникальный сам по себе между прочим) про который идет речь в этой статье, владелец купил списанным под утилизацию вместе с кучами другого хлама оставшегося с программы Апполон и долго даже не подозревал что он вообще такое купил.
                                +1
                                На ютубе есть очень интересная серия роликов посвященная восстановлению и запуску конкретно этого уникального экземпляра AGC, как они восстанавливали схему, собирали свой эмулятор, считывали прошивку с другого сохранившегося музейного экземпляра AGC, целая эпопея у них была с разъемами, к которым подключалась платы переходников на первом фото, так как эти разъемы были уникальными и больше не производились, и они связались с заводом и выпустили себе уникальную партию этих коннекторов. Этот экземпляр AGC сам по себе тоже уникальный, так как на нем происходила отладка, и в отличии от более поздних модулей и тех которые летали на Луну, его составные блоки не были залиты компаундом.
                                Всем кто может нормально понимать английский настоятельно рекомендую к просмотру. Эта статья, к сожалению, переведена откровенно так себе…

                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                Самое читаемое