Эта история началась с ухода в отпуск зимой. Вы только представьте! Полярная ночь, темно хоть глаз выколи и дикий мороз. И вот сижу я такой страдалец, не зная, чем себя занять горемычного. А тут выскакивает статья, что японцы собрали однобитный компьютер на четырех микросхемах. (Naoto64). И вот то ли от безделья, то ли от тоски, или азарт меня одолел, но решил я попробовать собрать «одноплатник» с минимальным количеством микросхем. Под словом «минимальным» я подразумеваю компромисс между функционалом и лишним корпусом микросхемы. В итоге получилось при минимальной комплектации 26 микросхем. Это конечно гораздо больше, чем у Naoto64, но за то это уже 4-х битный «одноплатник». Да и микросхема ПЗУ вкуснее, чем набор переключателей. И реализовать можно очень многое в рамках этой архитектуры. Конечно, можно еще подрезать функционал и количество микросхем. Но я решил оставить так, как есть. В общем, "я художник, я так вижу!".
Одноплатник получился размерами 11х11 см. и с аппетитом в 1А.
![одноплатный 4-х битный компьютер одноплатный 4-х битный компьютер](https://www.pvsm.ru/images/2024/05/12/odnoplatnik-na-155-i-serii.jpg)
Изначально проект задумывался без ОЗУ, чисто на одних регистрах. Но, изучая состав 155-й серии, наткнулся на ОЗУ К155РУ2. У меня этого «зверя» в наличии не было, пришлось подкупить. Микросхема представляет собой оперативное запоминающее устройство на 64 бит (16 слов х 4 разряда). А если по-простецки, то 8 байт. Всю жизнь мечтал сказать эту фразу: «8 байт хватит всем!».))) С применением этой микросхемы на горизонте замаячили возможные проблемы. Так как выходы данных имеют открытый коллектор, не совсем понятно, как это может повлиять на работу готового устройства. У меня был уже печальный опыт, когда дешифратор К155ИД10 не дружил, без подтягивающего к плюсу резистора, с входом #CS микросхемы КР537РУ17. На мою радость, эта проблема обошла стороной готовое изделие. Но и это еще не все. Выходы ОЗУ получаются инвертированными, что на начальном этапе мне не очень понравилось. А потом недостаток был превращен в достоинство. Если выход ОЗУ соединить с входом №1 исключающего ИЛИ (XOR), а четвертый бит адреса с входом №2, то на выходе получим первые 8 слов - инвертированные данные, а вторые 8 слов - не инвертированные. Пригодится для вычитания.
![Таблица истинности Таблица истинности](https://www.pvsm.ru/images/2024/05/12/odnoplatnik-na-155-i-serii-2.png)
В остальном в ядре все банально. Взял из источника, положил в приемник.
Иногда сделал переход из одного участка программы в другой.
![структурная схема структурная схема](https://www.pvsm.ru/images/2024/05/12/odnoplatnik-na-155-i-serii-3.gif)
Инструкции выполняются за 3 такта.
Кроме инструкций перехода, где за 3 такта происходит переход и выполнение команды на которую перешли.
На борту имеется 8 регистров (К155ИР15):
2 адресация ПЗУ (ROM1, ROM2)
2 регистра общего пользования (R1, R2)
регистр адресации ОЗУ (ADR)
регистр буфера (BUF). Нужен для разделения шины между ядром и ПЗУ и как дополнительный регистр.
Регистр аккумулятор (А). Участвует в арифметических действиях и сравнении с содержимым ОЗУ
Выходной регистр (P1). Порт вывода информации. В изделии к нему подключены светодиоды (для индикации)
В ядре содержится четырехразрядный сумматор и мультиплексор для условий переходов.
А также у изделия есть 4 битный входной порт (Р2).
Все это тактируется генератором, а команды считаются двумя счетчиками (К155ИЕ7)
Чтобы соблюсти Фэн-шуй пришлось использовать микросхему ПЗУ К155РЕ3 объемом 32 байта, но пусть это будет для гуру-программистов, а для начинающих программеров оставлена возможность вместо К155РЕ3 подключить 2 штуки К556РТ4, а это аж целых 256 байт!!! (но это будет уже полная комплектация и как следствие 27 корпусов микросхем)
Полный список микросхем:
К155ЛН1 |
1 |
К155ИЕ4 |
1 |
К155ЛИ1 |
1 |
К155ЛЛ1 |
2 |
К155ЛП5 |
2 |
К155ЛП8 |
3 |
К155ИЕ7 |
2 |
К155ИР15 |
8 |
К155ИД10 |
2 |
К155РУ2 |
1 |
К155КП7 |
1 |
К155ИМ3 |
1 |
К155РЕ3 или К556РТ4 |
1
2 |
Инструкции состоят из 8 бит: первые 4 бита – куда записать, вторые 4 бита- что записать (показать содержимое регистра или число) или условие перехода или для вычитания.
Для написания программы был разработан компилятор с встроенным симулятором. В нем можно погонять программу наблюдая изменение регистров, ОЗУ и диаграмма порта. Компилятор писался максимально похожим на Assembler, но со своей спецификой. Ну я думаю, что боги Ассемблера, в комментариях, укажут мне на мои ошибки.)
![компилятор с встроенным симулятором компилятор с встроенным симулятором](https://www.pvsm.ru/images/2024/05/12/odnoplatnik-na-155-i-serii-4.jpg)
Команды на языке Assembler:
Числами из ПЗУ оперируют только 3 регистра:
ROMa1, ROMa2 – адреса смещения в программе. Это числа, но для удобства в компиляторе используются символьные метки, которые при компиляции подменяются числами.
BUF – буфер через который число попадает в ядро и становится доступным регистрам и ОЗУ.
mov roma1, метка
mov roma2, метка
mov buf, число
Варианты команд взять из одного регистра и положить в другой:
![Одноплатник на 155-й серии - 5 Одноплатник на 155-й серии - 5](https://www.pvsm.ru/images/2024/05/12/odnoplatnik-na-155-i-serii-5.png)
Сумматор постоянно складывает содержимое аккумулятора (A) и ОЗУ на которую указывает регистр адреса ОЗУ (ADR)
Команды записывают сумму аккумулятора и ОЗУ (использовать значения, расположенные по адресам 8-15) в указанный регистр:
команды сложения
![Одноплатник на 155-й серии - 6 Одноплатник на 155-й серии - 6](https://www.pvsm.ru/images/2024/05/12/odnoplatnik-na-155-i-serii-6.png)
Команды записывают разность аккумулятора и ОЗУ (использовать инвертированные значения расположенные по адресам 0-7) в указанный регистр:
команды вычитания
![Одноплатник на 155-й серии - 7 Одноплатник на 155-й серии - 7](https://www.pvsm.ru/images/2024/05/12/odnoplatnik-na-155-i-serii-7.png)
Команды переходов:
![Одноплатник на 155-й серии - 8 Одноплатник на 155-й серии - 8](https://www.pvsm.ru/images/2024/05/12/odnoplatnik-na-155-i-serii-8.png)
Проверка работы на разных частотах показала, что на частоте кварца 4,608 МГц работает стабильно. Возможно будет и на более высоких частотах. Просто у меня нет кварца чуть-чуть скоростнее, а при 8,8 МГц. ЭВМ уже не работает.
Код для «ногодрыга»:
mov roma1, start //указываем координаты для переходов на метку start
mov roma2, start //указываем координаты для переходов на метку start
mov buf,1 //1 в буфер
mov r1,buf //переносим 1 из буфера в регистр R1
mov buf,0 //0 в буфер
start:
mov p1, r1 //отправить в порт 1 (содержимое регистра r1)
mov p1,buf //отправить в порт 0 (содержимое регистра buf)
jmp //повторим
При частоте кварца 4,608 МГц, на выходе получается меандр с частотой 768 КГц. Как тебе такое, Илон Маск?)))
Изначально испытания проводил с использованием микросхемы flash памяти. После устранения всех ошибок в работу вступили «старички» К155РЕ3 и К556РТ4. Кстати микросхемы ПЗУ К155РЕ3 и К556РТ4 прожглись без проблем. Что меня очень сильно удивило. То ли партия хорошая попалась, то ли наговаривают на них.
Программировал простейшим ручным программатором.
![программатор программатор](https://www.pvsm.ru/images/2024/05/12/odnoplatnik-na-155-i-serii-9.jpg)
Если закрыть глаза на комплекс недостатков, то Ахиллесовой пятой ЭВМки можно назвать малый объем ПЗУ. И вот я терзаюсь: может надо было убрать РОН R2 из ядра и поставить его на адресацию ПЗУ. Это дало бы возможность адресации ПЗУ до 4кб.
И отсутствие таймера, что тоже в некоторой степени осложняет написание программы.
Каждой микросхеме по конденсатору! Это не про нас.)))
По-моему, получился неплохой подарок для программиста. А начинающим можно пошагово изучать принцип работы ЭВМ. Проект открытый. Все исходники прилагаются. Вот такой вот «убийца Raspberry Pi» получился. Кстати назвал его «Берёста», правда без Pi.)))
немного видео:
Содержание архива:
папка КАнютаASM - компилятор (файл EXE, исходник на Python, примеры)
папка BIN - содержит коды прошивок для ПЗУ
beresta_simulation.DSN -симулятор Proteus
Симулятор немного отличается от оригинальной схемы, что никак не влияет на функционал. Выходы ОЗУ 155РУ2 (7489) дважды инвертируются. Вместо РЕ3 или РТ4 используется ПЗУ 2764. И главное, чтобы симуляция запустилась не забываем в свойствах микросхемы ПЗУ 2764 выбрать файл прошивки. Примеры прошивок лежат в папке BIN.
beresta_schematic.BMP - принципиальная схема Берёста-4
programmator.BMP - принципиальная схема программатора
берёста4.LAY6 - печатная плата (Sprint Layout)
описание БерЁста.DOCX - описание инструкций Берёста-4
ссылка на архив Яндекс Диск.
https://disk.yandex.ru/d/yVwu1Q39LSZc3g
ссылка на github
Автор: Попов Николай