Статьи » Разработки
Добавить статью

Эмулятор 8080 на Arduino

2020-01-12 в 13:56 (последнее изменение 2020-02-07 в 15:03)

Микропроцессор 8080 (КР580ИК80, позже КР580ВМ80А) у многих ассоциируется с домашними компьютерами "Радио-86РК", "Орион-128", "Вектор-06Ц" и другими. Но область его применения значительно шире, чем одна "бытовуха". Он применён в качестве основного в компьютерах СМ1800, "ВЭФ-Микро" и "Океан-240", а в качестве вспомогательного - в "Искре-226", а это - машины вполне профессионального назначения. Даже на такой "чужой" ему платформе, как ДВК, этот микропроцессор нашёл применение в контроллерах КСД и КСМ - соответственно, контроллере символьного дисплея и контроллере символьного монитора. Понятно, что тогда под дисплеем и монитором понимали одно и то же, просто эти платы - разработки разных лет, несколько отличающиеся устройством и возможностями. Так, например, во второй из них добавлена возможность подмешивания сигнала от КГД - контроллера графического дисплея.

Компьютеры ПК8000 и "Корвет" занимали промежуточное положение между домашними и профессиональными - они были учебными. Во втором из них видеоконтроллер превосходил по возможностям EGA. Первый же был попроще, но надёжнее.

Данный микропроцессор использовался и в качестве встроенного - т.е., с той целью, с которой сегодня применяются микроконтроллеры. Например, в громоздком, прожорливом, но весьма надёжном принтере "Электроника МС6304", многоголосных аналоговых синтезаторах с цифровым управлением "Маэстро" и RMIF TI-3, LD-проигрывателях "Русь" и "Амфитон" ВП-201, пишущей машинке "Элема".

В отличие от других популярных восьмибитных микропроцессоров, 8080 и его аналоги требовали трёх напряжений питания, подаваемых и снимаемых либо одновременно, либо в определённой последовательности, иначе микросхема выходила из строя. Поздние выпуски КР580ВМ80А могли работать от одного напряжения, но этот режим не считался штатным - если микропроцессор всё же выйдет из строя от несоблюдения правил эксплуатации, с гарантии он снимался. Затем был выпущен микропроцессор КР580ВМ1 с расширенными возможностями, для которого питание одним напряжением является штатным режимом.

В конце девяностых начались первые признаки ностальгии пользователей по различной технике с применением данного процессора. К тому времени начали устаревать ПК даже на процессорах 80386. Владельцы "пней" начали продавать "трёшки" по доступным ценам, и многие из них попадали к программистам, среди которых оказался житель Нижнего Новгорода Виктор Пыхонин. Он начал работу над EMU80 - эмулятором "Радио-86РК" и других компьютеров на микропроцессоре КР580ВМ80А. Этот эмулятор довольно долго был мегахитом, "широко известным в узких кругах". Вскоре последовали аналогичные эмуляторы и от других разработчиков.

Позже эмулировать системы с данным микропроцессором начали другими способами. "Специалист" - на Java, "Орион-128" - на Flash... Но постепенно обе технологии начали исчезать из браузеров пользователей. Web 2.0 медленно наступал, и программист Александр Дёмин написал эмулятор "Радио-86РК" на JavaScript, а за ним другой программист Shaos адаптировал эту разработку к планшетам, не имеющим физической клавиатуры.

А потянут ли эмуляцию КР580ВМ80А современные микроконтроллеры? Одним из первых такой эксперимент провёл тот же Александр Дёмин, написавший эмулятор "Радио-86РК" для платы Maximite на контроллере PIC32. Через несколько лет программист Алексей Пресняков написал эмулятор того же компьютера для недорогой платы ESP-01S.

А что же Arduino, хватит ли для тех же целей возможности этой, как известно, не самой мощной в мире платформы? Оказывается, впритык, но хватит. Программист под ником companje, объединив наработки Даниэля Карлинга и того же Александра Дёмина, сделал на её основе функциональный аналог компьютера MITS Altair 8800, но для его работы потребовалось подключить к плате слишком уж много периферийных устройств. Об этой конструкции можно почитать здесь: https://github.com/companje/Altair8800/blob/master/README.md

Другой программист, под ником maly, решил данную разработку значительно упростить - так, чтобы кроме Arduino, потребовалось только любое устройство с USB-хостом - ПК, смартфон или планшет с возможностью запуска терминальной программы. Эмулятору 8080 выделено 4 кБ ПЗУ и 1 кБ ОЗУ с возможностью расширения до 1,5. Всё это внутри микроконтроллера уже имеется - периферия не требуется. Вот только очень удобный Бейсик "Микрон", к которому привыкли пользователи "Радио-86РК", туда не поместится. Нужен Tiny Basic - очень компактный интерпретатор, разработанный программистом Ли-Ченом Вангом ещё в 1976 году. О том, как maly всё это объединил, он рассказывает здесь: https://www.uelectronics.info/2017....arduino

Краткий рассказ о том, как он всё это реализовал.

1. Взял за основу уже упомянутую выше разработку companje.
2. Написал слой аппаратных абстракций, где выделил для ПЗУ адресное пространство от 0x0000 до 0x0fff, для ОЗУ - от 0x1000 до 0x13ff. Конечный адрес ОЗУ можно сдвинуть, увеличив его объём до упомянутого выше 1,5 кБ.
3. Скачал исходники Tiny Basic здесь: http://www.autometer.de/unix4fun/z80pack/ftp/altair/ и немного поправил код в части MACRO.
4. Пропустил через онлайновый ассемблер (теперь есть и такой) здесь: https://www.asm80.com/
5. Из полученного при ассемблировании двоичного кода сделал заголовочный файл basic.h

Результат он выложил сюда: https://github.com/maly/arduino8080basic?files=1

Что ж, посмотрим, что будет, если всё это залить в Arduino-совместимую плату с характеристиками не хуже, чем у Uno, и запустить на устройстве, к которому через USB-хост подключена плата, терминальную программу.

Как видим, эмулятор работает, и без подключения чего-либо к GPIO. Задействованным у Arduino оказался только USB-интерфейс. Можно попробовать набрать в терминале несколько строк и запустить.

Самый неудобный в применении из-за трёх напряжений питания, но и самый романтичный из восьмибитных микропроцессоров обрёл новый, виртуальный дом, возможно, и в вашем Arduino. И здесь он уже не так требователен к питанию, но работает ничуть не хуже. Разве это не здорово?


Не пропустите обновления! Подписывайтесь на нашу группу Вконтакте.
Так же у нас есть Telegram канал.
Вам понравился наш материал? Поделитесь с коллегами!

Просмотров: 5140. Оценка статьи: 5.0 из 5. Уже оценило 1 читатель

Об авторе - tormozedison

More by tormozedison

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]