Знакомьтесь, MiSTer
Маскот MiSTer FPGA
Я долго придумывал вступление к теме FPGA-реимплементации в контексте ретро, но это сложнее чем кажется. Давайте попробуем издалека. Сейчас электроника довольно неплохо стандартизирована, но ведь 40–50 лет назад ситуация была гораздо сложнее. То, что мы сейчас принимаем как должный и абсолютный незыблемый стандарт, когда-то таковым не являлось. Как, например, то, что в 1 байте 8 бит. Были машины и с 6 и с 9 битными байтами и много чего еще. Полнейшее дикое поле, со своими половцами и печенегами :)
Тем собственно старая техника и интригует. Сколько человекочасов было убито на её проектирование, какие гениальные и не очень решения принимались. И всё это будет утеряно? Да и просто — как это всё работало? Вопрос, который, думаю, интересовал многих ретро-энтузиастов ещё с детства.
Презервация
Более-менее доступный способ ознакомться с программной частью старых машин — эмуляторы. Мы можем позапускать старые програмки, поиграться с историческими операционными системами. Но что насчёт железа? Это не менее интересно, что в целом и заставляет людей собирать «всякий старый хлам». Эмулятор не обязан быть точным воспроизведением железа, в угоду оптимизаций некоторые части систем могут быть подменены на упрощенные модели или просто выкинуты. Хитрая периферия? Просто забудьте.
Презервация старого железа — это один из по-своему важных и интересных вопросов. Важных прежде всего для истории. Если немного уходить в философию, то это один из способов сказать инженерам прошлого (многие из которых вполне живы, молодая же отрасль), что их решения, принятые индустрией или отвергнутые — не забыты. И до сих пор могут быть интересны инженерам и энтузиастам настоящего.
Но как сохранять железо? Оно физически стареет, изнашивается, выгорает. Не всё может быть восстановлено, так как часть компонент уже просто не производят. Ну многие могут вспомнить про схемы электрические принципиальные, когда-то в Союзе они входили в официальную документацию к прибору. Да, они могут быть полезны. Но, как и текстовая документация, они не интерактивны, их нельзя просто попробовать, без вложения времени и сил на сборку схемы с нуля. В случае с микросхемами, для них может и не быть открытой документации такого вида, а подобрать современный аналог может быть непросто, если вообще возможно.
Вот было бы круто, если бы у нас был какой-то способ описать логическую схему цифрового прибора (электрическая схема часто избыточна), да так, чтобы по ней можно было как восстановить само устройства, так и как-либо образом изучить как оно работает… Стойте, такой способ есть! Ещё в 80х годах были придуманы так называемые языки описания аппаратуры (Hardware Description Languages) — VHDL и Verilog. «Программы» написанные на них не исполняются в классическом понимании этого термина, однако они могут быть «скомпилированы» в схему, пригодную для отлития в кремнии, то есть в настоящую физическую микросхему.
А ещё они могут стать «прошивкой» для FPGA. Как вы наверное знаете, FPGA (подвид ПЛИС) не классический процессор какого-либо типа с фиксированным набором инструкций, а специализированная микросхема, с изменяемой внутренней структурой, позволяющей ей «прикинуться» какой угодно цифровой микросхемой. Внутри не происходит никакой эмуляции запрограммированных компонент, как в случае с программной эмуляцией на процессорах общего назначения. Схема действительно переносится физически, но не перманентно, то есть связи между элементами могут быть перепрограммированы с новой «прошивкой».
Почему же не использовать FPGA вообще для всего, в том числе для современной техники? Ну, одна из ключевых характеристик FPGA это количество логических вентилей. В современном процессоре общего назначениях их запросто может быть миллионы. И хоть FPGA, способная вместить такое количество вентилей, теоретически и практически возможна, стоить она будет десятки тысяч долларов. Собственно FPGA до сих пор недёшевы, их стоимость в разы превышает какие-нибудь микроконтроллеры вроде ATMega или ESP, однако и гибкость значительно выше. Использовавшись ранее для прототипирования, в какой-то момент FPGA стали дешевле, чем организовать производство новой микросхемы с нуля, особенно для небольших серий.
Вот мы и пришли к тому, чем нам могут быть полезны FPGA в деле презервации: мало того, что сохраняем для истории логику работы устройств в виде VHDL или Verilog описаний, так мы ещё и можем их пощупать в «физике». Да, в том числе с оригинальной периферией.
Как вы наверное уже знаете, многие современные «эмуляторы» периферии, вроде флеш-картриджей или эмуляторов дисководов (ODE) содержат в себе FPGA. Но есть и проекты, полностью реализующие машину целиком внутри одной микросхемы FPGA. Таких проектов на самом деле не один и даже не два. Например вся продукция компании Analogue является именно такими машинами. Но мы будем говорить о паре пожалуй самых известных проектов среди ретро-энтузиастов: MiST и MiSTer.
Analogue Mega Sg
MiST
Minimig
Концепция замены частей старых машин с помощью FPGA не нова. Так, в начале 2000х в результате дискуссии вокруг воссоздания чипсетов расширения (custom chipsets) для компьютеров Amiga с помощью FPGA, голандским инженером Дэннисом ван Виреном (Dennis van Weeren) был начат проект Minimig. Проект мини-компьютера с оригинальным процессором Motorola 68000 и FPGA в качестве периферии, совместимого с софтом для Amiga 500 был начат в 2005, а в 2007 году был полностью выложен в общий доступ, включая разводку плат, с лицензией GPL3. Примерно в то же время Вольфганг Форстер (Wolfgang Förster) начал свой похожий проект Suska, целью которого было воссоздание аналогичного мини-компьютера, но совместимого с Atari ST.
Несколько лет позднее (точную дату мне найти не удалось, но похоже что в районе 2013 года), вдохновившись успехами этих проектов Тиль Харбаум (Till Harbaum) начинает свой проект MiST (aMIga + atariST).
MiST FPGA
Опять же, это проект мини-компьютера, однако в этот раз вместо выделенного процессора, автор решил использовать реализацию Motorola 68000 прямо в FPGA. В основе компьютера лежит микросхема Altera Cyclone III (EP3C25, 24624 логических элементов). Кроме того на плате присутствует 32 МБ SDRAM, ARM-контроллер для операций ввода-вывода и USB-контроллер с хабом. За вывод отвечает аналоговый VGA, а за ввод собственно 4 USB и пара DB9 портов (как у Atari или Mega Drive). Кроме того, на плате присутствуют разъемы для подключения периферии, например MIDI, а также отладочный интерфейс JTag.
Проект использует собственный дизайн платы, так что вам сначала придётся изготовить её. Однако ввиду популярности проекта, полностью собранный MiST можно приобрести в магазинах энтузиастов Amiga и Atari. Больше ссылок на магазины смотрите на странице проекта.
Стоит сразу отметить, что хоть целью проекта и было воссоздать Amiga 500 и Atari ST совместимые компьютеры, сами авторы оговариваются, что цели 100% совместимости с периферией никогда не ставилось. Старые машины не могут выводить в подходящем для современных мониторов формате видео сигнала, внешняя периферия требует специфические разъемы, а также согласование уровней напряжения. Ну и плюс не абсолютно всё железо полностью документировано. С этими оговорками, 100% совметимость невозможна, однако авторы говорят о 95–99% совместимости с программами, в частности с играми.
Благодаря легкости подключения к современным мониторам, довольно простому способу запуска «прошивок», а также мейнстримовой USB-периферии, проект вскоре стал одним из первых (если не первым?) мультисистемным FPGA-компьютером. Среди контрибьюторов проекта, портивавших другие FPGA-проекты под MiST оказался и Алексей Мельников, более известный под ником sorgelig. Но о нём немного позднее.
На данный момент проект MiST до сих пор жив и активен. Как и с программными эмуляторами, «прошивки», реализующие определенные машины называют ядрами. Под MiST на данный момент написаны или портированы следующие:
Компьютеры:
Консоли:
Atari 2600
Atari 5200
Nintendo Game boy
NES
NEC PC Engine
Sega Master System
Sega Genesis / Megadrive
SNES и др.
А также ряд аркадных материнок с одной игрой, в том числе Capcom-овские аркады от Jotego (о нём также позднее). С полным списком можно ознакомиться здесь.
MiSTer
И вот мы подходим к главному герою нашего рассказа — MiSTer. Этот проект начал в 2017 году тот самый Алексей Мельников (sorgelig), упоминавшийся ранее. Если кто ещё не догадался, название MiSTer образовано по принципу сравнительных степеней прилагательных в английском: MiST и MiSTer (ср. big и bigger). То есть MiST, но лучше, «мистерее» :)
Алексей пошёл другим путём в отличие от оригинального проекта. За основу была взята готовая отладочная платформа DE10-Nano от Terasic. Это устройство размером с Raspberry Pi, на основе Altera Cyclone V (110 тысяч логических элементов). Кроме того, что не пришлось разводить плату с нуля, сразу из коробки мы получаем HDMI, USB, проводной Ethernet и пару гребёнок GPIO, для подключения дополнительной периферии. Кроме того, в самой SoC помимо собственно FPGA нашлось место и для ARM процессора с двумя ядрами Cortex-A9 на 800 МГц и 1ГБ памяти DDR3.
MiSTer FPGA
Это позволило сделать более продвинутую оболочку, фактически оснастив MiSTer ОС на базе ядра Linux. Нет, от этого он не стал программным эмулятором, так как основную работу по-прежнему выполняет FPGA часть. Однако, MiSTer гораздо проще подключить, например, к локальной сети, откуда он может подгружать ромы и прочие образы дисков. Также, благодаря ядру Linux, стало значительно проще подключать стороннюю компьютерную периферию, начиная с геймпадов и заканчивая Bluetooth и WiFi донглами.
На платформу MiSTer вскоре были портированы практически все ядра MiST. А благодаря простоте сборки и началу работы с ним, а также более мощной FPGA в основе, вскоре стали появляться всё новые ядра. В данный момент платформа MiSTer в мире FPGA-реимплементации это примерно тоже самое, что RetroArch в мире программной эмуляции: единый фронтенд для ядер, предоставляющий необходимый набор примитивов для разработчиков ядер и единообразный интерфейс для конечных пользователей.
Кроме того, все исходники платформы, включая разводку плат расширения (о них чуть позже) открыты, как и большое количество готовых ядер. На данный момент это:
50 компьютеров прошлого, включая, но не ограничиваясь:
Amiga
Amstrad CPC 6128
ao486 (PC 486SX-совместимый)
Apogee (Апогей БК-01)
Apple II+
Atari ST/STe
BK0011M (Электроника БК-0011М)
Commodore 64, Ultimax
Commodore VIC-20
DEC PDP-1
Galaksija (Югославский домашний компьютер)
Ondra SPO 186 (Чехословацкий домашний компьютер)
Sinclair QL
SV-328
Vector 06C (Вектор-06Ц)
Sharp X68000
ZX Spectrum и др
Конечно же не обошлось без домашних и портативных консолей, включая:
Отдельно стоит упомянуть аркадные ядра. На заре становления индустрии аркадные автоматы были фактически штучным товаром. Поэтому их нельзя просто «сэмулировать» разом все на одном ядре. И тем особенно интересны проекты вроде MiSTer, что исследователи оригинальных аркадных автоматоd таким образом могут задокументировать их строение.
Этим, в частности, занимается инженер из Испании Хосе Техада известный под ником jotego. Он профессиональный разработчик интегральных схем, и в свободное время исследует материнки аркадных автоматов, а затем описывает их для FPGA. Множество его работ доступны как для платформы MiST, так и для MiSTer.
Базовый список доступных аркадных ядер доступен по этой ссылке.
Платы расширения
Итак, что же нам потребуется для сборки MiSTer. Ну во-первых DE10-Nano ($210). Основной компонент, на котором происходит вся магия. Однако чтобы полноценно пользоваться платформой потребуются еще некоторые компоненты.
Terasic DE-10 Nano
SDRAM Board ($60)
SDRAM Board
К сожалению, тайминги DDR3 не подходят для большинства ядер, поэтому для их адекватной работы требуется модуль SDRAM. Это не обычная планка памяти из старого компьютера, а дополнительная плата, подключаемая к DE10-Nano через гребёнку GPIO. Must have.
IO Board ($50)
IO Board
Вторая базовая плата, которую обычно ставят практически в любую сборку. Подключается через вторую гребёнку GPIO. Плата добавляет разъем VGA, спобосный выводить сигнал RGB, YPbPr и собственно VGA. Кроме того на плате присутствует слот под вторую SD карту (может использоваться в качесте «жесткого диска» некоторыми ядрами) и порт UserIO, необходимый для подключения оригинальных аксессуаров. О нём чуть позже. Плюс на плату можно установить вентилятор, для дополнительного охлаждения FPGA чипа. Must have… kinda…
RTC Board ($20)
RTC Board
Плата с батарейкой типа «таблетка» для поддержки часов реального времени. В принципе MiSTer способен получать текущее время через интернет. Однако, если хотите использовать автономно, лучше взять. Опционально.
USB Hub ($50)
USB Hub
На самой плате DE10-Nano присутствует только MicroUSB-OTG разъем, поэтому для подключения компьютерной периферии желательно подключить USB хаб. В принципе может подойти любой, но для MiSTer есть и собственный вариант, того же размера что и остальные платы, чтобы было проще собрать их в один «бутерброд». Желательно.
ADC in ($10)
ADC in
Ещё одна опциональная плата, просто 3.5 мм audio-jack для подключения внешнего проигрывателя — если вы вдруг захотите загрузить программы с кассетного плеера.
«Классический» билд
Собрав вместо эти платы в тот самый «бутерброд» вы собственно получите «классическую» сборку MiSTer. Осталось только добавить корпус. Есть как варианты для 3D-печати, так и готовые из акрила и даже алюминия. Отдельно стоит остановиться на том моменте, что MiSTer абсолютно DIY решение, формально у него даже кнопки включения нет, то есть он стартует сразу как только включите его в розетку. Поэтому некоторые даже добавляют простой выключатель на провод питания.
Однако, «классический бутерброд» не единственный вариант для сборки MiSTer. Рассмотрим некоторые из них.
MiSTer Multisystem ($230)
MiSTer Multisystem
Британские ретро-энтузиасты, а по случаю также авторы канала и магазина RMC создали свою версию дочерней платы (daughter board) для MiSTer. Это продукт всё в одном, одна плата, включающая все основные модули, видео выходы, включая SCART, модуль SDRAM и многое другое. Они также разработали корпус, который можно либо купить у них же, либо напечатать самому. Вместе с корпусом билд больше всего походит на обычную игровую приставку. Как говорится, просто добавь DE10-Nano. Жаль цена довольно внушительная.
Более подробный обзор функционала MiSTer Multisystem можете посмотреть на их канале.
MiSTercade ($185)
MiSTercade
Если у вас есть JAMMA-совместимый аркадный кабинет, то можно поменять его мозги на MiSTer для ультимативного аркадного экспириенса. Для этого энтузиастами была разработана плата MiSTercade, устанавливаемая вместо IO Board. SDRAM всё-таки придется купить отдельно.
Это не единственный вариант для аркадных кабинетов, есть ещё проект Jammix ($225) или например JAMMA адаптер ($80) от Антонио Вийены (Antonio Villena).
IOUSB ($140 — $215)
IOUSB Plus
Этот самый Антонио Вийена также сделал свои варианты IO Board, совмещенные сразу с USB хабом, чтобы не пришлось его отдельно покупать. Отличительной особенностью является также порт DB9 (похож на COM, но только физически) вместо UserIO на официальной борде (который выглядит как USB3, но также не является им). Для этого порта он также изготовил переходники для популярных игровых контроллеров вроде NES, SNES и MegaDrive. К сожалению порт DB9 не на 100% совместим с родным для MiSTer протоколом SNAC, поэтому его использование требует модификации ядер, которые, впрочем, автор предоставляет.
Переходник для подключения оригинальных контроллеров
В версии Plus также имеется небольшой OLED экранчик, чтобы отображть информацию о текущем ядре (логотип).
Gamenaissance Board ($80)
На этот вариант наткнулся совершенно случайно на Aliexpress. Является ли он клоном чьей-либо разработки, либо это собственная разработка китайцев — увы не знаю. Но вариант очень крутой. Во-первых это IO Board совмещенная с USB-хабом. Для вывода аналогового видео есть вариант как с Mini-DIN10 aka Sega Saturn, так и VGA. Первый, полагаю, проще всего будет подключить к SCART телевизора — просто возьмите кабель от Saturn.
Кроме того, плата позволяет питать весь MiSTer от одного USB-C разъема, а также имеет кнопку включения прямо на корпусе. Плюс они предоставляют достаточно симпатичные варианты акриловых и металлических корпусов.
Плата совместима с официальными модулями SDRAM и RTC. Есть версия с JAMMA-edge!
JAMMA-edge
BlisSTer ($87)
BlisSTer Board
Авторы конвертера входов оригинальных контроллеров Bliss-Box сделали свою вариацию USB-хаба для MiSTer. Только в дополнение к собственно USB-портам они также добавили пару HDMI-подобных портов. На самом деле конечно там никакой не HDMI, используется только разъем. Это их собственный «стандарт» для их кабелей с переходниками на оригинальные разъемы приставок. В том числе есть варианты для контроллеров NES, SNES, Sony Playstation и тд.
«HDMI»-кабели для Bliss-Box
В принципе, можно собствено BlisSTer не покупать, используя Bliss-Box для компьютера также подключаемый по USB. Без каких-либо дополнительных манипуляций подключенные таким образом контроллеры будут работать как обычные USB-контроллеры, в том числе в меню MiSTer. Да, USB-стек добавляет свой лаг. Впрочем у них есть обходной путь под названием LLAPI, позволяющий «обойти» USB-стек, однако его поддержка должна быть в ядре MiSTer, чего в официальных ядрах нет. Впрочем авторы поддерживают свой набор модифицированных LLAPI ядер.
Периферия
Однако, самый интересный момент это каким образом подключить всю эту изотерическую периферию, что существует у старых систем, да чтоб с минимальным лагом, без десятка перетасовок через USB и тп. Ведь ради всего этого мы собирали MiSTer, ведь правда?
SNAC-адаптеры
Для это у MiSTer используется тот самый порт UserIO на официальной IO Board. К нему можно подключить любую официальную периферию при наличии соответствующего конвертера, называемого в терминах проекта SNAC (Serial Native Accessory Converter). Есть готовые конвертеры под входы различных приставок, а также популярен конвертер HDMI-to-SNAC, для подключения кабелей от Bliss-Box, что по мне выглядит даже более универсальным решением.
Плюс — в нулевой задержке, сигналы прокидываются в ядра напрямую, без USB и прочих конвертаций. В частности это лучший вариант для подключения световых пистолетов. Главный минус в том, что подключить можно только один аксессуар или контроллер за раз. Недостаточно линий. В этом плане выигрывает разработка Антонио Вийены, так как там можно подключить сразу 2 контроллера. Ну и дополнительный минус, устройства в UserIO не видятся Linux частью MiSTer, соответственно ими нельзя управлять основным меню, так что придётся всё равно держать USB-клавиатуру или контроллер.
Также одним из самых популярных периферийных аддонов для MiSTer является проект mt32-pi. Это реализация аппаратного MIDI-синтезатора Roland MT-32 из 80х на Raspberry Pi (не ниже 3-й модели).
mt32-pi со шляпой
Его поддержка была у множества игр на различных платформах, включая Amiga, MS-DOS или X68000. Игры от Sierra, Lucas Arts или тот же Doom звучат объективно лучше с ним, чем базовым синтезатором вроде того же SoundBlaster. В принципе, его эмуляция возможна и на ARM-ядре MiSTer, но сказывается его низкая мощность, звук может заикаться и проигрываться не так как надо.
В общем, для малины сделали отдельную шляпу (Pi-Hat) и прошивку, для реализации MT-32. Подключается этот аддон с помощью того же UserIO и не требует дополнительного питания. А в связи с появлением Raspberry Pi Zero 2, появились шансы на создание ещё более дешевого и компактного модуля.
Программная часть
С железной составляющей надеюсь всё более-менее понятно. Пара слов о программной части. Как и для Raspberry Pi, для запуска необходима MicroSD карточка. Установка не простая, а очень простая. Выполнив шаги по официальному гайду вы получите работающую инсталляцию MiSTer. Она уже содержит базовый набор ядер, но в ней естественно отсутствуют bios от систем, а также собственно ромы.
Добавление ромов пожалуй оставим за скобками. Могу только сказать, что MiSTer неплохо читает zip-архивы, так что небольшие (по размеру) ромсеты можно полностью запаковать в один zip. Для образов дисков MegaCD и TurboGrafx-16 отличной подойдет формат chd.
Собственно главное меню концептуально поделено на 2 главные сущности — ядра и скрипты. Ядра — это наши запускаемые старые машины. А скрипты — всё что относится к управлению нашим экземпляром MiSTer. Ими можно включить, например, Samba и SSH сервера. В частности могу порекомендовать скрипт update_all, который поможет вам как обновить основную систему MiSTer, так и установить ядра LLAPI, DB9, ядра аркадных автоматом от Jotego и многое другое. Скрипт сам скачает все необходимые базовые ромы и bios для ваших систем.
Ещё один интересный скрипт — Super Attractive Mode. Он запускает случайные ромы из поддерживаемых систем и крутит их минуту. Если нет ввода от пользователя, запускает следующую случайную игру. Неплохой вариант, когда не знаешь во что хочешь поиграть.
Заключение
Собственно, краткий итог по теме. MiSTer сейчас это примерно тоже самое что RetroArch в мире эмуляции. Проект затмил все остальные FPGA-платформы, по крайней мере если судить по западным ретро-сообществам.
Плюсы:
— Несколько десятков старых компьютеров, консолей и игровых автоматов на одной аппаратной платформе.
— Различные варианты ввода и вывода. Да, MiSTer можно подключить к вашему PVM.
— Основная масса исходников ядер открыта, что делает проект также полезным в деле изучения ретро-систем.
Минусы:
— Полностью DIY проект. В оригиналой сборке даже кнопка выключения питания не предусмотрена.
— Соответственно нет того лоска коммерческих продуктов, как у изделий компании Analogue.
— Высокая стоимость вхождения. Законченный классический билд обойдётся вам в долларов 400.
Каковы перспективы проекта? Проект стабилен и популярен. Ёмкости используемого чипа FPGA достаточно для реализации большинства систем вплоть до четвертого поколения консолей (1987–1997).
Прямо сейчас сообщество внимательно следит за реализациями следующих проектов:
Энтузиаст под ником Kintrix работает над реализацией компьютера Sharp X68000. Проект еще находится в стадии Beta, однако уже достиг вполне впечатляющих результатов. Этот компьютер прежде всего интересен тем, что его мощностей было достаточно для создания отличных портов с аркадных автоматов, практически неотличимых от оригинала.
Сергей Дводненко, также известный под ником srg320 работает над ядром Sega Saturn. Работы ещё много, однако оно уже способно запускать коммерческие игры. Ждём с нетерпением.
Автор FPGA ядер Роберт Пайп (Robert Peip), также известный как FPGAzumSpass работает над ядром Sony Playstation. Проект также достиг впечатляющих высот за прошедший год, он уже способен запускать коммерческие игры, однако пока не реализована поддержка звука.
К сожалению вероятнее всего ничего мощнее чем Saturn и Playstation мы на платформе MiSTer не увидим. Более мощные системы потребуют гораздо большего количества логических вентилей, которых просто нет в Cyclone V. Что ж, возможно в будущем появится MiSTer 2 или например MiSTest