Введение


Давным давно, когда вокруг все было большим, а я маленьким, читал я книгу Войцеховского «Радиоэлектронные игрушки», горя желанием воплотить в жизнь те или иные описанные в ней устройства. Так, в уже тоже далеком 2008-м году, из нескольких десятков электромагнитных реле было собрано 4-разрядное АЛУ (РЦВМ1 — Релейная Цифровая Вычислительная Машина — версия 1) способное складывать и вычитать. И задумал я тогда — а что если собрать существенно большее количество реле и построить полноценный релейный компьютер? На неспешную сборку реле то здесь то там до требуемого количества ушло всего 8 лет, и я начал творить.


Разрешите представить Вам свой проект по созданию второй версии релейной цифровой вычислительной машины, с кодовым названием «BrainfuckPC» — 16-разрядной компьютер с Фон-Неймановской архитектурой и набором инструкций для языка Brainfuck. Работы по проектированию завершены, и я в процессе изготовления сего монстра.


1 Технические характеристики


  • Разрядность шины адреса: 16 бит
  • Адресация: пословная, 16 бит/слово
  • Емкость памяти: 64 килослова (128Кбайт)
  • Разрядность шины данных: 16 бит
  • Единое адресное пространство кода и данных (Архитектура Фон-Неймана)
  • Тактовая частота (проектная): 100 Гц, 1 инструкция/такт
  • Набор инструкций: Brainfuck++
  • Количество реле (проектное): 792
  • Используемые реле: герконовые, РЭС55(1п), РЭС64(1з)

Подробности подкатом


Общий принцип работы


Рассмотрим обобщенную структуру компьютера:



Рисунок 1: Обобщенная структура компьютера


Центральным элементом является Сумматор, причем не простой, а с параллельным переносом. Зачем это нужно — расскажу чуть ниже.


Программа и данные хранятся в блоке памяти. Доступ к ним осуществляется по адресу, записанному в регистре инструкций IP, либо в регистре адреса AP, исходя из того, что мы сейчас хотим прочитать — данные по адресу, указанному в AP, либо инструкцию, записанную по адресу IP.


Чтобы оперировать этой лентой Тьюринга (а Brainfuck язык программирования отождествляет именно её), нам надо иметь возможность совершить одно из трех действий:


  • Изменять значение в текущей ячейке данных, то бишь делать операции Add/Sub. В Brainfuck значение в ячейке можно изменить только на единицу, т.е. +1 либо -1. Но имея полноценный сумматор грешно не схлопнуть длинные цепочки ++++++++++++(------------) в одну операцию AP+=N(AP-=N) существенно ускорив процесс вычисления. (также не забудем превратить [-](или [+]) в *AP=0);
  • Изменять номер текущей выбранной ячейки данных. То бишь гулять по памяти данных (AP++, AP--);
  • Изменять номер текущей инструкции. Во-первых, нам нужно после выполнения каждой инструкции увеличивать значение в регистре IP на единицу. Во-вторых, изменять это значение при наличии ветвлений в коде (по умолчанию для организации циклов). Контрольный флаг всего один — Z. Соответственно есть команды JumpIfZero и JumpIfNotZero.

Итого нам надо иметь возможность подавать на один вход сумматора значение любого из следующих трех блоков — AP-регистра, IP-регистра, DATA-шины. Делать это будем через временный регистр, в котором будем сохранять одно из требуемых значений, подключая нужный с помощью 16-разрядных ключей.


На второй вход сумматора будем подавать число, на которое одно из этих значений должно изменяться в плюс или минус. В виду ограниченной ширины инструкции, изменять можно только на +-12битное число. Впрочем для Brainfuck это более чем достаточно("хватит всем", ага).
Брать эти 12 бит мы будем с регистра команд, при наличии таких команд естественно, ибо часть команд не использует сумматор вовсе. Не забудем что отрицательные числа будут подаваться в дополненном коде, с подачей на доп. вход переноса единицы (т.е. будет A+ invB + 1)


Результат вычисления сразу загружаем туда, откуда мы его взяли. Из-за временного регистра делать это мы можем безболезненно.


Более подробно (я бы даже сказал — занудно) об архитектуре можно узнать из этого видео:



Набор инструкций


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


Общее описание инструкции


Все инструкции 16-разрядные. Формируются из нескольких частей.


  • Биты 15, 14, 13 — определяют класс инструкции
  • Бит 12 — Знаковый бит для знаковых инструкций
  • Биты 11-0 — содержат младшие 12 бит знакового int-a. Старшие 4 бита формируются согласно значению 12-го бита.

Таблица инструкций


