Спаяв десять лет назад свою первую схему на электромагнитных реле, способную сложить два числа, я подумал: вот было бы здорово создать полноценный компьютер на тысяче релюшек! Не знал я тогда, что крепко подсяду на такое хобби и после воплощения затеянного замахнусь не только на ламповую ЭВМ, но и на компьютер на базе утерянной технологии создания логических элементов, работающей на струе воздуха.
В 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ИЛИ-НЕ достаточно, чтобы создать любую логическую схему. Каждый из них образует функционально полный логический базис. Говоря простым языком, они «Тьюринг-полные» в понятиях булевой логики. А если можно создать такой логический элемент, то и полноценная ЭВМ — не проблема.
Изначально за основу этой машины я взял микроконтроллерную архитектуру MSP430. Это полноценная 16-разрядная архитектура с единым адресным пространством для кода и данных. Здесь всего 27 инструкций, из них 11 — математические операции АЛУ. 16 регистров общего назначения, ортогональная система доступа к памяти — что может быть лучше?
На рисунке выше представлена принципиальная схема АЛУ будущего компьютера для одного бита. Каждый прямоугольный блок — это простейший логический элемент на базе одного или нескольких реле. С одной стороны, выглядит несложно — много однотипных элементов. С другой стороны, на один бит требуется 36 реле — или 576 реле на 16-разрядное АЛУ. С учетом 16 регистров по 16 бит каждый, кучи логики, защелок, декодера инструкций и т. д. общее количество реле, требуемое для осуществления этой задумки, быстро перевалило за три тысячи. И тут на помощь пришел Brainfuck.
Brainfuck — пожалуй, самый популярный из эзотерических языков программирования. А заодно самая настоящая Тьюринг-полная трясина. Всего лишь восемь инструкций, на которых можно писать все что угодно, но очень долго. К примеру, на то, чтобы написать и отладить программу деления двух целых чисел, которая печатает в терминал результат с шестью знаками после запятой, у меня ушло три дня.
Весь синтаксис языка строится вокруг ОЗУ на 30 тысяч ячеек памяти с разрядностью 8 бит.
+
и -
мы изменяем значение в текущей ячейке данных на единицу больше или меньше.<
и >
мы изменяем на единицу указатель на текущую ячейку данных, тем самым перемещаясь по памяти.[
и ]
— позволяют нам организовать циклы. Все, что внутри скобок, является телом цикла. Вложенные циклы допускаются. Логика инструкции проста — если значение текущей ячейки данных не равно нулю, мы выполним одну итерацию цикла, если равно, то выходим из него..
и ,
. Они позволяют вывести значение текущей ячейки в терминал или ввести его с устройства ввода в ОЗУ. Это позволяет писать интерактивные программы.Да, этого более чем достаточно для написания любой программы. Существование компиляторов из языка C в Brainfuck подтверждает это. Но плотность кода — никакущая. Для выполнения простейших операций, например сложения двух переменных, требуется исполнить сотни инструкций Brainfuck. В этом и заключается вся академическая прелесть языка, и в результате многие программисты практикуются в создании программ на нем. Они уже написали тысячи приложений, и, если мы сможем исполнять их на релейном компьютере, это будет хорошо.
Есть небольшой вариант оптимизации плотности кода на Brainfuck. Программы в большинстве своем состоят из последовательностей инструкций + — < >
. Например, десять операций инкремента мы можем заменить на равноценную операцию +10
. Двадцать операций сдвига указателя вправо — на операцию > 20
и так далее. В итоге некоторые программы потребуют на 20–30% меньше тактов, а какие-то будут ускорены в несколько раз.
Таким образом, в 2016 году мое техническое задание на разработку релейного компьютера приняло окончательный вид. Я решил создать полноценный компьютер на базе герконовых реле со следующими характеристиками.
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее
1 год7690 р. |
1 месяц720 р. |
Я уже участник «Xakep.ru»
Читайте также
Последние новости