MicroPython на SNES: как запустили Python на консоли 90-х
MicroPython, облегчённая версия Python для микроконтроллеров, неожиданно появилась на платформе, которая старше многих современных разработчиков. Энтузиаст под псевдонимом Claude Fable портировал интерпретатор на Super Nintendo Entertainment System (SNES), что стало настоящей сенсацией в сообществе

MicroPython, облегчённая версия Python для микроконтроллеров, неожиданно появилась на платформе, которая старше многих современных разработчиков. Энтузиаст под псевдонимом Claude Fable портировал интерпретатор на Super Nintendo Entertainment System (SNES), что стало настоящей сенсацией в сообществе ретро-гейминга и встраиваемых систем. Это достижение доказывает, что даже 30-летнее железо способно выполнять высокоуровневый код, открывая новые возможности для обучения и прототипирования.
Как MicroPython работает на SNES
Claude Fable взял стандартную реализацию MicroPython и адаптировал её для процессора SNES — 16-битного WDC 65816 с тактовой частотой 3,58 МГц. Объём оперативной памяти консоли составляет всего 128 КБ, а видеопамять — 64 КБ, что крайне мало для Python-интерпретатора. Тем не менее, Fable удалось уместить базовый интерпретатор, включая поддержку целых чисел, списков, словарей и строк, в доступное пространство. Код выводится через стандартный видеорежим SNES, используя шрифт, нарисованный в спрайтах.
Производительность, как и следовало ожидать, ограничена. Простые циклы и математические операции выполняются за доли секунды, но более сложные скрипты могут заметно тормозить. Однако сам факт работы Python на 30-летней консоли впечатляет. Для сравнения, оригинальная SNES никогда не предназначалась для интерпретируемых языков — все игры писались на ассемблере или C, чтобы выжать максимум из ограниченных ресурсов.
Почему это стало возможным только сейчас?
MicroPython изначально создавался для современных микроконтроллеров, таких как ESP32 и STM32, где есть мегабайты флеш-памяти и сотни килобайт ОЗУ. SNES же — это система, где каждый байт на счету. Ранее попытки запустить высокоуровневые языки на ретро-консолях ограничивались C, ассемблером или специализированными скриптовыми движками. Проект Claude Fable — первый случай успешного портирования MicroPython на консоль эпохи 16 бит.
Это достижение стало возможным благодаря детальному знанию архитектуры SNES и оптимизациям MicroPython. Fable пришлось переписать значительную часть кода, связанную с управлением памятью, и отказаться от некоторых функций (например, поддержки чисел с плавающей точкой), чтобы уложиться в лимиты. Кроме того, он использовал специальные трюки, такие как размещение кучи Python-объектов в области ОЗУ, которая обычно резервируется для видеопамяти, но может быть переназначена.
Технические детали порта
Порт использует модифицированную версию MicroPython v1.23, скомпилированную под архитектуру 65816. Интерпретатор занимает около 64 КБ ПЗУ, ещё 32 КБ выделено под кучу Python-объектов. Взаимодействие с аппаратурой SNES — контроллером, звуком, графикой — осуществляется через специальные встроенные модули, написанные на C и ассемблере. Например, модуль snes.graphics позволяет выводить спрайты, а snes.controller — читать нажатия кнопок. Полный исходный код доступен на GitHub под лицензией MIT.
Одно из главных ограничений — отсутствие поддержки прерываний и DMA в Python-скриптах, что делает невозможной плавную анимацию. Весь рендеринг происходит в основном цикле, что приводит к мерцанию при сложных сценах. Однако для простых демок или текстовых игр этого вполне достаточно. Fable также планирует добавить поддержку звука через модуль snes.audio, который будет использовать встроенный DSP SNES.
Кому это нужно и как использовать
Проект интересен прежде всего ретро-энтузиастам, которые изучают программирование под SNES. Вместо того чтобы сразу учить ассемблер, они могут начать с Python и постепенно углубляться. Также это может вдохновить на портирование MicroPython на другие ретро-платформы — например, Sega Genesis или Nintendo 64. Для сообщества MicroPython это демонстрация гибкости языка и его способности работать на крайне ограниченном железе.
В российском контексте проект может привлечь внимание участников ретро-сообществ, таких как «Ретрогаммер» или сцен на Demoscene. Однако практическая польза для массового пользователя минимальна — это скорее технический курьёз. Тем не менее, для обучения основам программирования на реальном железе это отличный инструмент: можно написать простую игру на Python и сразу увидеть её на экране SNES.
Какие игры можно создать на Python для SNES?
С текущими ограничениями производительности полноценные коммерческие игры вряд ли возможны, но для простых жанров, таких как текстовые квесты, головоломки или минималистичные аркады, Python подходит. Например, можно реализовать «Змейку» или «Тетрис» с базовой графикой. Fable уже продемонстрировал демку, где спрайт двигается по экрану с помощью контроллера. Для более сложных проектов потребуется оптимизация критических участков кода на ассемблере.
Будущее MicroPython на SNES
Claude Fable планирует улучшить производительность, возможно, добавив JIT-компилятор или предкомпиляцию горячих участков кода. Также в планах — поддержка сохранения скриптов на картриджах с флеш-памятью и звуковой подсистемы SNES. Не исключено, что появится сообщество разработчиков, создающих мини-игры на Python для SNES. Сроки не объявлены, но можно ожидать обновлений в ближайшие месяцы.
Кроме того, порт может быть адаптирован для других консолей на схожей архитектуре, например, для Super Famicom или даже для некоторых аркадных автоматов. Это открывает путь к созданию универсальной среды разработки для ретро-платформ, где Python станет связующим звеном между современными инструментами и старым железом.
Итог
MicroPython на SNES — это не просто хак, а доказательство того, что старые консоли могут служить платформой для современных языков программирования. Проект Claude Fable открывает двери для нового поколения ретро-разработчиков и напоминает, что ограничения — это вызов, а не приговор. Если вы хотите попробовать себя в программировании под SNES, но боитесь ассемблера, MicroPython — отличная отправная точка. А для сообщества это ещё один шаг к тому, чтобы стереть границы между эпохами.