- PVSM.RU - https://www.pvsm.ru -

Возможно ли возродить ретроигры и старые консоли на FPGA? Обзор нескольких open source-проектов по теме

FPGA всё чаще используют, чтобы вернуть к жизни винтажные видеоигровые платформы. Мы в Beeline Cloud [1] решили поговорить о примечательных начинаниях такого рода и подобрали несколько проектов, включая реализацию игры «Жизнь».

Изображение: macrovector (freepik-free-license)

Изображение: macrovector (freepik-free-license)

FPGA играет в «Жизнь»

В 1940 годах математики Станислав Улам и Джон фон Нейман работали в Лос-Аламосской национальной лаборатории, где изучали вопросы создания самовоспроизводящихся машин и разработали первую клеточно-автоматную систему. Их исследования породили десятки других научных проектов, но за пределы академии концепция вышла только в 1970-х — тогда математик Джон Конвей представил клеточно-автоматную модель, известную как игра «Жизнь». Она имитировала процессы рождения, выживания и смерти колонии клеток по определенным правилам. Игра «Жизнь» не только занятна для просмотра, к ней обращаются [2] учёные из областей математики, биологии и даже психологии. Например, американский философ Дэниел Деннет использовал игру «Жизнь», чтобы проиллюстрировать возможную эволюцию философских конструктов — сознания и свободы воли.

А в 2020 году американский инженер Питер Хизалев [3], фанат винтажных ОС и любитель ретроустройств, представил реализацию [4] «Жизни» на базе FPGA Arty A7-100T. Он использовал Chisel [5] и Verilog, а также набор библиотек Scala, позволяющий проектировать аппаратные абстракции высокого уровня.

Как правило, программная реализация игры жизнь подразумевает последовательный обход клеток. В аппаратной же реализации общее состояние сетки вычисляется для всех клеток одновременно на каждый такт. В архитектуре Хизалева каждый модуль клетки получает входные данные трёх типов и анализирует состояние восьми ячеек вокруг неё. При этом сами клетки хранятся в двумерном массиве — где количество строк и столбцов представляет собой параметры сетки.

Многим участникам ИТ-сообщества проект напомнил университетские практические [6] и лабораторные [7] работы с FPGA. Хотя некоторые и отметили [8], что упор на Verilog в подобных проектах излишен — писать в нём абстракции затруднительно. Вместо него можно, к примеру, применять функциональные языки по типу Clash или nMigen [8] ввиду возможностей метапрограммирования и параметризации.

Разработчик также поделился результатами запущенных игр. На этой замедленной гифке [9] можно проследить несколько десятков последовательных трансформаций клеток. Ещё автор проекта устроил своеобразный стресс-тест с обновлением сотни миллионов ячеек в секунду. Благодаря этому эксперименту получился занимательный (хоть и крайне ресурсоёмкий для генерации) узор [10] из огромного числа «замёрзших» поколений клеток.

Старый новый цифровой друг

Game Bub [11] — это эмулятор известных портативных игровых консолей от японской компании, построенный на FPGA. Устройство способно воспроизводить оригинальные картриджи, модифицированные и неофициальные игры [12], написанные силами пользователей-энтузиастов. Развитием Game Bub вот уже на протяжении четырёх лет занимается Илай Липсиц, инженер-разработчик и любитель олдскульных игровых приставок. В прошлом он уже писал программные эмуляторы NES (на языках Go [13] и Rust [14]), но в случае с Game Bub решил [15] обратиться к аппаратной реализации. Причина проста — возможность работать с уже существующей периферией и картриджами.

Первая сборка Game Bub заняла [16] у разработчика порядка четырех месяцев. Он намеревался [17] добиться достоверного воспроизведения существующих игровых проектов. Чтобы реализовать задумку, Липсиц выбрал [18] open source-платформу Pynq-Z2 [19] от AMD — в том числе благодаря поддержке программного пакета Vivado [20] для проектирования схем. Когда первый прототип был готов, Липсиц продолжил [21] дорабатывать Game Bub, но уже на базе FPGA XC7A100T.

Возникающие в процессе сложности несколько раз ставили автора в тупик — он даже подумывал [22] забросить проект из-за нехватки навыков в электротехнике. Однако в 2025 году реализация все же вышла в свет. Он добавил HDMI-порт для вывода изображения на экран, а также вибромоторы. В то же время консоль стала [23] автономной и портативной. В новой сборке питание было реализовано от аккумулятора, а не сменных батареек. Что касается графического интерфейса, за основу Липсиц взял открытый фреймворк Slint [24] (со своим предметно-ориентированным языком). Он написал виджеты для клавишного управления и переключения между меню.

Схема архитектуры Game Bub (elipsitz, CC-BY-SA 4.0 license)

Схема архитектуры [25] Game Bub (elipsitz, CC-BY-SA 4.0 license)

