Аппаратный эмулятор Радио-86РК на ESP8266

Советский компьютер Радио-86РК (1986) и его клоны

Moderator: Shaos

heavy
Novelist
Posts: 32
Joined: 03 Mar 2018 01:22

Аппаратный эмулятор Радио-86РК на ESP8266

Post by heavy »

Всем доброго времени суток.

Делаю проект аппаратного эмулятора Радио-86РК на ESP8266.
Отличие от других проектов - ультра низкая цена. Всё железо - это ESP8266 (например, ESP-01 за ~100рублей) и одна микросхема 74HC00 (за ~10 рублей). Плюс немного мелочевки - резисторы, регулятор 5->3.3В и разъемы. Все остальное делается программно.

Проект уже готов на 80%. Работает TV-выход (композитный PAL-сигнал), эмуляция процессора, эмуляция ВВ55 (клавиатура), ВГ75-ИК57 (экран). Сейчас в тестовом режиме работает чтение PS/2-клавиатуры. Запускается и работает монитор и разные игры. Скорость эмуляции пока не регулируется (она порядка 8 МГц), позже ограничу, сейчас интересует максимальная производительность при включенных всех подсистемах.

Что планирую сделать в ближайшую неделю:
- доделать клавиатуру
- сделать интерфейс для загрузки файлов в ОЗУ (без участия ПК, из встроенной флэшки)
- хочу добавить эмуляцию дисковода (может что-то лучше кто-то предложит).

Проект делаю в подарок отцу, именно он собрал в свое время Радио-86РК и привил мне тягу к компьютерам, за что ему большое спасибо :)

Ссылка на проект на github: https://github.com/klad-me/RK8266

Жду Ваши комментарии и предложения. Также, есть идея сделать нормальные печатные платы (они получатся где-то 20x80мм), но для двух-трех штук для меня это не имеет смысла. Если кому интересно - отписывайтесь, наберется достаточное количество людей - сделаем в складчину.
Если кто-то решит помочь проекту, оперативная связь по Telegram - @heavy131, по возможности буду и в форуме появляться.
You do not have the required permissions to view the files attached to this post.
Last edited by heavy on 03 Mar 2018 23:03, edited 1 time in total.
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Аппаратный эмулятор Радио-86РК на ESP8266

Post by Shaos »

круто :kruto:
Я тут за главного - если что шлите мыло на me собака shaos точка net
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: Аппаратный эмулятор Радио-86РК на ESP8266

Post by newold86 »

Зачем нужна 78HC00 ?
User avatar
fifan
Devil
Posts: 911
Joined: 06 Oct 2006 03:17
Location: г.Лянтор,Сургутского р-на,ХМАО

Re: Аппаратный эмулятор Радио-86РК на ESP8266

Post by fifan »

Если загуглить ESP8266 или ESP-01, то это - Wi-Fi модуль, где же здесь процессор или плис на худой конец?
heavy
Novelist
Posts: 32
Joined: 03 Mar 2018 01:22

Re: Аппаратный эмулятор Радио-86РК на ESP8266

Post by heavy »