Инструкция Опкод Операция Эквивалент из Brainfuck Описание
add m16 0X XX AP < AP + m16 '+' (Повторить m16 раз) Прибавляет базу к текущему значению выбранной ячейки
sub m16 1X XX AP < AP — m16 '-' (Повторить m16 раз) Соответственно вычитает базу из числа
ada m16 2X XX AP < AP + m16 '>' (Повторить m16 раз) Увеличивает значение адреса
ads m16 3X XX AP < AP — m16 '<' (Повторить m16 раз) Уменьшает значение адреса
jz m16 4X XX (*AP == 0)? IP < IP + m16: IP < IP '[' Идти на IP + m16 если значение текущей ячейки равно нулю
jz m16 5X XX (*AP == 0)? IP < IP — m16: IP < IP Нет Идти на IP — m16 если значение текущей ячейки равно нулю
jnz m16 6X XX (*AP != 0)? IP < IP + m16: IP < IP Нет Идти на IP + m16 если значение текущей ячейки не равно нулю
jnz m16 7X XX (*AP != 0)? IP < IP — m16: IP < IP ']' Идти на IP — m16 если значение текущей ячейки не равно нулю
and m16 8X XX AP < AP AND m16 Нет Логическое AND с положительным числом
and m16 9X XX AP < AP AND m16 Нет Логическое AND с отрицательным числом (кто-то же должен сформировать старшие 4 бита)
or m16 aX XX AP < AP OR m16 Нет Логическое OR с положительной константой
or m16 bX XX AP < AP OR m16 Нет Логическое OR с отрицательной константой
in c0 00 *AP < CIN ',' Прочитать один m8 символ из консоли. Если входной буфер пуст — подождать его
out c0 01 COUT < *AP '.' Вывести m8 символ в консоль
clr.ap d0 01 AP < 0 Нет Очистить AP регистр. Команда допускает комбинирование
clr.ip d0 02 IP < 0 Нет Очистить IP регистр. Команда допускает комбинирование
clr.dp d0 04 *AP < 0 '[+]' or '[-]' Очистить ячейку памяти. Команда допускает комбинирование
set.ap d0 10 AP < *AP Нет Записать текущее значение в AP регистр
set.ip d0 20 IP < *AP Нет Записать текущее значение в IP регистр
get.ap d1 00 *AP < AP Нет Считать текущее значение из AP регистра
get.ip d2 00 *AP < IP Нет Считать текущее значение из IP регистра
mode.b8 e1 00 Нет Активация 8-разрядного режима (1)
mode.b16 e2 00 Нет Активация 16-разрядного режима
halt f0 00 Нет Стоп машина

  • AP — Регистр адреса
  • IP — Регистр Инструкций
  • *AP — Текущая ячейка памяти
  • CIN — Консольный ввод
  • COUT — Консольный вывод

  1. При активации 8-разрядного режима, сумматор продолжает работать в 16-разрядном режиме. Однако условные команды (а именно тест значения текущей ячейки памяти на равенство нулю) становится 8-разрядным. (AP & 0x00FF == 0)? и (AP & 0x00FF != 0)? Консольный ввод и вывод пока решено оставить всегда 8-разрядным. Не в юникоде же печатать в конце то концов?

В этом видео я подробно(но мало понятно) рассказал о том, что делает каждая инструкция и какой brainfuck-инструкции она соответствует:



Параллельный сумматор


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


Каждое реле имеет некоторую задержку срабатывания и отпускания, которое мы примем за 1 условную единицу времени(у.е.в.) Если будем использовать реле РЭС22, 1у.е.в. будет равен 12-15мс (справочное), РЭС64 — 1.3мс(справочное). Самой дорогой (и наиболее частой) операцией в моей машине является сумматор.
Сам по себе он довольно простой и быстрый, но «есть один нюанс», который заключается в способе вычисления и передачи сигнала переноса.



Рисунок 2: Сумматор с последовательным переносом.


Изначально я планировал использовать сумматор с последовательным переносом. В таком сумматоре каждый последующий разряд зависит от состояния сигнала переноса разряда текущего. В итоге длительность операции вычисления будет колебаться между 2 у.е.в. — N*2 у.е.в., где N — число разрядов. В итоге, 16-разрядный сумматор с последовательным переносом будет иметь максимальную задержку 32 у.е.в.


Сумматоры с параллельным переносом имеют максимальное быстродействие. В них отсутствуют процессы распространения переносов от разряда к разряду. В каждом разряде одновременно вырабатываются выходные величины:



Рисунок 3: Сумматор с параллельным переносом


Возможность построения сумматора с указанными свойствами основана на воспроизведении функций суммы и переноса, зависящих только от значений слагаемых независимо от местоположения разряда в разрядной сетке. Подвох в том, что сама схема параллельного переноса с каждым последующим разрядом усложняется. Вот, смотрите что получается:



Рисунок 4: (Который должен был быть в виде LaTeX формулы, но нет) уравнение вычисления сигнала переноса для разрядов. Где $k_i = a_i \cdot b_i$ — побитовое И, $h_i = a_i + b_i$ — побитовое ИЛИ


Как итог — реализовать параллельный перенос довольно накладно. Однако можно заметить, что последующий разряд содержит в себе уравнение вычисления предыдущего (тут должен быть мем "да ладно??" с Николасом Кейджем), поэтому в принципе достаточно будет сделать схему расчета переноса только для старшего разряда, а остальные собрать из него, предусмотрев вывод промежуточных результатов.



Рисунок 5: Полная схема 16-разрядного сумматора с параллельным переносом


На рисунке 5 — первые два столбца это собственно сами сумматоры. Потом идут блоки 2AND и 2OR, которые формируют промежуточные значения h и k, фигурирующие в рисунке 4. Их наличие подтолкнуло меня на мысль расширить список команд логическими операциями сложения и умножения, для чего мне необходимо добавить лишь пару защелок и соответствующий микрокод.


Все остальное — блоки 5AND на базе 4-х реле РЭС64, которые можно запаять так, чтобы один модуль использовать как, например 2AND + 3AND. У этих блоков каждый шаг логического И выведен через диод, что позволяет собирать промежуточные сигналы переноса.


Расчетное время распространения сигнала: сумматоры справляются за 1 у.е.в., в это время формируются сигналы на выходах блоков 2AND/2OR, далее, 1 у.е.в. — на умножение в блоках 5AND, логическое сложение на диодах, задержки не вносит. Ну и последняя одна у.е.в. тратится на досчет сумматора.


Итого 3 у.е.в. супротив 32-х, или не более 4,5 мс на работу сумматора.


Регистры


В машине четыре 16-разрядных специализированных регистра. Никаких РОН-ов. Только жесткая привязка, только хардкор! Состоит из D-триггеров, каждый D-триггер — это отдельный модуль на 4-х реле РЭС55 со следующей схемой:



Рисунок 6: Принципиальная схема модуля D-триггера. Где-то там есть еще разъем, но здесь он не важен, ибо все подписано.


Данные приходят на вход Data, реле которого определяет, куда пойдет сигнал синхронизации — на сброс триггера, или его установку(за что отвечают еще два реле, одно с самоблокировкой). Четвертому реле достается коммутация выхода Q. Очень полезная фишка.


Плата памяти



Рисунок 7: Плата памяти. Размеры платы 315х200мм


Очень сложный и важный элемент, хотя сама схема памяти составляет малую часть общей начинки блока. Задача этой платы — во-первых, нести на себе 64 Килослова общей памяти программ и данных. Собрана она на базе двух 64 Кбайт микросхем кэша. Адресный вход через схемы защиты и коммутатор подключается к шине адреса компьютера, а со стороны шины данных сложная система из входного буффера и выходного драйвера, также с коммутатором. За чтение и запись в память отвечают две линии W/R и Sync. Первая выбирает что будем делать, вторая — собственно будет это делать.