В августе этого года разработчик запустил краудфандинговый проект по выпуску готовых моделей портативной Game Bub. А в сентябре анонсировал браузерный инструмент для обновления прошивки — как официальной, так и кастомной. Исходный код Game Bub распространяется по лицензии GPLv3, а STL [26]-файлы, схемы и макеты печатных плат — по CC-BY-SA 4.0. Архитектура Game Bub описана на GitHub [25].

FPGA размером с кредитку

Проект 486Tang [27] воспроизводит опыт работы с 486-м компьютером на компактной Tang Console FPGA совместимостью с DOS. Сама по себе разработка достаточно свежая, поскольку автор представил её [28] в середине сентября этого года. Он портировал на FPGA ядро ao486 MiSTer [29], но ему пришлось внести несколько изменений — например, использовать SDRAM в качестве основной памяти. Дело в том, что MiSTer использует DDR3, но во времена 486-х стандарт DDR, очевидно, не существовал.

В своем блоге [28] автор также поделился процессом оптимизации производительности 486Tang и решениями, которые он принял в этом ключе. Инструкции по запуску, первичной настройке и установке игр собраны в README-файле репозитория [27].

Что интересно, автор проекта — фанат электроники и «винтажных» устройств. Неудивительно, что он является создателем и других открытых проектов на базе FPGA. Например, NESTang [30], воспроизводящей опыт игры на консолях NES. Проект предлагает 720p HDMI выход с аудио, загрузку данных с MicroSD с интуитивно понятным меню.

Ретроконсоли на других платформах

В прошлом году программист и инженер Бенджамин Тодд, проживающий в Токио, представил портативную консоль Retro-Lite-CM5 [31]. Цель проекта — создать мощное устройство, способное эмулировать игры японских консолей прошлых поколений. Чтобы реализовать задумку, автор не стал брать за основу Raspberry Pi 4 и использовал более производительный вычислительный модуль RK3588s с 64-битным ARMv8-процессором.

По словам разработчика, консоль предлагает «современный игровой опыт» и оснащена встроенными модулями PCIe Wi-Fi 6 и Bluetooth 5.2, а также IPS-экраном с разрешением 720p. Из интерфейсов присутствуют DisplayPort (реализованный через USB Type-C), USB 3.0 и HDMI 2.1. В качестве операционной системы используется Armbian. Хотя пользователи могут настроить стандартное Linux-окружение или использовать опенсорсный фронтенд для просмотра и запуска игр ES-DE [32].

Все исходники — модели корпуса для 3D-печати [33], списки компонентов и файлы для производства печатных плат [34] — опубликованы в открытом репозитории.

Изображение: studiogstock (freepik-free-license)

Изображение: studiogstock (freepik-free-license)

Другой проект по теме представил [35] анонимный разработчик в феврале 2025 года. Он поделился прототипом портативной консоли под названием Pi-Deck-5 [36]. В основе устройства лежит [37] Raspberry Pi 5 с портами под Ethernet и USB. Энтузиаст проектировал устройство для себя, а только потом решил поделиться наработками с сообществом, поэтому некоторые решения или не реализованы, или остаются «сырыми». В целом разработчик хотел бы упростить [35] сборку, однако у него пока нет свободного времени. Код и список компонентов выложены на GitHub, однако автор, к сожалению, не указал лицензию. Под устройство можно подобрать разнообразный софт [38] для эмуляции игровых платформ. Например, есть открытый дистрибутив Linux под названием Lakka [39] — с его помощью можно превратить устройство в эмулятор классических видеоигр.

Еще один интересный проект в этой области от шведского инженера Реналдаса Зёмы называется tiny-atari-2600 [40]. Его цель — построить компьютер на одном чипе, используя открытое программное обеспечение, а также Open Source PDK [41]. В основу дизайна легла реализация Atari 2600 на FPGA [42] от британского разработчика Лори Гриффитса, но с модификациями — например, добавлен узел для преобразования NTSC-сигнала (15 кГц) в VGA-сигнал (30 кГц).

Beeline Cloud [1] — secure cloud provider. Разрабатываем облачные решения, чтобы вы предоставляли клиентам лучшие сервисы.

Еще пара подборок для дополнительного чтения:

  • Полувековая ОС, текстовый браузер и программа-корректор [43] — рассказываем про ретрософт с многолетней поддержкой. В подборку «вечно молодых» проектов, которые развиваются на протяжении десятков лет, вошли: текстовый браузер из 90-х, полувековая операционка и система автоматической проверки орфографии.

  • Занимательные исследования промпт-атак [44] — разбираем исследования, посвященные способам обхода фильтров в LLM. Атаку проводят, например, с помощью ASCII-изображений, задавая вопросы о котах или добавив юмора в промпт.

  • GitOps для начинающих [45] — от открытых материалов для чтения с примерами — к open source-инструментам по теме. Еще одна подборка, в которой мы собрали вводные статьи, гайды и open source-решения для желающих погрузиться в тему GitOps.

  • Экспериментальный селф-хостинг [46] — материалы для начинающих, личный опыт, DIY-гайды и домашние лабы. Здесь вы найдете разнообразные материалы для тех, кто хотел бы начать знакомство с темой самостоятельного хостинга [47]: от книг с базовыми терминами и концепциями до личного опыта энтузиастов, которые решают практические задачи, строят домашние лаборатории и делятся находками.