fifan wrote:Если загуглить ESP8266 или ESP-01, то это - Wi-Fi модуль, где же здесь процессор или плис на худой конец?
Не совсем верно. ESP8266 это SOC, у которого есть и процессор (довольно мощный, тактовая до 160МГц) и ОЗУ и WiFi-модуль и еще куча всего. Ему для работы нужна только внешняя SPI-флэшка и кварц. Если брать тот же ESP-01 (один из самых дешевых модулей на ESP8266), то там уже все собрано, т.е. установлен сам ESP8266, SPI-флэшка (обычно 8-16 Мбит), кварц и вся аналоговая часть WiFi + PCB-антенна. Стоит это "чудо" на Ali примерно 100р с доставкой. Прошивается обычным USB-UART. Для работы ему надо подать только 3.3В.
newold86 wrote:Зачем нужна 78HC00 ?
Тут придется объяснить как генерируется PAL-сигнал.
У ESP8266 есть встроенный интерфейс I2S - это последовательная шина для передачи цифрового звука.
Проц заводится на 160МГц, тактовая I2S - на 10МГц. Таким образом, время вывода 1 бита - 0,1мкс.
Из всех сигналов I2S я использую только ногу с выходными данными, туда льются те данные, которые я загружаю. Для загрузки данных в I2S используется DMA с двойной буферизацией. Каждый буфер длиной 80 байт. Получается 80 байт * 8 бит * 0,1мкс = 64мкс/буфер. Это как раз время 1 строки PAL. Укладывая в буфера различные паттерны, я могу получить сигналы кадровой синхронизации и сигналы видимых строк.
Как раз подошли - зачем же нужна 78HC00. Т.к. I2S гонит просто битовый поток на большой скорости, то его я использую как генерацию сигнала яркости, для генерации синхронизации можно использовать только GPIO, но т.к. процессор навороченный (конвеер не всегда может прерваться на прерывание каждый такт), плюс много чего выполняется в прерывании (DMA, I2S, PS/2, таймеры и т.д.), то абсолютно точный тайминг по сигналам синхронизации через GPIO получить невозможно.
Если посмотреть на сигнал яркости, то из всей строки PAL - 64мкс, сам яркостный сигнал занимает 52мкс: 4мкс строчная сигхронизация, 8мкс цвет (которого нет), 52мкс яркость, 2мкс обратный ход. Видим, что вокруг синхроимпульса есть пустые области, с одной стороны 2мкс, с другой - 8мкс. Таким образом, я в яркостный сигнал добавляю уровень белого на время синхроимпульсов, а через GPIO включаю синхру на 1мкс раньше чем надо включить и отключаю на 1мкс позже, чем надо отключать.
78HC00 для этого делает простую логику:
если нет сигнала синхронизации, то на выход идут данные яркости без изменений
если есть сигнал синхронизации и сигнал яркости=черное, то на выходе будет черный
если есть сигнал синхронизации и сигнал яркости=белое, то на выходе будет синхронизация.
Для генерации уровней 0В (синхронизация), 0,3В (черный) и 1В (белый) используются обычные резисторы с выходов логики. По схеме, думаю будет все понятно.
heavy
Novelist
Posts: 32
Joined: 03 Mar 2018 01:22

Re: Аппаратный эмулятор Радио-86РК на ESP8266

Post by heavy »

Добавлю, кстати, схему сюда. На случай, если кто-то не хочет лезть на гитхаб.
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Аппаратный эмулятор Радио-86РК на ESP8266

Post by Shaos »

fifan wrote:Если загуглить ESP8266 или ESP-01, то это - Wi-Fi модуль, где же здесь процессор или плис на худой конец?
мы же уже обсуждали это - там достаточно мощный проц внутри
Я тут за главного - если что шлите мыло на me собака shaos точка net
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: Аппаратный эмулятор Радио-86РК на ESP8266

Post by newold86 »

А как вообще пишутся подобные эмуляторы ? Создаются программные модели составных частей (типа процессора и т.д.) и потом на основе их «собирается» устройство ?
heavy
Novelist
Posts: 32
Joined: 03 Mar 2018 01:22

Re: Аппаратный эмулятор Радио-86РК на ESP8266

Post by heavy »

newold86 wrote:А как вообще пишутся подобные эмуляторы ? Создаются программные модели составных частей (типа процессора и т.д.) и потом на основе их «собирается» устройство ?
Я обычно начинаю с эмуляции железа. В этом проекте основная сложность была именно с выводом ТВ-сигнала. Я уже подобное делал сначала на AVR, позже на STM32. И там и там использовался SPI, вот и решил, что I2S тоже подойдет, к тому же @cnlohr уже делал вывод графики через I2S. Попробовал и все получилось. Дальше просто проверил, что оставшихся ресурсов хватит на эмуляцию процессора.
В принципе, считаю, что на ESP8266 можно сделать и эмулятор Спека, хоть и не очень знаком с его железом. Основная проблема, думаю, будет в генерации цвета, но тоже все решаемо.
Остальная переферия эмулируется довольно просто - обычные порты ввода-вывода.
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Аппаратный эмулятор Радио-86РК на ESP8266

Post by Shaos »

Да, я тоже пытался к эмулю спека подъехать на этом железе, но в лоб не получится - там не наберется 48K свободной памяти

