Содержание статьи
В 1974 году польский футуролог Ян Войцеховский выпустил свою культовую книгу «Радиоэлектронные игрушки». В ней он описал возможности устройств электронной техники тех лет, а также их предполагаемое использование в каждой сфере нашей жизни в ближайшем будущем — электроника дома и на работе, в спорте и школе, на нотных линейках и на четырех колесах; игры, робототехника и многое другое.
Один ее раздел — кибернетика — больше всего привлек мое внимание. В нем было как описание возможностей компьютеров будущего, так и схема простой модели цифровой вычислительной машины на маленьких телеграфных реле. Эта микро-ЭВМ по сути является простым арифметико-логическим устройством и позволяет складывать и вычитать двоичные числа разрядностью до трех бит. В 2008 году я собрал эту недо-ЭВМ на советских электромагнитных реле РЭС22, расширив схему до четырех бит. Она получила название «релейная цифровая вычислительная машина №1», или сокращенно — РЦВМ-1.
В то же самое время в Нижегородском политехе на одной из лабораторных работ по теоретическим основам электротехники мы изучали процесс заряда и разряда конденсатора. В экспериментальной установке конденсатор попеременно подключался то к источнику питания, то к резистору — соответственно заряжаясь и разряжаясь с частотой 50 Гц. На осциллографе рисовались кривые заряда-разряда. Переключением конденсатора туда-сюда занималось маленькое герконовое реле РЭС55, и я удивился этому факту: «обычные» реле, в которых присутствуют якорь, контактные ламели и прочие подвижные элементы, не способны переключаться быстрее, чем 10–20 раз в секунду.
Я задумал собрать полноценную электронно-вычислительную машину на реле, способную самостоятельно исполнять программы. Дальнейшие эксперименты с герконовыми реле показали, что им по силам частота переключения в 1000–1200 Герц, то есть на два порядка быстрее, чем у обычных реле. Именно этот факт привел меня к тому, что будущая машина должна быть построена на герконовых реле, чтобы иметь возможность стать самым быстрым релейным компьютером в мире из существующих или существовавших ранее.
Нет, не единственным существующим в настоящий момент. В 2004 году Гарри Портер показал миру свой первый современный компьютер на базе 415 электромагнитных реле. В четырех шкафах расположилась ЭВМ с восьмиразрядной шиной данных, 16-разрядной шиной адреса и простым набором инструкций. Программы и данные хранятся в микросхемах статической памяти на 32 Кбайта. Программы в него вводят с помощью панели программирования. Компьютер Портера способен работать на частоте порядка 5 Гц.
В 2005 году jbstanley повторил проект Портера. Его машина с названием «Релейный компьютер №2» на базе 281 реле представляет собой упрощенную архитектуру компьютера Гарри, но при этом имеет те же самые основные характеристики – 16-разрядная шина адреса, восьмиразрядная шина данных и ОЗУ на базе микросхемы статической памяти.
С тех пор появились еще как минимум полтора десятка машин разных самодельщиков, и как правило, они имеют схожие характеристики. Я тоже времени не терял. Собирал в огромных количествах герконовые реле РЭС55 и РЭС64 и проектировал свою будущую ЭВМ.
Релейная логика
Электромагнитное реле представляет собой электромагнит с блоком контактов, установленных на подвижном якоре. При подаче напряжения на катушку электромагнита якорь примагничивается к сердечнику и переключает состояние контактов. Соединяя контакты нескольких реле в различных комбинациях, мы получим логический элемент того или иного типа.
- Например, соединив нормально разомкнутые контакты двух реле последовательно, мы получим логический элемент 2И. Сигнал на выходе будет тогда, когда напряжение будет подано на оба реле.
- Соединив эти же самые контакты, но параллельно, получим 2ИЛИ — сигнал на выходе будет, если хотя бы на одно реле подано напряжение.
- Два последовательно соединенных нормально замкнутных контакта дадут логический элемент 2ИЛИ-НЕ.
- Они же, по параллельно соединенные — 2И-НЕ.
INFO
Более подробно про цифровую логику читай в статье «Основы цифровой схемотехники. Собираем сумматор».
Элементов 2И-НЕ или 2ИЛИ-НЕ достаточно, чтобы создать любую логическую схему. Каждый из них образует функционально полный логический базис. Говоря простым языком, они «Тьюринг-полные» в понятиях булевой логики. А если можно создать такой логический элемент, то и полноценная ЭВМ — не проблема.
РЦВМ-2 Buzzy
Изначально за основу этой машины я взял микроконтроллерную архитектуру MSP430. Это полноценная 16-разрядная архитектура с единым адресным пространством для кода и данных. Здесь всего 27 инструкций, из них 11 — математические операции АЛУ. 16 регистров общего назначения, ортогональная система доступа к памяти — что может быть лучше?
На рисунке выше представлена принципиальная схема АЛУ будущего компьютера для одного бита. Каждый прямоугольный блок — это простейший логический элемент на базе одного или нескольких реле. С одной стороны, выглядит несложно — много однотипных элементов. С другой стороны, на один бит требуется 36 реле — или 576 реле на 16-разрядное АЛУ. С учетом 16 регистров по 16 бит каждый, кучи логики, защелок, декодера инструкций и т.д. общее количество реле, требуемое для осуществления этой задумки, быстро перевалило за три тысячи. И тут на помощь пришел Brainfuck.
Язык программирования Brainfuck
Brainfuck — пожалуй, самый популярный из эзотерических языков программирования. А заодно самая настоящая Тьюринг-полная трясина. Всего лишь восемь инструкций, на которых можно писать все что угодно, но очень долго. К примеру, на то, чтобы написать и отладить программу деления двух целых чисел, которая печатает в терминал результат с шестью знаками после запятой, у меня ушло три дня.
Весь синтаксис языка строится вокруг ОЗУ на 30 тысяч ячеек памяти с разрядностью 8 бит.
- Двумя инструкциями
+
и-
мы изменяем значение в текущей ячейке данных на единицу больше или меньше. - Двумя инструкциями
<
и>
мы изменяем на единицу указатель на текущую ячейку данных, тем самым перемещаясь по памяти. - Еще две инструкции —
[
и]
— позволяют нам организовать циклы. Все, что внутри скобок, является телом цикла. Вложенные циклы допускаются. Логика инструкции проста — если значение текущей ячейки данных не равно нулю, мы выполним одну итерацию цикла, если равно, то выходим из него. - Последние две инструкции —
.
и,
. Они позволяют вывести значение текущей ячейки в терминал или ввести его с устройства ввода в ОЗУ. Это позволяет писать интерактивные программы.
Да, этого более чем достаточно для написания любой программы. Существование компиляторов из языка C в Brainfuck подтверждает это. Но плотность кода — никакущая. Для выполнения простейших операций, например сложения двух переменных, требуется исполнить сотни инструкций Brainfuck. В этом и заключается вся академическая прелесть языка, и в результате многие программисты практикуются в создании программ на нем. Они уже написали тысячи приложений, и, если мы сможем исполнять их на релейном компьютере, это будет хорошо.
Brainfuck++
Есть небольшой вариант оптимизации плотности кода на Brainfuck. Программы в большинстве своем состоят из последовательностей инструкций + — < >
. Например, десять операций инкремента мы можем заменить на равноценную операцию +10
. Двадцать операций сдвига указателя вправо — на операцию > 20
и так далее. В итоге некоторые программы потребуют на 20–30% меньше тактов, а какие-то будут ускорены в несколько раз.
Таким образом, в 2016 году мое техническое задание на разработку релейного компьютера приняло окончательный вид. Я решил создать полноценный компьютер на базе герконовых реле со следующими характеристиками.
- Набор инструкций Brainfuck++.
- Полноценная 16-разрядная архитектура фон Неймана — и шина адреса, и шина данных шириной 16 бит. Программы на Brainfuck, как правило, восьмиразрядные, так что требуется обеспечить обратную совместимость.
- Декодирование инструкций и все вычисления реализованы на релейной логике.
- Рабочая частота — многократно превышающая существующие решения на реле (то есть существенно выше пяти инструкций в секунду).
- ОЗУ на базе микросхем SRAM (как и у других самодельщиков).
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»