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

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

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

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


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

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

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

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

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


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

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

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

555a1812b9e81a2617052c60ca6a71ff.jpg

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

8fe8ea39073615e8bd9e8c38d602ab9d.jpg

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


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

41720b1d0ec7dfbf9e9443f3108dc461.jpg

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

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

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


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

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

89a1045448b287484396cc52b1e6f301.jpg

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

f1cbb195cc5471fd69765b52bb38be42.jpg

Судя по маркировке компонентов, коробки симулятора собирали в 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 (что, как по мне, довольно странно).

8d68ce29d2ef683f1c059ae405f7a3ec.jpg

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


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

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

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

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

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


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

4a0698fe2f8ad8f4717d966bffc3a3e4.jpg

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

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

Заключение


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

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

© Habrahabr.ru