И пока этого самого Sync нет, плата памяти натурально живет своей жизнью. На рендере можно видеть две светодиодные матрицы 16х16. Этот дисплей выводит некоторую область памяти. Эдакая VideoRAM, определяется программно, кстати. Опрашивает микросхему памяти и управляет выводом микроконтроллер Atmega1280.


За сим задачи микроконтроллера не заканчиваются. На нем висит консольный ввод и вывод. Куда он будет выводить — я еще не решил, посему на плате разведен USB-Serial преобразователь для обычной консоли и ESp8266 для Wi-Fi. По последнему в наиболее актуальных планах иметь веб-страничку с возможностью загрузки программ для компьютера в память и собственно сама консоль. Да, В задачи МК также входит первоначальная загрузка программы в ОЗУ, для чего у него есть полный доступ к ОЗУ, а также небольшая EEPROM-ина на 1Мбит, для хранения программ.



Рисунок 8: Принципиальная схема платы памяти. Микроконтроллер и схемы блоков не показаны


Блок логики


Я понятия не имею, как он в итоге будет выглядеть. Последняя версия присутствует на общей схеме компьютера, но мне она не нравится. Скорее всего я сделаю 12-стадийный секвенсор и с помощью ключей буду подавать сигналы на отдельные блоки.



Рисунок 9: Все что вокруг 16-разрядных блоков и есть блок логики


Конструкция


Конструкция машины модульная, поблочная рамная. На КДПВ наглядно показано как будет располагаться начинка машины. Но обо всем по порядку:


Модуль


Базовый элемент компьютера — модуль 60х44мм, с 16-контактным разъемом, несущий на себе 4 реле, их обвязку, и 4 светодиода для индикации:



Рисунок 10: 3D-модель модуля


Модули различных типов:


  1. 1-разрядный сумматор с переносом — 16 шт;
  2. Модуль 5AND для схемы параллельного переноса — 32 шт;
  3. Модуль D-триггера — 64 шт на регистры, плюс немного на логике;
  4. Модуль 4x2AND_SW, для организации защелок. Тут просто 4 замыкающих реле;
  5. Модуль 4x2AND, для организации защелок. Здесь 3 реле из 4-х с переключающим контактом. На 4 реле не хватило вывода разъема;
  6. Модуль диодный, 8 диодов Д226Д. Для организации многовходового OR
  7. Модуль универсальный 2AND/2OR, позволяет создать 2AND-NOT, 2OR-NOT, 4AND, 4AND-NOT, 4OR, 4OR-NOT и любые комбинации. На базе 4 реле с переключающими контактами и общими точками;

Так как блок управляющей логики я, хоть и придумал, уже забраковал, точное число модулей каждого типа мне не ведомо. Разберусь по дороге. Расчетное число модулей — 192 штуки.


Блок


Берем плату 150x200мм, запаиваем на нее 32 разъема на 16 пинов, да не простые, а для монтажа накруткой и устанавливаем на нее в матрицу 8х4 наши модули, получая такой вот блок:



Рисунок 11: Блок


В моей машине таких блоков будет 6 штук — два блока на сумматор, два на регистры и два на логику. Чешу репу насчет еще пары блоков защелок, но если они и будут, то плоскими и распаянными


Монтаж накруткой был выбран потому, что: во-первых, схемотехника каждой базовой платы заранее хоть и известна, но может изменяться и подвержена ошибкам. Во-вторых, блок логики в принципе невозможно с первого раза развести корректно, и если для блока регистров все в целом понятно и можно разок ошибиться со, скажем, линией синхронизации, то логику придется переделывать тысячу и один раз. Будет намного лучше, если собирать каждую составляющую блока логики постепенно. В-третьих, чисто механический фактор — на двухслойной плате физически невозможно развести эти блоки :) Во все стороны расходятся 16-разрядные шины, которые многократно пересекаются друг с другом.


Итого каждый блок содержит 32 модуля, с общим числом реле 128 штук. Питание каждого блока — 5В 2А.


Компьютер


На большой раме, размерами 640х480мм (по факту немногим больше, но число красивое) размещаются шесть релейных блоков и плата памяти:



Рисунок 12: расположение блоков машины


Весь компьютер вставляется в деревянную раму из ценных пород дерева, со стеклом спереди и сзади.


Изготовление


Не смотря на сегодняшнюю дату, проект на самом деле существует :-) И находится в не самой активной, но все же стадии изготовления.


Реле


Их есть у меня. В большом количестве, но проблема в том, что из более килоштучного запаса три сотни — реле на 27 Вольт и 5-вольтовых РЭС55 мне может не хватить. Масштаб бедствия окончательно оценить не смогу, но думаю за последующее время что я буду собирать эту адскую машину проблема исчезнет за счет пополнения запасов извне.



Рисунок 13: Запасы реле. 800 штук реле — новые, удачно ухваченные на митинском радиорынке за копейки


Одним из источников пополнения запасов являются релейные платы ЦАП от лабораторных блоков питания. Вот такие вот:



Рисунок 14: Платы из блоков питания типа БП, приобретенные на радиорынке(нет, сам я БПшники не дербаню)


Печатные платы


Все печатные платы я решил делать сам. Зажал 300 баксов китайцам и уже 4 месяц занимаюсь тем, что покрываю заготовки фоторезистом, просвечиваю, травлю, покрываю паяльной маской, проявляю, сверлю фрезерую.



Рисунок 15: Протравленные панели различных видов


Платы я изготавливаю пластинами, по 9 модулей на пластине 200х150мм. Протравил 30 пластин и застрял на нанесении паяльной маски. Все никак не начну. Паяльная маска у меня FSR-8000 синего цвета, двухкомпонентная и я с ней ранее уже имел дело.


Пластины 200х150мм выбраны не случайно — у нас на радиорынке, в одном секретном месте такие стабильно продаются многие годы и вся моя приспособа заточена именно под этот формат.


В слову фоторезист (МПФ-ВЩ от Диазоний) я стал наносить с помощью ламинатора и это просто чудеса. Качество приклеивания выросло в разы.