Ну может разве что 16K, ну и для видео придётся городить чёто на мелкой логике...
Я тут за главного - если что шлите мыло на me собака shaos точка net
heavy
Novelist
Posts: 32
Joined: 03 Mar 2018 01:22

Re: Аппаратный эмулятор Радио-86РК на ESP8266

Post by heavy »

Shaos wrote:Да, я тоже пытался к эмулю спека подъехать на этом железе, но в лоб не получится - там не наберется 48K свободной памяти
Ну может разве что 16K, ну и для видео придётся городить чёто на мелкой логике...
Ну как сказать. У него ОЗУ 80кб. Я в своем проекте оставил стандартную СДК, т.к. хочу еще оставить возможность обновления и загрузки программ по WiFi. При таком раскладе, у меня остается порядка 16кб свободных (при учете выделенных 2кб под ПЗУ, 32кб под ОЗУ, эмуляцию переферии, ОС и т.д.).
Т.ч.если брать спек 48к, то надо будет всего 48+16=64кб ОЗУ + немного на сам эмулятор. Думаю, если без СДК, то вполне реально. Если найдутся единомышленники, то можно попробовать и его заэмулить на этом же железе. У меня уже есть опыт программирования на ESP8266 без SDK (делал собственный загрузчик), ничего сложного там нет. При этом, можно будет и сохранить работоспособным WiFi, только отдельно от самого эмулятора. В ESP8266 можно заливать несколько программ и с помощью загрузчика выбирать нужную. Одна программа будет без SDK и работать эмулятором, вторая - с SDK, будет генерировать графику, обслуживать клаву и WiFi, и будет использоватся для подгрузки образов и т.д.
Ну это чисто как вариант :) В принципе, РК-шку планирую закончить за следующую неделю-две. Можно будет и спеком заняться. У меня даже два реальных Спека лежат - Дельта и Нафаня вроде, хоть и в неизвестном состоянии.
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Аппаратный эмулятор Радио-86РК на ESP8266

Post by Shaos »

Тот же cnlohr показывал, как выкинуть всё лишнее и разогнать чип до невозможности:

http://www.nedopc.org/forum/viewtopic.php?p=131605#p131605

У меня самого пока руки не дошли до этих экспериментов - я максимум, что сделал, так это его видеовыход NTSC прошил и погонял...
Я тут за главного - если что шлите мыло на me собака shaos точка net
heavy
Novelist
Posts: 32
Joined: 03 Mar 2018 01:22

Re: Аппаратный эмулятор Радио-86РК на ESP8266

Post by heavy »

Shaos wrote:Тот же cnlohr показывал, как выкинуть всё лишнее и разогнать чип до невозможности:

http://www.nedopc.org/forum/viewtopic.php?p=131605#p131605

У меня самого пока руки не дошли до этих экспериментов - я масимум, что сделал, так это его видеовыход NTSC прошил и погонял...
Так и я про то же. Если есть интерес - давайте мутить :)
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Аппаратный эмулятор Радио-86РК на ESP8266

Post by Shaos »

heavy wrote:
Shaos wrote:Тот же cnlohr показывал, как выкинуть всё лишнее и разогнать чип до невозможности:

http://www.nedopc.org/forum/viewtopic.php?p=131605#p131605

У меня самого пока руки не дошли до этих экспериментов - я масимум, что сделал, так это его видеовыход NTSC прошил и погонял...
Так и я про то же. Если есть интерес - давайте мутить :)
Есть интерес

Может память снаружи прицепить какую I2C или SPI?
Я тут за главного - если что шлите мыло на me собака shaos точка net
heavy
Novelist
Posts: 32
Joined: 03 Mar 2018 01:22

Re: Аппаратный эмулятор Радио-86РК на ESP8266

Post by heavy »

Shaos wrote: Есть интерес
Может память снаружи прицепить какую I2C или SPI?
Думаю, штатного железа хватит для этого. Единственное, с чем я не сталкивался - так это с генерацией цвета в ТВ-сигнале. Читал что-то про квадратурную модуляцию, но, насколько понимаю, для цветов Спека хватит просто двигать фазу цветовой несущей, верно ?