Компьютер «ЮТ-88» на базе Z80 и Arduino Mega 2560

Jun 18, 2024 00:54



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 без необходимости использования переключателей логического уровня.

Кроме того, существуют похожие работающие проекты, которые послужили вдохновением для этого проекта:
  • В статье «Ретро-вычисления с Arduino Mega и процессором Z80» показано, что можно напрямую подключить Z80 к Arduino Mega 2560 и управлять процессором при помощи микроконтроллера.
  • RetroShield Z80 вместе с рабочими примерами (базовый тест, BASIC, мониторы) показал, как именно управлять Z80 на практике.
Без значительного замедления процессора

В двух вышеприведенных проектах для тактирования Z80 используется таймер микроконтроллера с частотой 0,1 МГц, что в несколько десятков раз медленнее обычной тактовой частоты Z80.

Я же вообще не использую таймер для тактирования Z80.

Я просто устанавливаю высокий тактовый сигнал Z80, перемещаю байт с Z80 на Arduino Mega 2560 или наоборот, устанавливаю низкий тактовый сигнал примерно на микросекунду и повторяю этот процесс. В результате, средняя тактовая частота составляет около 0,5-0,6 МГц - неплохое улучшение по сравнению с 0,1 МГц и незначительное замедление по сравнению с процессором КР580ВМ80А с 2 МГц в исходном "ЮТ-88".

Бонус: апгрейд с большим дисплеем и клавиатурой

Если базовая конфигурация ЮТ-88 кажется вам ограниченной, взгляните на мой следующий проект - Как добавить дисплей и клавиатуру в любой проект на Arduino - например, римейк компьютера "ЮТ-88".

ют-88, arduino, tindie, dfrobot

Previous post Next post
Up