Операция BrainfuckPC. Как я построил самый безумный релейный компьютер и не стал на этом останавливаться

Спаяв десять лет назад свою первую схему на электромагнитных реле, способную сложить два числа, я подумал: вот было бы здорово создать полноценный компьютер на тысяче релюшек! Не знал я тогда, что крепко подсяду на такое хобби и после воплощения затеянного замахнусь не только на ламповую ЭВМ, но и на компьютер на базе утерянной технологии создания логических элементов, работающей на струе воздуха.
Релейный компьютер BrainfuckPC на фоне его автора

В 1974 году польский футуролог Ян Войцеховский выпустил свою культовую книгу «Радиоэлектронные игрушки». В ней он описал возможности устройств электронной техники тех лет, а также их предполагаемое использование в каждой сфере нашей жизни в ближайшем будущем — электроника дома и на работе, в спорте и школе, на нотных линейках и на четырех колесах; игры, робототехника и многое другое.

Ян Войцеховский. «Радиоэлектронные игрушки»

Один ее раздел — кибернетика — больше всего привлек мое внимание. В нем было как описание возможностей компьютеров будущего, так и схема простой модели цифровой вычислительной машины на маленьких телеграфных реле. Эта микро-ЭВМ по сути является простым арифметико-логическим устройством и позволяет складывать и вычитать двоичные числа разрядностью до трех бит. В 2008 году я собрал эту недо-ЭВМ на советских электромагнитных реле РЭС22, расширив схему до четырех бит. Она получила название «релейная цифровая вычислительная машина №1», или сокращенно — РЦВМ-1.

Релейная цифровая вычислительная машина №1. Реле, светодиоды и ворох проводов

В то же самое время в Нижегородском политехе на одной из лабораторных работ по теоретическим основам электротехники мы изучали процесс заряда и разряда конденсатора. В экспериментальной установке конденсатор попеременно подключался то к источнику питания, то к резистору — соответственно заряжаясь и разряжаясь с частотой 50 Гц. На осциллографе рисовались кривые заряда-разряда. Переключением конденсатора туда-сюда занималось маленькое герконовое реле РЭС55, и я удивился этому факту: «обычные» реле, в которых присутствуют якорь, контактные ламели и прочие подвижные элементы, не способны переключаться быстрее, чем 10–20 раз в секунду.

Герконовые реле РЭС55, РЭС64 и РЭС43, использованные в проекте

Я задумал собрать полноценную электронно-вычислительную машину на реле, способную самостоятельно исполнять программы. Дальнейшие эксперименты с герконовыми реле показали, что им по силам частота переключения в 1000–1200 Герц, то есть на два порядка быстрее, чем у обычных реле. Именно этот факт привел меня к тому, что будущая машина должна быть построена на герконовых реле, чтобы иметь возможность стать самым быстрым релейным компьютером в мире из существующих или существовавших ранее.

Нет, не единственным существующим в настоящий момент. В 2004 году Гарри Портер показал миру свой первый современный компьютер на базе 415 электромагнитных реле. В четырех шкафах расположилась ЭВМ с восьмиразрядной шиной данных, 16-разрядной шиной адреса и простым набором инструкций. Программы и данные хранятся в микросхемах статической памяти на 32 Кбайта. Программы в него вводят с помощью панели программирования. Компьютер Портера способен работать на частоте порядка 5 Гц.

Релейный компьютер Гарри Портера на фоне его автора

В 2005 году jbstanley повторил проект Портера. Его машина с названием «Релейный компьютер №2» на базе 281 реле представляет собой упрощенную архитектуру компьютера Гарри, но при этом имеет те же самые основные характеристики – 16-разрядная шина адреса, восьмиразрядная шина данных и ОЗУ на базе микросхемы статической памяти.

Релейный мини-компьютер №2

С тех пор появились еще как минимум полтора десятка машин разных самодельщиков, и как правило, они имеют схожие характеристики. Я тоже времени не терял. Собирал в огромных количествах герконовые реле РЭС55 и РЭС64 и проектировал свою будущую ЭВМ.

Релейная логика

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

  • Например, соединив нормально разомкнутые контакты двух реле последовательно, мы получим логический элемент 2И. Сигнал на выходе будет тогда, когда напряжение будет подано на оба реле.
  • Соединив эти же самые контакты, но параллельно, получим 2ИЛИ — сигнал на выходе будет, если хотя бы на одно реле подано напряжение.
  • Два последовательно соединенных нормально замкнутных контакта дадут логический элемент 2ИЛИ-НЕ.
  • Они же, по параллельно соединенные — 2И-НЕ.

INFO

Более подробно про цифровую логику читай в статье «Основы цифровой схемотехники. Собираем сумматор».

Элементов 2И-НЕ или 2ИЛИ-НЕ достаточно, чтобы создать любую логическую схему. Каждый из них образует функционально полный логический базис. Говоря простым языком, они «Тьюринг-полные» в понятиях булевой логики. А если можно создать такой логический элемент, то и полноценная ЭВМ — не проблема.

Принципиальная схема базовых логических элементов на реле

