|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Аппаратный эмулятор Радио-86РК на ESP8266
Author |
Message |
heavy
Novelist
Joined: 03 Mar 2018 01:22 Posts: 32
|
Всем доброго времени суток. Делаю проект аппаратного эмулятора Радио-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, по возможности буду и в форуме появляться.
Last edited by heavy on 03 Mar 2018 23:03, edited 1 time in total.
|
03 Mar 2018 01:38 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
круто
|
03 Mar 2018 11:38 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 709 Location: WWW
|
Зачем нужна 78HC00 ?
|
03 Mar 2018 11:47 |
|
|
fifan
Devil
Joined: 06 Oct 2006 03:17 Posts: 859 Location: г.Лянтор,Сургутского р-на,ХМАО
|
Если загуглить ESP8266 или ESP-01, то это - Wi-Fi модуль, где же здесь процессор или плис на худой конец?
|
03 Mar 2018 11:55 |
|
|
heavy
Novelist
Joined: 03 Mar 2018 01:22 Posts: 32
|
Не совсем верно. ESP8266 это SOC, у которого есть и процессор (довольно мощный, тактовая до 160МГц) и ОЗУ и WiFi-модуль и еще куча всего. Ему для работы нужна только внешняя SPI-флэшка и кварц. Если брать тот же ESP-01 (один из самых дешевых модулей на ESP8266), то там уже все собрано, т.е. установлен сам ESP8266, SPI-флэшка (обычно 8-16 Мбит), кварц и вся аналоговая часть WiFi + PCB-антенна. Стоит это "чудо" на Ali примерно 100р с доставкой. Прошивается обычным USB-UART. Для работы ему надо подать только 3.3В. Тут придется объяснить как генерируется 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В (белый) используются обычные резисторы с выходов логики. По схеме, думаю будет все понятно.
|
03 Mar 2018 12:25 |
|
|
heavy
Novelist
Joined: 03 Mar 2018 01:22 Posts: 32
|
Добавлю, кстати, схему сюда. На случай, если кто-то не хочет лезть на гитхаб.
|
03 Mar 2018 12:27 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
мы же уже обсуждали это - там достаточно мощный проц внутри
|
03 Mar 2018 17:16 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 709 Location: WWW
|
А как вообще пишутся подобные эмуляторы ? Создаются программные модели составных частей (типа процессора и т.д.) и потом на основе их «собирается» устройство ?
|
03 Mar 2018 22:09 |
|
|
heavy
Novelist
Joined: 03 Mar 2018 01:22 Posts: 32
|
Я обычно начинаю с эмуляции железа. В этом проекте основная сложность была именно с выводом ТВ-сигнала. Я уже подобное делал сначала на AVR, позже на STM32. И там и там использовался SPI, вот и решил, что I2S тоже подойдет, к тому же @cnlohr уже делал вывод графики через I2S. Попробовал и все получилось. Дальше просто проверил, что оставшихся ресурсов хватит на эмуляцию процессора. В принципе, считаю, что на ESP8266 можно сделать и эмулятор Спека, хоть и не очень знаком с его железом. Основная проблема, думаю, будет в генерации цвета, но тоже все решаемо. Остальная переферия эмулируется довольно просто - обычные порты ввода-вывода.
|
03 Mar 2018 22:15 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
Да, я тоже пытался к эмулю спека подъехать на этом железе, но в лоб не получится - там не наберется 48K свободной памяти
Ну может разве что 16K, ну и для видео придётся городить чёто на мелкой логике...
|
03 Mar 2018 22:27 |
|
|
heavy
Novelist
Joined: 03 Mar 2018 01:22 Posts: 32
|
Ну как сказать. У него ОЗУ 80кб. Я в своем проекте оставил стандартную СДК, т.к. хочу еще оставить возможность обновления и загрузки программ по WiFi. При таком раскладе, у меня остается порядка 16кб свободных (при учете выделенных 2кб под ПЗУ, 32кб под ОЗУ, эмуляцию переферии, ОС и т.д.). Т.ч.если брать спек 48к, то надо будет всего 48+16=64кб ОЗУ + немного на сам эмулятор. Думаю, если без СДК, то вполне реально. Если найдутся единомышленники, то можно попробовать и его заэмулить на этом же железе. У меня уже есть опыт программирования на ESP8266 без SDK (делал собственный загрузчик), ничего сложного там нет. При этом, можно будет и сохранить работоспособным WiFi, только отдельно от самого эмулятора. В ESP8266 можно заливать несколько программ и с помощью загрузчика выбирать нужную. Одна программа будет без SDK и работать эмулятором, вторая - с SDK, будет генерировать графику, обслуживать клаву и WiFi, и будет использоватся для подгрузки образов и т.д. Ну это чисто как вариант В принципе, РК-шку планирую закончить за следующую неделю-две. Можно будет и спеком заняться. У меня даже два реальных Спека лежат - Дельта и Нафаня вроде, хоть и в неизвестном состоянии.
|
03 Mar 2018 22:59 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
Тот же cnlohr показывал, как выкинуть всё лишнее и разогнать чип до невозможности: http://www.nedopc.org/forum/viewtopic.php?p=131605#p131605У меня самого пока руки не дошли до этих экспериментов - я максимум, что сделал, так это его видеовыход NTSC прошил и погонял...
|
03 Mar 2018 23:06 |
|
|
heavy
Novelist
Joined: 03 Mar 2018 01:22 Posts: 32
|
Так и я про то же. Если есть интерес - давайте мутить
|
03 Mar 2018 23:08 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
Есть интерес Может память снаружи прицепить какую I2C или SPI?
|
03 Mar 2018 23:12 |
|
|
heavy
Novelist
Joined: 03 Mar 2018 01:22 Posts: 32
|
Думаю, штатного железа хватит для этого. Единственное, с чем я не сталкивался - так это с генерацией цвета в ТВ-сигнале. Читал что-то про квадратурную модуляцию, но, насколько понимаю, для цветов Спека хватит просто двигать фазу цветовой несущей, верно ?
|
03 Mar 2018 23:16 |
|
|
Who is online |
Users browsing this forum: Bing [Bot], vital72 and 2 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|