Потом надо будет эти платы еще нарезать и насверлить, для чего у меня даже 3Д-фрезер имеется.



Рисунок 16: 3D-фрезерный китайский станок DIY 2020CNC


Взял я его за скромные 175 долларов исключительно за электронику. Платы сверлить и фрезеровать хватит, а я уже поглядываю на комплекты ШВП+рельсы для 3Д-станков. Готовые такие покупать дороговато, а собрать самому когда он начнет требоваться — самое то.


Вот в этом обзоре можно получше узнать о моем станочке:



Программы


Программы загружаются в компьютер с помощью микроконтроллера, а значит он должен знать что и куда грузить. Для сего есть специальный формат (в состоянии драфта конечно же) бинарного файла а ля Elf. В заголовке файла прописывается число, размер и адреса секций кода и данных (а также где содержимое этих секций лежит в файле). //TODO Не забыть добавить секцию видеопамяти — у нас же есть светодиодная панель, надо сказать микроконтроллеру с какого по какое выводить на экран.


Наличие микроконтроллера позволяет мне: а. контролировать корректность выполнения программы, б. обеспечивать защищенный режим работы с памятью. Можно ловить Segmentation Fault!


В общем, нужен компилятор. Я испробовал десятки различных популярных интерпретаторов — все исполняют одну и ту же программу по разному. Стабильнее всех оказался leBrainfuck, он делает трансляцию программы в свой формат и корректно ее исполняет.
Я написал свой компилятор, на данный момент его код ужасен, но он позволяет транслировать обычный Brainfuck в бинарь формата моей машины. Поддерживает сворачивание команд +-<>, но не реализовано преобразование последовательности [-] в сброс ячейки. Ну и куча других фич, в том числе поддержка доп. инструкций, тоже не сделаны.


Есть и простенький эмулятор. Эмулятор в момент написания статьи также поддерживает только основные 8 инструкций. Вот что он творит с программой фрактала:



Время выполнения — чуть меньше 10 секунд. Найденная на полях адекватная LLVM версия справляется за 0,9 секунд. О том как я с помощью Intel Vtune Amplifier оптимизировал свой эмулятор и разгонял с 120 секунд до 10 заслуживает отдельной статьи.


Но важно не это. Чтобы вывести этот фрактал, потребовалось 3 миллиарда оптимизированных brainfuck-инструкций. С учетом проектной частоты в 100Гц и 50 строк текста мы получаем 347 машинных дней — т.е. почти ГОД на одну программу, или строчка вывода в неделю! По факту первую строчку мы дождемся к концу первых суток, но чем дальше, тем медленнее. С другой стороны это самый быстрый релейный компьютер из всех существующих и проектируемых.


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



Вот здесь находится наиболее полный на мой взгляд список всех релейных машин на данный момент.


Мыслишки


Хочу заиспользовать часть запасов вакуумных индикаторов ИВ-6 в виде длинного табло в верхней части машины, выводящего в реальном времени значения всех регистров, а также общее число исполненных инструкций и общее время работы компьютера. Но здесь я никак не могу определиться с источником этих данных — МК в плате памяти забит под завязку, да и часть значений он способен лишь эмулировать. Лучший вариант — считывать значения напрямую. По схеме управления самими ИВ-шками тоже не могу прийти к единому мнению — делать динамическую индикацию на 30-40 ИВ-шек проблематичнее чем для 6 штук настольных часов.


ЗАЧЕЕЕЕМ????777



Ссылки


Весь проект в openSource. Посему вот основные ссылки по проекту:


  1. https://github.com/radiolok/RelayComputer2 — репозиторий с принципиальными схемами и разводками печатных плат. Ссылочку на репозиторий прошивки платы памяти я добавлю позднее
  2. https://github.com/radiolok/RelayComputer2/blob/master/roadmap.md Отдельно отмечу эту страницу с дорожной картой проекта, на которой фиксируются ключевые изменения.
  3. https://hackaday.io/project/18599-brainfuck-relay-computer на этой страничке я публикую подробные отчеты о том что было сделано. По набору критической массы они будут превращаться в статью на GT.
  4. https://github.com/radiolok/bfutils компилятор и эмулятор.
