8-битный советский самодельный компьютер
«ЮТ-88» минимальной конфигурации можно собрать, имея всего пять компонентов:
Сборка
Чтобы собрать такой «ЮТ-88»:
- Достаньте пять вышеперечисленных компонентов.
- Загрузите скетч mega с GitHub.
- Загрузите скетч mega в Arduino Mega 2560 с помощью Arduino IDE.
- Соберите компьютер, как показано на фото выше. Клавиатуру 4х4 следует подключить к выводам А8..А15.
Вот и всё! Только имейте в виду, что для полного пробуждения Arduino Mega 2560 может потребоваться около пяти секунд. Вам также может потребоваться настроить яркость ЖК-экрана при помощи отвёртки.
Вверху в центре экрана должно отобразиться 11 - знак того, что компьютер готов к вводу команд («директив»). Вы можете вернуться в этот режим в любое время нажатием кнопки Right для сброса компьютера.
Вы можете начать использовать компьютер, нажав «3» (клавиша S4) для тестирования дисплея или «4» (клавиша S5) для тестирования ОЗУ - должно отобразиться C400 - первый адрес, который не принадлежит ОЗУ.
Технические характеристики
- Процессор Z80, работающий в среднем на частоте примерно от 0,5 до 0,6 МГц (нет постоянной частоты - тактовые импульсы задаёт Arduino Mega 2560, нерегулярно)
- 4 КБ ПЗУ по адресам от 0000H до 0FFFH (монитора и подпрограммы калькулятора)
- 1 КБ ОЗУ по адресам от C000H до C3FFH (с возможностью расширения примерно до 7 КБ, поскольку Arduino Mega 2560 имеет 8 КБ ОЗУ)
- 4 КБ электрически стираемого ПЗУ, разделённого на четыре секции («ленты») для постоянного хранения кода пользователя - замена кассетного магнитофона.
- Клавиатура: 16 цифр от 0 до F, Select («шаг назад») для редактирования памяти, Left для выбора текущей «ленты», Up для загрузки ОЗУ на текущую «ленту», Down для загрузки текущей «ленты» в ОЗУ, Right для сброса ЮТ-88, Reset для сброса Arduino Mega 2560.
Директивы монитора
Внимание: не используйте директивы 9 и A, предназначенные для работы с магнитофоном. Вместо них используйте кнопки Up и Down соответственно, а также кнопку Left для выбора одной из четырёх "лент".
Клавиша Параметры Назначение
--------------------------------------------
0 АДР Запись данных в ОЗУ с адреса АДР
1 - Запись данных в ОЗУ с адреса С000Н
2 - Чтение данных из ОЗУ с адреса С000Н
3 - Тест индикации
4 - Тест ОЗУ
5 АДР Чтение данных из ОЗУ с адреса АДР
6 - Пуск программы с адреса С000Н
7 АДР Пуск программы с адреса АДР
8 АДР1, АДР2 Контрольная сумма данных с АДР1 по АДР2
9 АДР1, АДР2 Запись данных на ленту с АДР1 по АДР2
А АДР Чтение данных с ленты со смещением, равным АДР
В - Индикация времени
С C3FD Установка времени. Наберите C3FD, секунды (00-59), минуты (00-59), часы (00-23). Нажмите Right в нужный момент.
Советы по программированию
- Чтобы отобразить байт (в шестнадцатеричном формате) в крайнем левом положении на ЖК-дисплее, сохраните байт в ячейке памяти 9002. Чтобы изменить оставшиеся два индикатора ЖК-дисплея, сохраните байты в ячейках памяти 9001 и 9000 соответственно.
- Чтобы ввести байт с клавиатуры в аккумулятор A, используйте команду RST 2 (код операции D7).
- Чтобы опросить состояние клавиатуры, используйте команду IN A0 (код операции DB A0) или RST 4 (код операции E7). Это поместит значение в аккумулятор A от 01 до 0F, если нажата соответствующая клавиша (от S2 до S16); 10, если нажата клавиша "0" (S1); 80, если нажата клавиша "шаг назад"; и 00, если ни одна из этих 17 клавиш не нажата.
- Чтобы задержаться на одну секунду, используйте команду RST 3 (код операции DF).
- Чтобы отобразить содержимое регистров HL и A, используйте команду RST 5 (код операции EF).
- Чтобы ввести два байта в регистр DE, используйте команду RST 6 (код операции F8).
- Чтобы завершить вашу программу, используйте команду RST 0 (код операции C8).
Почему я это сделал
Некоторое время назад меня охватило непреодолимое желание собрать советский самодельный компьютер 1988 года выпуска
ЮТ-88 на базе процессоре КР580ВМ80А (Intel 8080), вот такой:
Однако, вместо того, чтобы искать старинные микросхемы, программировать древние ПЗУ и спаивать всё вместе, я решил применить более современный подход. Я сохранил процессор (ну почти - я заменил КР580ВМ80А на Z80), а всё остальное заменил на Arduino Mega 2560, ЖК-дисплей 16x2 для Arduino и готовую «клавиатуру» в виде 4x4 кнопок. Это не только радикально уменьшило количество компонентов, но и позволило обойтись без пайки.
Почему Arduino Mega 2560
Arduino Mega 2560 - естественный выбор для этого проекта, поскольку он сочетает в себе легко программируемый микроконтроллер с достаточным количеством контактов для взаимодействия с 40-контактным процессором Z80 и работает при напряжении 5 В, что делает его идеальным для прямого взаимодействия с Z80 без необходимости использования
переключателей логического уровня.
Кроме того, существуют похожие работающие проекты, которые послужили вдохновением для этого проекта:
Без значительного замедления процессора
В двух вышеприведенных проектах для тактирования Z80 используется таймер микроконтроллера с частотой 0,1 МГц, что в несколько десятков раз медленнее обычной тактовой частоты Z80.
Я же вообще не использую таймер для тактирования Z80.
Я просто устанавливаю высокий тактовый сигнал Z80, перемещаю байт с Z80 на Arduino Mega 2560 или наоборот, устанавливаю низкий тактовый сигнал примерно на микросекунду и повторяю этот процесс. В результате, средняя тактовая частота составляет около 0,5-0,6 МГц - неплохое улучшение по сравнению с 0,1 МГц и незначительное замедление по сравнению с процессором КР580ВМ80А с 2 МГц в исходном "ЮТ-88".
Бонус: апгрейд с большим дисплеем и клавиатурой
Если базовая конфигурация ЮТ-88 кажется вам ограниченной, взгляните на мой следующий проект -
Как добавить дисплей и клавиатуру в любой проект на Arduino - например, римейк компьютера "ЮТ-88".