Прошло больше года с тех пор, как я начал писать о разработке компьютера на основе электромагнитных реле .
Сегодня я закончил работу над вторым модулем компьютера - регистровым файлом.
Теперь стало понятно, что компьютер будет состоять из 4 блоков: АЛУ , регистровый файл, блок управления, память и периферийный блок.
Блок регистров самый простой — каждый регистр имеет 8 реле для хранения битов, реле для сброса и несколько реле для подключения регистра к шине.
Но все же я сделал это первым АЛУ разобраться в построении логических цепей на реле.
Кроме того, это сразу вылилось в 8-битный калькулятор, который теперь иногда включают мои коллеги (компьютер недавно переехал ко мне на работу).
Как реле хранит данные? Обычно реле не используется для хранения данных, а лишь переключает сигналы.
Но если к его работе добавить обратную связь, результатом может стать триггер RS. Чтобы реле после включения не отключалось, а сохраняло включенное состояние, необходимо подать напряжение питания на обмотку через ее нормально разомкнутые контакты.
При замыкании контактов это напряжение будет поддерживать реле во включенном состоянии:
Теперь, чтобы выключить это реле, нужно разорвать связь между источником питания и обмоткой.
Для этого используется дополнительное реле, отвечающее за сброс триггера:
Зачем вообще сбрасывать реле? Дело в том, что самый простой способ записать туда заданное значение — это сбросить старое и подать (или не подать) напряжение для сохранения нового состояния.
Поскольку весь регистр всегда сбрасывается, для всех его битов используется одно и то же реле сброса.
Контакты всех переключателей в реле, отвечающих за хранение данных, запараллелены.
Это сделано для повышения надежности – при выходе из строя одного контакта ток потечет через другой.
Компьютерная архитектура Изначально я планировал, что адресная шина компьютера будет 12-битной.
Таким образом вы легко сможете разделить все адресное пространство на несколько 8-битных групп и подключить к ним разные устройства.
В этом случае адресная арифметика упростится до 8-битной (почти как работа с сегментами памяти в 8086).
Поэтому в файле регистров было 2 типа регистров — 4 штуки 8-битных ГПР, 2 штуки «сегментных» регистров по 4 бита и 2 штуки смещений по 8 бит. При этом из «сегмента» и «смещений» можно было сформировать 2 полных адреса, поскольку регистры складывались в фиксированные пары, такие как HL, DE или BC в Z80. Но при этом любой из регистров мог использоваться как вход или выход АЛУ.
Изменения начались с того, что я «вдруг» сделал сегментные регистры 8-битными.
Принципиально архитектуру это не изменило (адресная шина осталась 12-битной), но предоставило больше возможностей для вычислений.
Тогда я прикинул, что даже простое суммирование 256 ячеек памяти займет несколько десятков минут. Поэтому я решил сузить адресную шину до 8 бит. Из-за этого система команд была значительно упрощена:
- Нет необходимости в отдельных командах для 12-битного приращения, 12-битной передачи, загрузки 12-битного значения.
- Команды перехода, вызова подпрограммы и загрузки 8-битного значения объединены в одну с небольшими отличиями.
В качестве побочного эффекта команда загрузки значения теперь может выполняться условно.
- Команды памяти теперь имеют параметры с прямыми значениями адреса.
Количество необходимых реле было значительно уменьшено.
В том числе и из-за того, что нет необходимости отдельно реализовывать счетчик команд (поскольку он переехал в модуль регистров в виде почти обычного регистра).
В результате получилось что-то похожее на режим Thumb процессора ARM, только еще проще — 8 регистров по 8 бит каждый.
Один регистр служит адресом возврата, а другой — счетчиком команд. Любой регистр может использоваться в качестве любого аргумента команды.
Единственным исключением является то, что только 4 из 8 регистров могут использоваться в качестве адреса для чтения (или записи) из памяти.
Имеется 3 шины, к которым подключены регистры — 2 для передачи данных (например, кода инструкции или операндов АЛУ) и одна для передачи адреса.
Дизайн Самым сложным (вернее, нудным) было сделать таблички с названиями регистров.
Последний раз заказывала лазерную гравировку.
Но используемые для этого устройства имеют очень маленькую рабочую площадь и моим планшетам этого оказалось недостаточно.
Поэтому я занялся фотолитографией.
Я потратил много времени на то, чтобы научиться наклеивать/распылять, экспонировать и проявлять фоторезист, пока не получил что-то приемлемое.
До идеала еще далеко, но это не последний блок в компьютере.
Тумблеры загрузки значений в регистры я в этот блок не встраивал.
Ведь модуль регистров можно сразу подключить к АЛУ и использовать его тумблеры.
Еще одной особенностью этого модуля является то, что он не имеет дополнительных светодиодов для отображения сигналов.
Все сохраненные данные можно наблюдать с помощью контрольных светодиодов, встроенных в реле.
Поэтому, чтобы снять дамп реестра, достаточно иметь камеру.
Сегодня у меня уже работают два блока будущего компьютера — регистровый файл и АЛУ.
Но оба они управляются внешними сигналами и поэтому могут производить расчеты только в режиме калькулятора.
Корпус для модуля управления практически готов, так что вскоре можно будет приступать к запуску схем, самостоятельно издающих тикающие звуки.
Что можно сделать лучше Благодаря тому, что я отказался от парных регистров, отпала необходимость в двойной шине данных.
Теперь он действительно нужен только в одном месте — при получении инструкций.
Все инструкции имеют размер 16 бит, поэтому для загрузки всего кода инструкций за один такт необходима 16-битная шина.
Адресную шину можно использовать для подключения второго аргумента к АЛУ.
За счет этого можно было бы сэкономить 8 реле в блоке регистров (и, возможно, еще пару в блоке управления).
Чтобы прикрепить таблички с подписью, я использовал отвертки с крестообразным шлицем, так как старая версия у меня закончилась.
Кто-нибудь знает, где можно достать латунные болты с прорезью? Последний раз я покупал их в магазине товаров для хобби в Хельсинки.
Но это довольно дорого, и в ближайшее время я туда больше не поеду.
Еще нам нужно как-то улучшить негативную маску, напечатанную на лазерном принтере.
Теперь поля, залитые черным цветом, стали немного прозрачными.
Поэтому на некоторых знаках из-за этого появлялись маленькие точки.
Кто-нибудь знает, как это победить? Бонус В следующем видео показан работающий прототип тактового генератора.
Скорее всего, я немного увеличу частоту, чтобы получить около 5 тиков в секунду.
Страница проекта на github: github.com/Довгалюк/Реле Теги: #реле #странные компьютеры #arm #z80 #8086 #Аномальное программирование
-
Spamhaus Занес Агаву В Черный Список
19 Oct, 24 -
Нюансы Реализации Защиты От Ddos-Атак
19 Oct, 24 -
В Сша Изобрели Рекламный Переключатель
19 Oct, 24