РЦВМ-2 Buzzy

Изначально за основу этой машины я взял микроконтроллерную архитектуру MSP430. Это полноценная 16-разрядная архитектура с единым адресным пространством для кода и данных. Здесь всего 27 инструкций, из них 11 — математические операции АЛУ. 16 регистров общего назначения, ортогональная система доступа к памяти — что может быть лучше?

Принципиальная схема АЛУ проекта РЦВМ-2 для 1 бита

На рисунке выше представлена принципиальная схема АЛУ будущего компьютера для одного бита. Каждый прямоугольный блок — это простейший логический элемент на базе одного или нескольких реле. С одной стороны, выглядит несложно — много однотипных элементов. С другой стороны, на один бит требуется 36 реле — или 576 реле на 16-разрядное АЛУ. С учетом 16 регистров по 16 бит каждый, кучи логики, защелок, декодера инструкций и т.д. общее количество реле, требуемое для осуществления этой задумки, быстро перевалило за три тысячи. И тут на помощь пришел Brainfuck.

Язык программирования Brainfuck

Brainfuck — пожалуй, самый популярный из эзотерических языков программирования. А заодно самая настоящая Тьюринг-полная трясина. Всего лишь восемь инструкций, на которых можно писать все что угодно, но очень долго. К примеру, на то, чтобы написать и отладить программу деления двух целых чисел, которая печатает в терминал результат с шестью знаками после запятой, у меня ушло три дня.

Инструкции языка Brainfuck

Весь синтаксис языка строится вокруг ОЗУ на 30 тысяч ячеек памяти с разрядностью 8 бит.

  • Двумя инструкциями + и - мы изменяем значение в текущей ячейке данных на единицу больше или меньше.
  • Двумя инструкциями < и > мы изменяем на единицу указатель на текущую ячейку данных, тем самым перемещаясь по памяти.
  • Еще две инструкции — [ и ] — позволяют нам организовать циклы. Все, что внутри скобок, является телом цикла. Вложенные циклы допускаются. Логика инструкции проста — если значение текущей ячейки данных не равно нулю, мы выполним одну итерацию цикла, если равно, то выходим из него.
  • Последние две инструкции — . и ,. Они позволяют вывести значение текущей ячейки в терминал или ввести его с устройства ввода в ОЗУ. Это позволяет писать интерактивные программы.

Да, этого более чем достаточно для написания любой программы. Существование компиляторов из языка C в Brainfuck подтверждает это. Но плотность кода — никакущая. Для выполнения простейших операций, например сложения двух переменных, требуется исполнить сотни инструкций Brainfuck. В этом и заключается вся академическая прелесть языка, и в результате многие программисты практикуются в создании программ на нем. Они уже написали тысячи приложений, и, если мы сможем исполнять их на релейном компьютере, это будет хорошо.

Brainfuck++

Есть небольшой вариант оптимизации плотности кода на Brainfuck. Программы в большинстве своем состоят из последовательностей инструкций + — < >. Например, десять операций инкремента мы можем заменить на равноценную операцию +10. Двадцать операций сдвига указателя вправо — на операцию > 20 и так далее. В итоге некоторые программы потребуют на 20–30% меньше тактов, а какие-то будут ускорены в несколько раз.

Инструкции языка Brainfuck++

Таким образом, в 2016 году мое техническое задание на разработку релейного компьютера приняло окончательный вид. Я решил создать полноценный компьютер на базе герконовых реле со следующими характеристиками.

  • Набор инструкций Brainfuck++.
  • Полноценная 16-разрядная архитектура фон Неймана — и шина адреса, и шина данных шириной 16 бит. Программы на Brainfuck, как правило, восьмиразрядные, так что требуется обеспечить обратную совместимость.
  • Декодирование инструкций и все вычисления реализованы на релейной логике.
  • Рабочая частота — многократно превышающая существующие решения на реле (то есть существенно выше пяти инструкций в секунду).
  • ОЗУ на базе микросхем SRAM (как и у других самодельщиков).

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Artem Kashkanov: @radiolok Релейно-декатронный маньяк

Комментарии (9)

  • Крутяк ваще. Когда же я допру как это всё работает?)))

    • Когда прочтешь книгу Чальза Петцольда "Код"

  • Несколько раз подряд прочитал, что "в 2004 году Гарри ПоТТер показал эвм..."
    )))

  • Я думаю на конференции PHDays or ZeroNight С руками и ногами такой оторвут.
    А если придумать как его "взломать" то ему прямой путь на Пхдайс.!

  • Годах бы в сороковых прошлого века ему бы цены не было. Нобелевскую премию точно получил бы.

  • Я такое только только в Коде Петцольда видел. А парень сделал. Впечатляет.
    Представляю насколько большой обьем работы проделан, что-бы это все состряпать.
    Жаль, что толку мало, от этой машины, помимо ее концепутальности.

    • А в чем толк, скажем, от картины?

      Считайте это видом инженерного исскуства.

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

        • Посмотрите на эти компьютеры снова. Это ли не Россия, которую мы потеряли?