Несколько лет назад разработчик под ником Smashcat портировал на Arduino Uno игру для ZX Spectrum — Manic Miner. У Arduino памяти меньше, чем было у оригинального Spectrum, поэтому реализовать всё это на 8-битном микроконтроллере оказалось совсем непросто. С тех пор части того первого порта превратились в полноценный игровой движок, что позволило перенести на Arduino Uno и ряд других игр.

реклама кормит Уточку 🦆

Самодельный игровой движок на Arduino Uno, выводящий графику классической игры

Движок умеет выводить двумерную карту с прокруткой при разрешении 256×256, а также до девяти спрайтов одновременно. Графика привязана к 50 кадрам в секунду, но только на настоящем Arduino Uno с кварцевым генератором: некоторые платы-реплики лишены достаточно точного тактирующего чипа, чтобы воспроизвести видеосигнал, который формируется без кадрового буфера.

реклама кормит Уточку 🦆

Этот сигнал, как и два ШИМ-канала звука, тоже генерируются напрямую — а для подключения к монитору и контроллеру нужно лишь несколько резисторов. Среди вариантов управления есть даже поддержка геймпада от NES. Вся схема собирается на плате-расширении (daughterboard), которая даёт интерфейс контроллера, резисторы для видеосигнала и драйвер для динамика.

Отдельного внимания заслуживает сам факт: все четыре игры воспроизводятся на железе, которое по возможностям уступает оригинальному ZX Spectrum. Для 8-битной платформы вроде Arduino Uno формирование видеосигнала и звука «на лету», без выделенного видеочипа, — заметное инженерное достижение, которое и делает проект любопытным для сообщества энтузиастов.

реклама кормит Уточку 🦆

В таком виде система запускает оригинальный Manic Miner и ещё три игры: Scramble, Space Invaders и Pac-Man. Движок и остальной код выложены на странице проекта в GitHub, причём доступна и WebAssembly-версия, позволяющая запустить отдельные части софта без специфического железа. Оригинальный ZX Spectrum и спустя более чем 40 лет продолжает вдохновлять подобные проекты.