Автор: beeline_cloud

Источник [48]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/open-source/433225

Ссылки в тексте:

[1] Beeline Cloud: https://cloud.beeline.ru/?utm_source=owned_media&utm_medium=habr&utm_campaign=beeline_cloud&utm_term=fpga_review

[2] обращаются: https://en.wikipedia.org/wiki/Conway

[3] Питер Хизалев: https://hackaday.io/petrohi

[4] реализацию: https://k155la3.blog/2020/10/09/conways-game-of-life-on-fpga/

[5] Chisel: https://www.chisel-lang.org/

[6] практические: https://news.ycombinator.com/item?id=27409767

[7] лабораторные: https://news.ycombinator.com/item?id=27407848

[8] отметили: https://news.ycombinator.com/item?id=27408102

[9] гифке: https://k155la3.blog/media/2020/gol_on_fpga/p60glidershuttle.gif

[10] узор: https://k155la3.blog/media/2020/gol_on_fpga/100mhz.png

[11] Game Bub: https://github.com/elipsitz/gamebub

[12] игры: https://en.wikipedia.org/wiki/Homebrew_(video_games)

[13] Go: https://github.com/elipsitz/nes-go

[14] Rust: https://github.com/elipsitz/nes-rs

[15] решил: https://eli.lipsitz.net/posts/introducing-gamebub/#a-brief-rant-about-fpga-retrogaming

[16] заняла: https://eli.lipsitz.net/posts/fpga-gameboy-emulator/

[17] намеревался: https://eli.lipsitz.net/posts/fpga-gameboy-emulator/#goals

[18] выбрал: https://eli.lipsitz.net/posts/fpga-gameboy-emulator/#fpga-development-boards

[19] Pynq-Z2: https://www.amd.com/en/corporate/university-program/aup-boards/pynq-z2.html

[20] Vivado: https://en.wikipedia.org/wiki/Vivado

[21] продолжил: https://eli.lipsitz.net/posts/introducing-gamebub/

[22] подумывал: https://eli.lipsitz.net/posts/introducing-gamebub/#schematic

[23] стала: https://eli.lipsitz.net/posts/introducing-gamebub/#goals

[24] Slint: https://github.com/slint-ui/slint

[25] Схема архитектуры: https://github.com/elipsitz/gamebub/blob/handheld/docs/architecture.md

[26] STL: https://en.wikipedia.org/wiki/STL_(file_format)

[27] 486Tang: https://github.com/nand2mario/486tang

[28] представил её: https://nand2mario.github.io/posts/2025/486tang_486_on_a_credit_card_size_fpga_board/

[29] ao486 MiSTer: https://github.com/MiSTer-devel/ao486_MiSTer

[30] NESTang: https://github.com/nand2mario/nestang

[31] Retro-Lite-CM5: https://github.com/StonedEdge/Retro-Lite-CM5

[32] ES-DE: https://gitlab.com/es-de/emulationstation-de

[33] для 3D-печати: https://github.com/StonedEdge/Retro-Lite-CM5/tree/main/enclosure/STL_V2

[34] производства печатных плат: https://github.com/StonedEdge/Retro-Lite-CM5/tree/main/rp2040_gamepad/PCB

[35] представил: https://www.reddit.com/r/Handhelds/comments/1in0svx/my_pi_5_handheld_prototype_that_i_finished_with/

[36] Pi-Deck-5: https://github.com/SquishyAWP/Pi-Deck-5

[37] лежит: https://github.com/SquishyAWP/Pi-Deck-5/blob/main/Component-List

[38] разнообразный софт: https://www.elecrow.com/blog/running-retro-gaming-emulators-on-raspberry-pi-5.html

[39] Lakka: https://www.lakka.tv/

[40] tiny-atari-2600: https://github.com/rejunity/tiny-atari-2600?tab=readme-ov-file

[41] Open Source PDK: https://github.com/google/skywater-pdk

[42] реализация Atari 2600 на FPGA: https://github.com/lawrie/ulx3s_atari_2600

[43] Полувековая ОС, текстовый браузер и программа-корректор: https://habr.com/ru/companies/beeline_cloud/articles/948134/

[44] Занимательные исследования промпт-атак: https://habr.com/ru/companies/beeline_cloud/articles/943874/

[45] GitOps для начинающих: https://habr.com/ru/companies/beeline_cloud/articles/951206/

[46] Экспериментальный селф-хостинг: https://habr.com/ru/companies/beeline_cloud/articles/953456/

[47] хостинга: https://www.reg.ru/?rlink=reflink-717

[48] Источник: https://habr.com/ru/companies/beeline_cloud/articles/955572/?utm_campaign=955572&utm_source=habrahabr&utm_medium=rss