Поделиться с друзьями
-->

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


  1. olartamonov
    01.04.2017 10:32
    +3

    Hint: однорядная пара PLS-PBS — очень так себе разъём для модульной конструкции, так как качается в поперечном направлении. Дёшево и сердито получается двухрядная пара PLD-PBD, для которой плата изготавливается толщиной 1,8 мм и вставляется между ногами PLD.


    1. radiolok
      01.04.2017 10:42
      +1

      Думал о таком варианте. В итоге остановился на однорядных с горизонтальными канавочными направляющими.


  1. nckma
    01.04.2017 10:33
    +7

    Вашу бы энергию, да направить в мирное русло!


    1. 25080205
      01.04.2017 11:03

      Я надеюсь, это первоапрельская шутка?
      А вообще была идея — реализовать простенький процессор отдельными транзисторами.Причем каждый логический элемент снабжен светодиодиками, все это на вертикальных рамах можно выставить напоказ. В итоге получаем визуализацию протекающих процессов, при том вполне сносное быстродействие для того, чтобы что-то продемонстрировать. По расчетам выходило достаточно компактное (всего несколько квадратных метров плотного монтажа, да :-)) устройство с приемлемой стоимостью примерно как фордфокус :-)


      1. radiolok
        01.04.2017 11:11
        +7

        Я надеюсь, это первоапрельская шутка?

        Если вы про мой компьютер, то конечно это первоапрельская шутка с 8 годами предварительной подготовки и освоением СГ на уровне Marvel :-)
        Если честно, для меня было удивительным однажды услышать фразу «Я думал ты пошутил» насчет моего релейного контроллера автополива

        А вообще была идея — реализовать простенький процессор отдельными транзисторами.

        Было


        1. 25080205
          01.04.2017 11:19

          Я любитель истории и немного в курсе про релейные и ламповые машины, появлявшиеся на заре вычтехники… Они часто упирались в надежность релюшки — безупречная работа многих тысяч оных, фактически, весьма реалистично имитировала тест по наработке на отказ. Хоть одна из многих тысяч окажется «паршивой овцой», а за ней еще и… Оттого, если это НЕ шутка — вдвойне интересно посмотреть, как оно будет работать.


          1. radiolok
            01.04.2017 11:28
            +3

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

            Все релюшки будут тестироваться на исправность, плюс будут проверяться на скорость срабатывания.


            1. Dovgaluk
              05.04.2017 11:14

              Я к каждой обмотке диод запаиваю, чтобы не было обгоревших контактов.
              Понятно, что «на заре» их как раз и не было.


              1. radiolok
                05.04.2017 18:21
                +1

                да, у меня диод с резистором на каждом модуле разведен.


            1. Andy_ry
              05.04.2017 18:21

              В конце 80-х занимался автоматизированными системами контроля. В основном платы автоматики представляли собой поля герконовых реле РЭС 55. Надёжность невысокая сразу скажу. Сначала постукивали корпус реле отвёрткой (чтобы контакты отлипли). Потом, когда корпус оказывался весь избит, меняли реле. Пачками. Так что делайте выводы. Имхо если уж и изобретать велосипед (собственный процессор), то уж на ПЛИС. Да и из практических соображений полезнее — может пригодится в реальной жизни.


              1. Dovgaluk
                06.04.2017 08:44

                По идее, от подгорания (окисления и т.п.) контактов помогает дублирующие ключи, соединённые параллельно.
                А вот с «залипанием» уже как-то сложнее.


      1. Ministor
        05.04.2017 21:11

        Причем каждый логический элемент снабжен светодиодиками

        Напомнило как лейтенант Рипли пришла в Вычислительный Зал БЭСМ-2 Командный отсек и спрашивала Мать о конце света Каковы её шансы. Мать, в свою очередь, ехидно мигая этими вашими светодиодиками, которые занимали чуть более, чем всю стену, уклончиво отвечала что Недостаточно информации.


    1. il--ya
      05.04.2017 13:24

      О, только хотел написать то же самое, и увидел ваш коммент. С языка сняли.


  1. rombell
    01.04.2017 10:49
    +5

    Уважуха! Как хобби, гораздо мощнее и практичнее вышивания крестиком или скоростного спуска на крыле.


    1. FlipWho
      08.04.2017 13:55

      Ну да. Потом сидеть в 55лет и плакать, что в жизни ничего не видел.


  1. Rumlin
    01.04.2017 11:05

    А блок питания ватт на 500? Прикидка потребления была?


    1. radiolok
      01.04.2017 11:07
      +4

      по 5В 2А на каждый из 7 блоков. т.е. 70 Вт.


  1. Arcanum7
    01.04.2017 13:02
    +1

    Хоть я тут никто, ответсвеннно заявляю — это не первоапрельская шутка.
    Артём — лови +!


  1. APLe
    01.04.2017 13:24
    +5

    Серьёзно!
    Выскажу сходу пришедшие мысли:
    1). По поводу реле: можно пройтись по форумам типа «Радиокот»: недостающие 5в реле оптом, тем более на такое интересное дело, могут отдать по несколько рублей за штуку.
    2). «Вывод текущего значения регистров», возможно, проще сделать на мелкой логике? Тем более, что это ещё и проблему выгорания катодов при динамической индикации снимает. Кстати, тогда можно ещё и избежать использование микросхем, обойдясь реле. Только не искать готовые объявления, а самому подавать, в разделе «куплю».
    2а). Можете ещё попробовать связаться с этим человеком: деталей у него много, и в проектах, подобных вашему, он часто заинтересован.
    3). Конечно, использование микросхем памяти очень-очень сильно снижает пафос устройства, :-). Когда я мечтал когда-нибудь сделать что-нибудь подобное, то обычно думал о блоках ферритовой памяти – правда, подходящий блок будет стоить несколько тысяч рублей, и придётся делать довольно сложную обвязку.
    4). Если эта статья – не шутка, то публиковать её 1 апреля было ОЧЕНЬ плохой идеей, ;-).


  1. APLe
    01.04.2017 13:28
    +4

    Чёрт. 2 минуты на редактирование – это мало, полусекунды не хватило. Сообщение должно было выглядеть так:

    1). По поводу реле: можно пройтись по форумам типа «Радиокот»: недостающие 5в реле оптом, тем более на такое интересное дело, могут отдать по несколько рублей за штуку. Только лучше не искать готовые объявления, а самому подавать, в разделе «куплю».
    1а). Можете ещё попробовать связаться с этим человеком: деталей у него много, и в проектах, подобных вашему, он часто заинтересован.
    2). «Вывод текущего значения регистров», возможно, проще сделать на мелкой логике? Тем более, что это ещё и проблему выгорания катодов при динамической индикации снимает. Кстати, тогда можно ещё и избежать использование микросхем, обойдясь реле.
    2а). *уточнил* А, нет, это хорошо получится на неоновых ИН-14. Впрочем, они и смотреться будут лучше.
    3). Конечно, использование микросхем памяти очень-очень сильно снижает пафос устройства, :-). Когда я мечтал когда-нибудь сделать что-нибудь подобное, то обычно думал о блоках ферритовой памяти – правда, подходящий блок будет стоить несколько тысяч рублей, и придётся делать довольно сложную обвязку.
    4). Если эта статья – не шутка, то публиковать её 1 апреля было ОЧЕНЬ плохой идеей, ;-).


    1. GreyPhantom
      01.04.2017 16:03

      использование микросхем памяти очень-очень сильно снижает пафос устройства,

      Для полного пафоса, наверное, нужно блок памяти тоже на реле делать?


      1. APLe
        01.04.2017 16:45
        +3

        Память на реле – это хорошо, но слишком объёмно. Поэтому ферриты и предложил.
        Кстати, я тут подумал, что не обвязку делать не обязательно, можно взять готовый модуль типа такого

        Заголовок спойлера
        image


        1. radiolok
          01.04.2017 18:09
          +1

          Эти модули в комплекте с драйвером и селектором адреса стоят бешенных денег. Но если мне такой попадется, то я его заиспользую. Тот что на картинке ниже вероятно никогда не будет запущен — уж больно много из обвязки к нему пилить (я нашел все схемы). Хотя…


          1. APLe
            01.04.2017 20:02
            +2

            На самом деле, они стоят очень по разному – в зависимости от машины и убедительности ваших объяснений «честное слово, не на стенку, запустить хочу!».
            Например, пару лет назад кто-то нашёл гору модулей от Саратов-2 – ~8кБ, если я не ошибаюсь. Без обвязки, правда. И продавались они тогда где-то по 3-4 тысячи рублей. Думаю, если на форуме Полигона Призраков описать свою задачу, показать наработки (особенно – если хоть что-нибудь из них уже будет готово «в железе») – можно купить хороший иностранный модуль с обвязкой примерно за такие же деньги.


          1. Dovgaluk
            05.04.2017 11:23
            +1

            Я в свое время купил вот такой.

            Вроде не очень больших денег стоил.

            Правда не уверен, что будет не лень его прикручивать.


            1. radiolok
              05.04.2017 18:26

              Если на обратной стороне нет микросхем, то у тебя примерно такой же что и у меня — блок драйверов есть, а всей остальной логики — нет.


              1. Dovgaluk
                06.04.2017 08:45

                Да, судя по тому, что некоторые контакты разъёма подключены прямо к матрице сердечников, всё будет не очень просто.


          1. APLe
            08.04.2017 02:38
            +2

            Я тут вспомнил ваш комментарий и подумал, что имеет смысл уточнить.
            1). Абсолютное большинство модулей ферритовой памяти покупаются в коллекции, не для подключения.
            2). Поэтому на цену влияет их редкость и внешняя красота.
            3). Конкретно в России в цене детали от отечественных компьютеров, иностранные достаточно дешевы (не относится к сверхценным и легко транспортируемым вещам, но там другой разговор).
            4). Иностранные модули с драйвером не выглядят интереснее модулей без драйверов (в среднем, я бы сказал, даже скучнее). Также, насколько я понимаю, они не более редкие и (если не гоняться за PDP-совместимыми) не более ценные «за бренд».

            5). В сумме, модули с драйвером, в среднем, стоит и ценится не больше имеющегося у вас модуля без драйвера.
            6). И, больше того, у вас есть шанс обменять ваш модуль без драйвера на аналогичного размера модуль с драйвером, возможно, даже без доплаты с вашей стороны.


            1. radiolok
              09.04.2017 22:31

              Потому я и купил свой модуль памяти за жалкие 300 деревянных рублей, ибо он страшно непрезентабельный — самих колец не видно :) Найти бы родной блок управления для них, да все никак. (Впрочем, я не особо то и ищу :D )

              А так да, согласен, было бы желание, а модуль с драйвером найдется. Пока неспешно ищу, а ежель попадется, буду думать.

              /me пошел дальше паять плату памяти


      1. radiolok
        01.04.2017 18:08

        4 реле на 1 бит — это перебор. для 256 байт потребуется больше 8 тысяч релюх.

        Вот когда на 27-вольтовых реле решусь запилить ПЛК (сердцем ПЛК раньше являлись процессоры с 1-битовым АЛУ), тогда применю 4-х сотенный запас маленьких СМДшных релюшек :)


        1. wormball
          01.04.2017 21:07
          +1

          > 4 реле на 1 бит — это перебор.

          Конечно, перебор. Можно использовать бистабильные реле — тогда будет 1 реле на бит. Заодно и энергонезависимая память.


          1. radiolok
            01.04.2017 21:12

            Что для обычного, что в бистабильного реле для хранения информации будет достаточно одного реле.
            Остальные реле являются обвязкой к нему. И серьезно уменьшить их количество не выйдет.


            1. wormball
              01.04.2017 21:15
              +1

              Отчего это? Делаем строки со столбцами — тогда количество обвязки будет пропорционально квадратному корню из объёма памяти.


              1. radiolok
                01.04.2017 21:41

                В этом случае да, получится, согласен.

                Правда от того что для организации 256 байт ОЗУ вместо 8 тысяч реле мне надо всего лишь 2 с небольшим тысячи мне легче не становится :)


          1. APLe
            01.04.2017 21:15
            +1

            Бистабильные реле сложно найти б/у в нужных количествах. А покупать их в магазине – разориться можно.
            Но 1 реле на бит можно получить, используя схему с самоудержанием – описана тут, например.

            UPD. Пока писал, выше уже ответили. Извиняюсь.


    1. radiolok
      01.04.2017 18:05
      +1

      1) да, все варианты хороши, за контакт — отдельное спасибо — напишу.

      2) Вот либо мелкая логика и дешифратор 4bit-ToHex, либо сдвиговые регистры и отдельные МК.

      2а) ИН-ки не умеют отображать в HEX (или я что-то про них не знаю). Собствено вся сложность из-за HEX. готовых 16-катодных ИНок я не знаю, а гнать в семисегментник — нужен дешифратор.

      3) А по поводу ферритовой памяти… их есть у меня:

      модуль памяти на 8К слов по 17 бит каждый (16 данные плюс один на контроль четности).
      HP 5060-8331, устанавливался в компьютеры HP 2100A. Но к нему нужно пару плат драйвера и селектора адреса. И их либо на транзисторах, что проще, либо на лампах, что в моем случае каноничнее.


      1. APLe
        01.04.2017 20:12
        +2

        2а). Ага, придётся в восьмеричной отображать, это +1 лампа на 12-бит регистр, или +1 лампа и +1 неонка старшего разряда на 16-битный. Стоит оно того или нет – вам виднее, у меня соображения крайне поверхностные.

        3). Самостоятельно сделать память на лампах – это, конечно, было бы идеально. Но, судя по всему, что я слышал о ферритовой памяти, задача это не из лёгких – лично я точно не возьмусь, но я – совсем не электронщик.
        Я имел в виду взять карту «память + драйвер + контроллер шины» – такие точно были, у меня в Плюримате стоят, например.
        Только, возможно, родной контроллер шины не использовать, подключаться напрямую.


        1. radiolok
          01.04.2017 21:48

          2а).

          Ага, придётся в восьмеричной отображать....

          Восьмеричное отображение интересная мысль… Но декодер на диодах и реле на один элемент будет существенной схемой. И отображение чисел в OCT имхо неудобно.

          3)О да, вот схема обвязки для моей платы памяти:
          Схема
          image


          1. Dovgaluk
            06.04.2017 08:47

            Кстати, в материалах для БК 0010 любили именно восьмеричную систему.
            Видимо, это ещё с PDP пошло.


            1. alsii
              06.04.2017 12:19
              +2

              В системе команд PDP-11 значащие поля 16 разрядной команды были как раз трехбитовые, а "лишний" старший разряд отвечал за байтовость/словность операции. Так что восьмеричная система там была очень удобна. Например 010102 (0.001.000.001.000.010) = MOV R1, R2 и т.д. Код легко читался и при некотором опыте можно было писать прямо с консоли в восьмеричной системе.
              Кстати система команд очень проста и совершенно ортогональна. Если бы я был достаточно безумен, чтобы повторить описанный в статье эксперимент, я бы наверно именно ее выбрал для реализации :-)


  1. Tutanhomon
    01.04.2017 16:43
    +4

    (С) Мсье понимает :)


  1. ru_vlad
    01.04.2017 22:26
    +2

    radiolok
    Старина, мой низкий поклон!
    Поищу у себя, если еще релюхи не выкинул пришлю :)


  1. DEM_dwg
    02.04.2017 06:52
    +2

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


    1. radiolok
      02.04.2017 12:12
      +1

      Крутая вещь однако! Мне это вряд ли в ближайшей перспективе поможет, но сделать дисплей на этом эффекте вместо светодиодной панели было бы очень интересным. Сделаю себе пометку реализовать такое в ближайшие 10 лет.


      1. DEM_dwg
        02.04.2017 12:47

        Я себя не могу заставить намотать еще катушек.
        А так да классно выглядит.


  1. ilansk
    02.04.2017 10:22
    -2

    Это что? Стимпанк в ЭВМ?
    Я верю: в будущем нанотехнологии позволят создавать МЭМС-реле по 20-нм технологии в кристалле на одной подложке плотностью 8.000.000 релюшек на 1 мм2, т.к. релюхи лишены ряда недостатков в сравнении с транзисторами.
    Но как объяснить описанный в этой статье фетиш, ностальгия по ЭВМ 40х гг? Мой моск теряется в догадках.


  1. alexhott
    02.04.2017 13:07

    Где-то была статься про нерусского мужика
    который на транзисторах сделал полностью комп и дисплей на светодиодах
    несколько стендов вертикальных, и даже игруху на наем какуюто запускает для демонстрации


  1. SNPopov
    02.04.2017 15:17
    +2

    В фантастическом романе Лю Цысиня «Задача трех тел» описано создание двоичного компьютера из людей, каждый из которых поднимает или опускает флажок в зависимости от того, что делают стоящие перед ним. Вполне достойный проект, а для Китая и вполне реальный. Таким образом, двоичный компьютер может быть создан из чего угодно — реле, ламп, пневмоклапанов, электромоторчиков, транзисторов, микросхем и даже людей.


    1. radiolok
      02.04.2017 16:41

      Более того, такой флешмоб вполне достоин попадания в книгу рекордов Гиннеса


      1. SNPopov
        02.04.2017 18:08
        +3

        Для Вас наверное будет интересен проект компьютера собранного из дискретных транзисторов


        Поищите в сети megaprocessor


        1. Rumlin
          02.04.2017 21:41
          +1

          На geektimes было https://geektimes.ru/post/278410/


  1. Akela_wolf
    02.04.2017 17:42
    +2

    Хм… А параллельный сумматор (на 16 бит) не слишком ли сложен для такой логики? Может лучше схемотехнику с «цепочкой переноса» (carry chain)? Суть в том, что полусумматор на каждый разряд выдает два сигнала:
    1. Generate (G=a AND b) — означает что нужно генерировать сигнал переноса
    2. Propagate (P=a XOR b) — означает что нужно повторить на выходе сигнал переноса, пришедший с предыдущей ступени.

    Затем эти сигналы попадаю в carry chain. Реле, составляющие carry chain переключаются параллельно, в результате получаем что полусуммы + переносы на выходах. Остается получить окончательный результат: C XOR P. Итого, сумматор сработает приблизительно за тройное время переключения реле. При этом, потребуется 4-5 реле на разряд, то есть меньше сотни реле на весь сумматор.


    1. radiolok
      02.04.2017 18:43

      Пока не понял как в предложенной логике мы избавляемся от ожидания вычисления предыдущего разряда. За идею идею благодарю — почитаю насчет carry chain. Благо что на текущем этапе изготовления еще можно изменить схемотехнику.

      Получить даже 128 реле вместо текущих 256 (и без диодов) звучит заманчиво.


      1. Akela_wolf
        02.04.2017 19:19
        +3

        Набросал «на коленке» схему — получается вот такой полный сумматор из 4 реле. Диод не нужен т.к. либо замкнуты верхние контракты K1 и K2 (тогда K3 не срабатывает), либо срабатывает K3. Эти сумматоры ставятся «один на другой», так что C-out предыдущего присоединяется к C-in следующего. Так как цепь переноса не содержит реле, то и работает она предельно быстро. Итого 4 реле на разряд, всего 64 реле на весь 16-битный сумматор. Время срабатывания — 3 у.е.в.


        1. radiolok
          02.04.2017 20:33

          Суть понял. В распространение разряда тоже.
          Только не 4 реле, а 7 — у меня же одно реле на одну пару контактов. Хм, 112 реле супротив 256…

          Правда придется отказаться от операций OR и AND — специально я доп. функционал вводить не хочу, а там они требовались для переноса.

          По скорости получается столько же (я нашел у себя ошибку в подсчетах — SUM и AND\OR работают одновременно) — 3 у.е.в.


          1. Akela_wolf
            03.04.2017 08:59
            +3

            Заметил в моей схеме ошибку — в правой части не нужно перекрещивать соединение контактных групп K3 и K4 — там должно быть логическое XOR.


            1. radiolok
              03.04.2017 10:07
              +1

              Да, я тоже заметил когда разбирался как оно работает.

              Получается два модуля 2AND+2XOR на разряд. Одно реле не запаяно.
              2AND на высвободившихся от 5AND РЭС64, 2XOR на РЭС55.


  1. Llevellyn
    03.04.2017 01:39

    помнится, я такие платы с реле выкидывал, поскольку никогда бы не подумал, что такое можно продать


  1. LoadRunner
    03.04.2017 10:49

    А в майнкрафт такой построить можно?


    1. radiolok
      03.04.2017 11:16
      +2

      В майнкрафте и не такое строили. Так что да, можно


      1. LoadRunner
        03.04.2017 12:08

        Насколько помню, там строили либо простой калькулятор, либо пользовались хаками — в одном блоке реализованы логические элементы.


        1. radiolok
          03.04.2017 12:17

          Хотть на редстоунах, хоть на коммандных блоках такое построить можно, В сети гуглятся 1000 и одна реализация компьютеров, калькуляторов и прочей нечисти что на одном, что на другом.


    1. frol_aleksan
      06.04.2017 11:05
      +1

      Можно, только конструкции слишком эпические выходят. Причем особо упоротые строят только из кучек редстоуна, факелов и поршней без использования блочных повторителей и компараторов и уж тем более без хаков/модов.
      А так и цифровые часы (впрочем, это едва ли не самая простая из перечисленных конструкций, всего-то сооружение размером с 20-этажный дом), и калькуляторы, и даже x86-совместимые процессоры делали.


  1. amarao
    03.04.2017 12:35
    +2

    Это круто, да.

    По поводу «запасных реле». С учётом их количества, они должны будут довольно часто ломаться. Кроватки для замены? Или монтаж накруткой позволяет замену элемента малой кровью?


    1. radiolok
      03.04.2017 12:44
      +2

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

      Замена модульная. т.е вытаскивается неисправный модуль (Программа самодиагностики позволит выявлять его автоматически), вместо него устанавливается заведомо исправный.

      Ну а дальше с модуля спаивается неисправное реле, и запаивается новое, дабы комплектность ЗИПа не нарушать.


  1. igorkozinov
    03.04.2017 13:19
    -1

    «Жениться вам надо, барин!»… далее по тексту анекдота…


  1. AlexAV1000
    03.04.2017 21:18
    +2

    А где память на ферритовых кольцах?


    1. radiolok
      03.04.2017 21:19

      В шкафу лежит, к сожалению.


  1. pehat
    04.04.2017 00:33

    Поискал реле в шкафчике — нашел только светодиоды. Огорчился, ушел играть в MHRD.


  1. Wan-Derer
    04.04.2017 21:39
    +1

    Oh, shi… Слежу за этим проектом на ютупе…
    Тебе Д226 ннада? У меня где-то есть несколько… десятков. Правда не гарантирую букву и что все будут 226, но в таком кузове.
    Будешь пробегать по Москве, могу выгрузить запас.
    Релюх нет, по крайней? мере, в товарных количествах :)


    1. radiolok
      04.04.2017 22:43

      Я их 600 штук на авито купил случайно :) Правда в черном корпусе пара десятков штук — остальное — без покраски. Так что ежель черные — буду признателен.


      1. Wan-Derer
        04.04.2017 23:44
        +1

        Насколько я помню, у меня в основном лужёные. Залезу на антресоль, проведу ревизию, напишу в личку.


  1. GermanRLI
    04.04.2017 22:41
    +1

    Интересна будет наработка на отказ всей системы в сборе.
    К сожалению 1млрд — это не 100% вероятность, а несколько меньше. С ростом количества реле вероятность отказа надо возводить в степень "количество реле", так надёжность системы будет хуже. Плюс монтаж накруткрй надёжности не добавляеи
    Как мне помнится у SAGE в её транзисторном варианте наработка составляла первые десятки минут, а чаще всего отказывали паяные/сварные соединения — их по шесть (или если транзистор в корпусе — девять) штук на транзистор.


    1. Wan-Derer
      04.04.2017 23:50

      "Правильно выполненная накрутка или опрессовка статистически надёжнее пайки" (с) мой препод по технологии РЭА


  1. chabapok
    05.04.2017 12:44

    Вы если составляете большие релейные схемы, то вам удобней и понятней пользоваться терминами и графическими обозначениями из железнодорожной автоматики. Тыловой контакт — который замкнут, когда реле без тока, фронтовой — замкнут когда реле под током. Контакты рисуют так, как на приложенном рисунке. Соответственно, внизу — тыловой контакт, вверху фронтовой. Обозначение реле кружочком — непринципиальный для вашей задачи момент. В жд кружочком обозначают специальные безопасные реле, у которых контакты не залипают (угольные контакты, якорь без пружин и тд), а прямоугольником — обычные, которые могут залипнуть как угодно.

    image


  1. il--ya
    05.04.2017 13:39
    -2

    Не, реле — это несерьёзно. Это детский сад. Вы бы ещё на транзисторах делали. Вот если бы из картона


  1. VitalyNasennik
    05.04.2017 18:23

    Если совсем избавиться от полупроводников в конструкции, то да, это будет, возможно, единственный компьютер, который переживёт ядерную войну. И когда-нибудь в далёком будущем наши потомки, пережив века дикости и варварства, или пришельцы с других планет раскопают единственный уцелевший рабочий компьютер XXI века и по нему попытаются восстановить уровень развития компьютерной технологии у человечества в XXI веке…


  1. vise
    05.04.2017 18:23
    +1

    Может стоит проверить это все в fpga? А то потом окажется что вот тут надо было xor сделать, а тут все 256 сигналов надо инвертировать ))


  1. Shrizt
    07.04.2017 13:44
    +1

    Разве наличие диодов не делает ваш компьютер полупроводниковым?
    Рекомендую все же стоит задуматься над более полезным применением навыков и энергии :) что впрочем не умаляет моего уважения!


  1. arpeggio
    07.04.2017 13:44
    +1

    Я сразу вспомнил книгу Чарльза Петцольда «КОД». Если кто не понял большую часть происходящего в статье, но очень хочет понять, обязательно почитайте эту книгу! Да и вообще любой айтишник должен иметь её в своей электронной бибилиотеке.