
В середине 1990-х годов растущие вычислительные мощности сделали возможным создание «эмуляторов» старых игровых консолей и компьютеров — программ, позволяющих запускать игры для них на обычном домашнем ПК.
Сегодня эмуляторы стали повседневностью. Про них слышал практически каждый. Они есть для любой мыслимой платформы, работают на любых устройствах, включая компьютеры, смартфоны и даже специальные эму-консоли. Применение эмуляторов не ограничивается только лишь запуском старых игр. Ретро-компьютерные энтузиасты используют их и для разработки новых проектов для старых платформ.
Казалось бы: за первые три десятилетия эпохи массовой компьютеризации были созданы буквально сотни разных домашних компьютеров и игровых консолей, от массовых до крайне обскурных. Настоящее раздолье для любителей ретро от мира электроники: ностальгируй — не хочу, изучай, осваивай, разрабатывай сколько влезет.
Но кому-то этого оказалось мало. Так появились эмуляторы вымышленных платформ, никогда не существовавших в реальности — явление, известное под названием «Fantasy Console» или «Fantasy Platform». Сегодня углубимся в эту тему: что это за платформы, откуда взялись, кому нужны, и что с ними делают. А по пути разберёмся с интересной терминологической запутанностью.
Эмуляторы и VM
Прежде, чем мы начнём разбираться в сортах вымышленных платформ, стоит покопаться в парочке около-философских вопросов, которые уже много лет порождают жаркие споры.
Первый из них: что такое эмулятор и виртуальная машина, и в чём разница между ними. Является ли виртуальная машина эмулятором, и можно ли называть эмулятор старой игровой консоли виртуальной машиной? А если эта консоль не существовала в реальности, чем является её эмулятор? А как в эту картину вписываются FPGA-реплики устройств? Попробуем разобраться. Ну или запутаться ещё сильнее.
Почва для путаницы тут действительно есть. Дело в том, что и виртуальная машина, и эмулятор могут иметь абсолютно одинаковую технологическую основу. Но могут и не иметь, так как в природе существует два вида виртуальных машин. И с точки зрения пользователя они очень похожи на эмулятор: позволяют запускать ПО, старое либо современное, в отдельной «песочнице». Более того, виртуальные машины могут применять технологии эмуляции.

Первый вид виртуальной машины — это разделение ресурсов машины физической. Есть реальный компьютер, у него есть некоторые ресурсы: процессор, память, устройства ввода-вывода. Это называется «хост»: хозяйская система. Программы, работающие на хосте, могут изменять его окружение: читать и писать оперативную и внешнюю память, взаимодействовать с этим изменённым окружением. Одна программа записала текстовый файл, другая получила. Одна программа поменяла системные настройки, и они повлияли на настройки всех программ.
Но возможно создать программу-гипервизор, которая разделит одни и те же физические ресурсы между несколькими независимыми окружениями. Тогда для всех программ внутри одного окружения всё будет выглядеть так, как будто они работают на хосте, и про другие окружения они знать не будут. Они не смогут поменять состояние друг друга или главной системы, из которой будет выбираться и запускаться нужное окружение. Это и есть виртуальная машина, но не простая, а так называемая «системная», сиречь System VM.
Такая виртуальная машина имитирует работу полноценной системы со всеми её аппаратными и программными компонентами, и может применять технологии эмуляции. Например, в простейшем случае код программ выполняется нативно, реальным процессором реальной машины. Но если он предназначен для другого процессора, с другой системой команд, может применяться эмулятор процессора, позволяющий выполнять код для этой системы команд. Например, x86-команды на процессоре ARM. Также могут эмулироваться и устройства ввода-вывода: видеокарты, звуковые карты, сетевые интерфейсы, и так далее.

Есть и второй вид виртуальной машины, так называемый «процессная», Process VM. Если системная машина изначально привязана к реальности и реализует целый компьютер, процессная машина работает с чистой абстракцией, необходимой для выполнения одиночного приложения (процесса). Она реализует спецификацию платформы, позволяя запускать специально разработанные под платформу программы на любом компьютере, для которого есть реализация таковой VM. Так работают все наши любимые байт-кодовые языки: Java (на виртуальной машине JVM), .NET (на CLR). Так работала древняя J2ME (на KVM), на которой создавались игры для старых мобильных телефонов.
Процессная машина, как правило, включает в себя интерпретатор или компилятор байт-кода — практически системы команд вымышленного, специально придуманного процессора. Процессор этот несколько более высокоуровневый, чем реальные железные процессоры, но также и ограничен в возможностях строго нуждами языка. Также присутствуют интерфейсы ввода-вывода, обычно реализуемые расширениями и соответствующими библиотеками, представляющими API.

Реализация самого простейшего интерпретатора байт-кода может показаться очень знакомой разработчикам эмуляторов. Это может быть цикл, выбирающий из виртуальной памяти коды команд и интерпретирующий их с помощью очень большого switch/case с кодами всех команд. В современной реальности, конечно, и виртуальные машины, и эмуляторы используют более продвинутые технологии — такие как JIT-компиляция и динамическая рекомпиляция в нативный код.
Дело в том, что в среднем эмулятор действительно устроен точно так же, как и процессная виртуальная машина. Но его задача немного иная. Он тоже реализует спецификацию платформы, но иную: не формальную в виде документа, а пропущенную через реальность — фактическую аппаратную реализацию этой платформы, со всеми ошибками и тончайшими особенностями. В частности, для эмуляции обычно очень важны тайминги работы системы и пограничные случаи, возникающие при нештатной работе с устройствами ввода-вывода.

Наконец, FPGA-реплики. Это интересное переходное звено на основе микросхем программируемой логики: схема и возможности устройства определяются загружаемой прошивкой, описывающей логические связи стандартных элементов. Если у эмулятора и Process VM общая техника, но разные задачи, у эмулятора и FPGA-реализации общая задача, но разные техники.
В силу особенностей своего устройства, FPGA реализует полный параллелизм и обеспечивает полный контроль над временем работы всех своих элементов. Это позволяет учитывать ещё более тонкие моменты при воспроизведении оригинальной системы, недоступные программным эмуляторам.
Например, обычный эмулятор просчитывает целый кадр настолько быстро, насколько позволяет процессор хост-устройства, выводит готовый кадр на экран, а всё остальное время находится в ожидании. FPGA-реплика может работать в реальном времени, имитируя оригинальные тайминги всех устройств. Это позволяет подключать к реплике реальные внешние устройства, и они будут взаимодействовать с ней точно так же, как с оригинальным компьютером или игровой консолью.
Вывод здесь таков: эмулятор и виртуальная машина являются родственными технологиями. Но виртуальная машина реализует спецификацию по её документальному описанию, а эмулятор — это точный имитатор чего-то, что уже существовало ранее в физической форме.
Платформа
Следующий философский вопрос, родственный первому — что такое платформа? Сопутствующие ему темы — что такое реплика, клон, совместимый компьютер? В этом споре сломано немало копий.
Особенно ярко эта проблематика подсвечена среди отечественных энтузиастов компьютера ZX Spectrum. Дело в том, что изначально этот компьютер разработан и производился в Великобритании. Но в СССР огромную популярность завоевали его клоны на отечественной элементной базе, совершенно иные по схемотехнике, и тем не менее, совместимые программно и предназначенные только для одного: быть местным Спектрумом.

Позже к этому дуализму добавились программные эмуляторы, FPGA-реплики, а также новые машины, обладающие своими собственными уникальными возможностями, но имеющими в своей основе спектрум-совместимый режим — ATM Turbo, Sprinter, ZX Evolution и ZX Next. Вопрос встал ребром: что из этого ещё Спектрум, а что уже нет?
Здесь мы имеем воплощённый корабль Тесея. Элементы Спектрума с годами менялись, выходили новые ревизии оригинальных плат, незначительно изменяющие оригинальную схему, потом появились полностью новые схемы клонов, потом железо заменили программные эмуляторы. Но форма, позволяющая оригинальным программам запускаться на новых устройствах, сохранялась. Это и есть платформа: сама идея Спектрума.

Платформа — это не оригинальный британский ZX Spectrum образца 1982 года, и даже не его прототип, спаянный в стенах Sinclair Research. Это «правила игры», набор соглашений, которые родились во время разработки компьютера и окончательно утвердились в созданном серийном образце. Если точно соблюдать эти правила игры, любая реализация, независимо от технологической базы, позволит запускать программы.
Можно ли называть всё, что позволяет запускать программы для ZX Spectrum, Спектрумом — вопрос открытый. И это тоже вопрос соглашений. Хотя окончательного консенсуса в комьюнити энтузиастов до сих пор нет, есть ряд более-менее устоявшихся и непротиворечивых мнений:
Оригинальный британский ZX Spectrum от Sinclair Research во всех его ревизиях — это точно ZX Spectrum.
Модели ZX Spectrum от Amstrad и Timex Sinclair — тоже ZX Spectrum, но со звёздочкой.
Отечественные компьютеры с другой схемотехникой, в том числе на базе FPGA — это клоны ZX Spectrum.
Компьютеры с дополнительными возможностями, в том числе на базе FPGA — это ZX Spectrum-совместимые машины.
Программные реализации, в том числе самостоятельные устройства на микроконтроллерах (как AVR ZX Spectrum и Мурмулятор) — это эмуляторы ZX Spectrum.
Всё перечисленное является реализациями правил игры, реализациями платформы ZX Spectrum.

Отдельного внимания заслуживает способ формирования и жизненный цикл платформы.
Спецификация компьютерных устройств содержит набор определённых возможностей и ограничений. В прошлом они определялись прежде всего техническими возможностями и экономическими соображениями: на момент разработки платформы существует только такая-то память, и чтобы обеспечить конкурентоспособную цену, можно установить только такой-то её объём. Быстродействие памяти и чипов позволяет сделать только определённое разрешение графики, и так далее.
Предсерийный образец железа закреплял бумажную спецификацию, окончательно уточняя все неоднозначные моменты. Так рождалась платформа. Дальше начиналась её жизнь.
В 1980-х годах железо дешевело на глазах, действовал закон Мура, согласно которому число транзисторов в новых микросхемах примерно удваивалось каждые два года. Но платформы жили дольше двух лет. Требовалось выпускать новые версии, попутно снижая себестоимость и обновляя технологии.

Как правило, постепенно происходила интеграция элементов из отдельных чипов в одну сверхбольшую интегральную схему — по этому пути прошли многие домашние компьютеры и 8-16 битные игровые консоли. Проектирующим эти новые реализации инженерам приходилось прилагать усилия для максимально точного следования изначальной спецификации и сохранения совместимости с уже существующим ПО.
Другая история случилась с упомянутыми выше виртуальными машинами и виртуальными платформами, о которых пойдёт речь далее. Ведь у них не было аппаратной основы, определяющей возможности, а способ реализации не менялся со временем.
Виртуальная платформа
Спецификации платформ прошлых лет рождались на основе конкретных технических предпосылок, и предназначались для реализации в железе. Но что, если создать спецификацию, исходя из иных соображений?

Например, естественным качеством виртуальной платформы является совместимость: достаточно перенести её реализацию на целевое устройство, и это автоматически делает доступными всю библиотеку созданных для платформы программ. Таким свойством в своё время воспользовалась платформа J2ME, позволяющая запускать одни и те же игры на сотнях разных моделей телефонов, с разными процессорами и прочим железом.
В конце 2000-х годов в моду вошёл ретрогейминг. Виртуальные машины стали машиной времени, позволяющей переместиться в мир видеоигр прошлых лет — в лице эмуляторов старых консолей и компьютеров. Помимо настоящих эмуляторов, воспроизводящих особенности старого железа, были созданы виртуальные машины для воспроизведения старых приключенческих игр, разработанных на специальных скриптовых движках, таких как SCUMM компании LucasArt — современная ScummVM позволяет запускать десятки подобных игр, не прибегая к низкоуровневой эмуляции.

Виртуальные платформы не только открывают окно в прошлое. Другой причиной их создания может быть творческая реализация в настоящем. Популярность ретрогейминга вызвала у некоторых энтузиастов, увидевших в пикселях не отпечаток прошлого, а самоценный художественный приём, желание реализовать свои творческие амбиции в области создания ретро-игр.
Разумеется, такие игры без проблем можно разрабатывать с помощью самых современных инструментов — хоть Unity, хоть Unreal Engine. Но их возможности практически безграничны, что легко вызывает творческий паралич. А вот ограничения, как известно, лишь подстёгивают творчество, вынуждая искать оригинальные решения в заданных рамках.

Но далеко не каждый современный разработчик готов окунуться в ретро по полной программе, с изучением ассемблера и работы с древним железом на уровне регистров, чтобы создать реальную ретро-игру для настоящей игровой системы из прошлого. Другие энтузиасты загорелись желанием создавать собственные ретро-консоли и компьютеры, но не все из них были способны воплотить свои идеи в реальном железе. Виртуальные платформы стали прекрасным способом для тех и этих унять свой творческий зуд.
И если раньше ограничения устанавливались самими техническими возможностями компьютеров, и нередко они были весьма неудобными, сейчас стало возможно выдумать свои собственные правила игры, не привязанные к реальности, достаточно удобные, чтобы комфортно творить, но достаточно строгие, чтобы служить творческим стимулом.
Древность: CHIP-8
Виртуальные платформы — идея не новая. Одна из первых подобных платформ была создана ещё на заре домашнего компьютеростроения, в середине 1970-х годов, и умудрилась проделать довольно замысловатый путь в современность, оставив заметное наследие. В том числе выражается оно и в самом явлении виртуальных консолей.

Речь идёт про CHIP-8, виртуальную машину для популярного в начале 1970-х годов, но ныне абсолютно забытого микропроцессора RCA 1802 «COSMAC», на базе которого создавались первые доступные рядовым пользователям домашние машины, названия которых тоже давно уже не на слуху: COSMAC Elf, COSMAC VIP, ELF II, SuperELF, Comx-35, Telmac 1800, Telmac TMC-600, Oscom Nano, Pecom 32 и 64, CyberVision 2001, и другие.
И сам процессор, и ряд машин на основе этих технологий, были созданы Джозефом Вайсбеккером, работавшим в RCA Corporation — компании, оказавшей огромное влияние на развитие радио и телевещания в США. Помимо миллиона других вещей, типа шестивольтовых «пальчиковых» радиоламп, среди заслуг RCA есть внедрение разъёма типа «тюльпан», и по сей день широко применяющегося в аудио и видеотехнике.

В середине 1970-х годов RCA, как и прочие игроки рынка высоких технологий, решила уделить внимание новинке, домашним компьютерам. Был создан двухчиповый процессор CDP 1800 (1974), потом он превратился в одночиповый микропроцессор CDP 1802 (1976). На его базе были созданы десятки компьютеров, часть которых я перечислил выше, и одна из самых ранних игровых консолей со сменными игровыми программами на картриджах, RCA Studio II. Консоль, впрочем, с треском провалилась. Зато процессор пригодился в космосе, в том числе на зонде Галилео и телескопе Хаббл.
По сравнению с более знаменитыми Intel 8080 и MOS 6502, CDP 1802 весьма примитивен. Он обладает всего одним основным 8-битным регистром для вычислений, но шестнадцатью 16-битными индексными регистрами. Архитектура 1802 не содержит привычного механизма вызова подпрограмм со стеком возвратов: вместо этого предусмотрена команда для выбора 16-битного регистра, работающего в качестве PC. В документации производитель предлагал использовать программную реализацию стека возвратов.

Системы на базе 1802 также были весьма примитивны. Они имели тактовую частоту от 1.76 до 2.81 мегагерц (производительность около 0.1-0.2 MIPS), 2-4 килобайта ОЗУ, и иногда входящий в состав чипсета видеоконтроллер CDP1861, над которым также работал Вайсбеккер. Этот чип реализует монохромную растровую графику с разрешением до 64 на 128 пикселей (да, высота больше ширины), выводимую на экран чёрно-белого телевизора.
Чтобы как-то совладать с зоопарком разнообразных машин и эффективно задействовать их ограниченные ресурсы, в 1977 году Вайсбеккер создал CHIP-8 — интерпретируемый байт-код, и по совместительству одну из самых первых виртуальных платформ. Описание системы было опубликовано в декабрьском номере журнала BYTE за 1978 год, где ей было дано авторское определение: «hexadecimal interpretive programming system».

CHIP-8 требовал для работы компьютер с процессором 1802 и видеоконтроллером 1861, с объёмом ОЗУ от 1 до 4 килобайт. В качестве базовой аппаратной платформы Джозеф использовал двухкилобайтный COSMAC VIP. Интерпретатор занимал 512 байт оперативной памяти, видеобуфер с разрешением 64 на 32 пикселей ещё 256 байт, а 96 байт отводилось на стек для вызовов подпрограмм. Вся оставшуюся память могла занимать загружаемая программа.

Байт-код CHIP-8 был близок к машинному коду, представляя собой 16-битные коды команд. Но возможности виртуального процессора превосходили возможности реального 1802, а код был более компактным. Значительная часть из 35 команд отводилась на взаимодействие с виртуализированным вводом-выводом: отрисовка спрайтов, опрос клавиатуры, генерация звукового сигнала, а остальные реализовали Тьюринг-полную систему.

Что интересно, Вайсбеккер также разработал концептуально аналогичную систему под названием Pseudo Machine Language (PML) для игровой консоли RCA Studio II, вышедшей на рынок в 1977 году. В её штатном ПЗУ также реализована подобная, но не совместимая с CHIP-8 виртуальная машина — частично похожая, но местами сильно отличающаяся. Вероятно, это был предшественник CHIP-8, которого Джозеф переработал под любительские нужды.

Благодаря публикациям в журналах VIPER и Electronics Today International, CHIP-8 и созданные на нём игры, публиковавшиеся в формате HEX-дампов, получили популярность среди тогдашних компьютерных энтузиастов. А в 1979 году произошло важное событие: Майк Бауэр опубликовал проект своего одноплатного любительского компьютера DREAM-6800 на базе микропроцессора Motorola 6800, содержащий в своём ПЗУ интерпретатор CHIP-8, позволяя воспроизводить видеоигры простейшими техническими средствами.

Несмотря на появление новых, куда более мощных платформ, CHIP-8 не был забыт на протяжении 1980-х годов. А в 1990-м году его ждало ещё одно новое свершение: был создан CHIP-48, интерпретатор для графического калькулятора HP-48. Он, впрочем, слегка сломал обратную совместимость, изменив действие некоторых команд.
Эти версии для различных устройств с разными процессорами закрепили за CHIP-8 статус настоящей виртуальной машины, не зависящей от железа, и дали ему путёвку в новое тысячелетие. В котором, конечно, практической ценности он уже не имел. Зато он стал прекрасной платформой для ретрокомпьютерного творчества.

Одни люди создавали новые игры — всего за десятилетия существования платформы было создано порядка 400–500 игр. Другие же писали собственные интерпретаторы, в том числе с расширенными возможностями. Реализация CHIP-8 стала традиционным упражнением для энтузиастов, постигающих азы разработки эмуляторов и виртуальных машин.
Консоль: PICO-8
Первой популярной платформой, подхватившей знамя CHIP-8, стала виртуальная игровая консоль PICO-8, увидевшая свет в 2015 году. Цифра 8 с дефисом в названии подозрительно напоминает отсылку к историческому предшественнику, хотя Джозеф Уайт, создатель платформы, никогда не упоминал его в качестве источника вдохновения.

Впрочем, технически это совершенно разные сущности. Дело в том, что PICO-8 не основывается ни на каких реальных технических предпосылках, все её ограничения носят эстетический характер.
Это касается и разрешения 128 на 128 пикселей, с соотношением сторон 1:1, какое можно было наблюдать разве что на ранних мобильных телефонах с поддержкой J2ME и в известной социальной сети с картинками, но не на компьютерах и игровых консолях прошлого. Это и палитра в 16 цветов, тщательно подобранных создателем платформы вручную, тогда как дизайн палитр старых устройств был вынужден отталкиваться от простоты их формирования на аппаратном уровне. Местный четырёхканальный звук хоть и звучит похоже на 8-битную музыку прошлого, использует формы волны, недоступные звуковым чипам тех лет.

Тем не менее, эти довольно произвольные ограничения, в особенности уникальная цветовая палитра, смогли сформировать очень узнаваемую аудиовизуальную эстетику платформы, её собственную идентичность. Достаточно мельком взглянуть на скриншот или видео, и сразу ясно: игра для PICO-8. Это определённо успех.
Что касается программной части, здесь всё так же принципиально иначе, чем в CHIP-8. В основе платформы лежит высокоуровневый скриптовый язык Lua, по простоте использования и читаемости напоминающий ушедший в прошлое стандарт для начинающих — Бейсик.
function _init() x = 64 y = 64 end function _update() if btn(0) then x -= 1 end -- Move left if btn(1) then x += 1 end -- Move right end function _draw() cls(1) -- Clear screen with dark blue spr(1, x, y) -- Draw player sprite #1 at (x,y) end
Для использования виртуальной аппаратуры консоли есть удобный API. Не нужно учить ассемблер и регистры. Правда, местный диалект поддерживает только 32-разрядные целые числа, без плавающей точки.
Для самих программ также предусмотрены довольно хитрые ограничения. Это 32 килобайта виртуального ОЗУ для графических и звуковых ресурсов, включающих спрайты, карты и буфер кадра, а также 32 килобайта виртуального ОЗУ для данных, доступ к которым выполняется функциями poke() и peek().

Программа на Lua хранит свои объекты и данные в отдельной динамической памяти объёмом до двух мегабайт. Исходный текст может иметь размер до 65536 символов и использовать до 8192 ключевых слов (if, then). Производительность кода ограничена искусственными «тактами», затрачиваемыми на выполнение операций — независимо от производительности компьютера, за один кадр можно выполнить довольно большое, но ограниченное число операций.
PICO-8 является не просто виртуальной машиной. Это ещё и игровой движок и инструменты для разработки. Всё, что необходимо для создания игр, уже встроено в саму программу: редактор кода, редактор спрайтов, редактор карт, музыкальный редактор-трекер, в котором также создаются звуковые эффекты. Всё-в-одном. Это очень сильно способствовало популярности платформы. Впрочем, есть и внешние редакторы — не всем удобно набирать текст, отображаемый в микроскопическом пиксельном разрешении.

Занимательной особенностью PICO-8 является концепция «картриджей». Это не просто бинарные ROM-файлы, а изображения размером 160 на 205 пикселей в формате PNG, содержащие обложку, название, а также сам код игры, хранимый посредством стеганографии, в младших битах пикселей изображения — лёгкий шум, почти незаметный для неискушённого глаза.
Несмотря на то, что PICO-8 является платной программой, платформа смогла завоевать большую популярность и сформировать вокруг себя мощное комьюнити. По грубым оценкам, для этой платформы создано порядка 10 тысяч игр и иных программ. Виртуальная мощность платформы позволяет делать куда больше, чем позволяли реальные консоли прошлого, поэтому среди игр много необычных проектов, в том числе использующих продвинутые ретро-3D эффекты.

Некоторые популярные инди-игры начали свою жизнь в рамках платформы PICO-8 и впоследствии вышли за её пределы — в частности, это игра Celeste (2018). Среди прочих программ есть и музыкальные редакторы, и множество демок и интро, и даже 3D-редактор picoCAD.
Хотя PICO-8 является виртуальной платформой, были созданы её порты для различных устройств, включая реальные портативные игровые консоли, например, от Anbernic и Powkiddy — многие из них идут с предустановленным проигрывателем программ для PICO-8. Есть и самодельные портативки на базе Raspberry PI RP2040 или ESP32, ориентированные исключительно на PICO-8.

И конечно, как и свой предшественник, PICO-8 породила наследие в виде аналогичных проектов. Это и официальный Picotron от Джозефа Уайта, альфа-версия которого была опубликована в марте 2024 года, и пока что не повторила успех оригинала, и множество иных платформ-подражателей.
Среди них есть не только виртуальные консоли, ориентированные исключительно на игры, но и виртуальные компьютеры, имитирующие домашние компьютеры прошлых лет. Самым популярным из таковых стал TIC-80.
Компьютер: TIC-80
Давным-давно аудитория домашних любителей видеоигр разделилась на два лагеря — консольный и ПК-шный. Ведь игровые консоли интересны не всем, и некоторым важна возможность делать что-то ещё. И на этот запрос в области виртуальных платформ быстро нашёлся свой ответ.

Виртуальный компьютер TIC-80 был создан Вадимом Григорюком в 2017 году, всего на пару лет позже PICO-8. Он весьма близко следует лекалам своего консольного коллеги, но вносит множество важных изменений. Прежде всего это открытость: код проекта изначально открыт для всех желающих под лицензией MIT. Доступна бесплатная обычная и платная PRO-версия, предоставляющая дополнительные удобства.
Так как TIC-80 — это виртуальный компьютер, а компьютеры часто работают с текстом, разрешение его экрана повыше: 240 на 136 пикселей, что обеспечивает вполне читаемый текст. При стандартном размере символа 6 на 8 пикселей в одну строку помещается 40 символов. При этом разрешение всё ещё достаточно пиксельное, чтобы поддерживать ретро-атмосферу.

У TIC-80 также есть своя уникальная, выбранная вручную 16-цветная палитра, называемая Sweetie-16. Но цветовые возможности ей не ограничены: пользователь может в любой момент менять цвета программно, выбирая любые 16 цветов из стандартной 24-битной RGB-палитры.
Другие ограничения также схожи, но более расслабленные. Поддерживается до 256 спрайтов и тайлов размером 8 на 8 пикселей, тайловые карты, 4-канальный звук с загружаемой формой волны. Для хранения графических и звуковых ресурсов предусмотрено 96 килобайт виртуальной оперативной памяти и 32 килобайта «видеопамяти», в которой также располагается растровый экранный буфер.

Самое главное отличие TIC-80 от PICO-8 скрывается в программной части. Здесь код можно писать не только на Lua, но также на JavaScript, Ruby, MoonScript, Fennel, Scheme, Squirrel, Wren, Wasm, Janet и Python. Для хранения кода предусмотрено 8 банков по 64 килобайта, общим объёмом 512 килобайт — в них располагается исходный текст. Переменные, массивы и объекты языка хранятся отдельно и не ограничены в размерах. Производительность тоже не имеет искусственных лимитов — код выполняется настолько быстро, насколько позволит процессор, в рамках стандартных 60 кадров в секунду.

Аналогично PICO-8, игры могут храниться в PNG-файлах методом стеганографии. Максимальный объём такого «картриджа» в стандартной версии ограничен 64 килобайтами. Чтобы в них помещалось побольше, исходный код упаковывается с помощью ZLib. На случай, если этот способ хранения не позволяет уместить особенно большую программу, предусмотрена возможность хранения данных в специальном блоке внутри PNG-файла, PRO версия с лимитом 512 килобайт, и обычные бинарные файлы, аналогичные ROM-файлам для эмуляторов.
Как и его консольный коллега, TIC-80 является инструментом всё-в-одном и предлагает встроенные редакторы всех необходимых ресурсов: редактор исходного кода, спрайтов и тайлов, звука и музыки. Они доступны в любой момент по горячим клавишам.

Хотя TIC-80 не смог полностью повторить успех PICO-8, он также нашёл свою аудиторию. Для него было создано предположительно несколько тысяч программ, включая игры, инструменты и всевозможные демки — и PICO-8, и TIC-80 часто фигурируют в современных демосценовых конкурсах в виде отдельной дисциплины.
И другие
Я рассказал лишь о трёх самых популярных виртуальных консолях. Но благодаря их успеху, подобных платформ теперь существует великое множество — аж несколько десятков. Некоторые прошли незамеченными, иные смогли найти свою собственную, более нишевую аудиторию.
Объём статьи не позволяет рассказать про них подробнее, поэтому я просто дам список известных мне разработок в алфавитном порядке, по возможности снабжённый ссылками и кратким комментарием:
atto — простой Бейсик-компьютер,
BASIC8 — непростой Бейсик-компьютер,
BrainFuckConsole74 — консоль, программируемая на BrainFuck,
C-Toy — песочница со встроенным компилятором C,
cel7 — консоль с цветной ASCII-графикой,
Continuum 93 — эмулятор вымышленного компьютера,
DRAK-0 — консоль, программируемая на ChaiScript,
DreamBox — консоль с полигональным 3D в 640 на 480,
Hexheld — полумифическая LCD-консоль с шестиугольными пикселями,
imeight — компьютер с Бейсик-подобным языком,
Kate — игровая консоль, работающая в браузере,
Leikr — консоль, программируемая на Groovy,
LIKO-12 — компьютер, напоминающий,
Little Game Engine (LGE) — платформа для создания аппаратно-независимых игр,
LowRes NX — консоль, программируемая на Бейсике,
MEG-4 — консоль с разрешением 320 на 200 и высокой производительностью,
MegaZeux — система для создания платформонезависимых игр, существующая с 1994 года,
Micro16 — компьютер с Бейсиком,
Micro16 — другой компьютер с вымышленным 16-битным процессором,
MicroW8 — консоль на базе Wasm, ориентированная на size coding,
Octo — современная среда разработки на базе CHIP-8,
Pixel Vision 8 — продвинутая пиксельная консоль на базе Lua и C#,
Pyxel — японский игровой движок для пиксельных игр на базе Python,
Vircon32 — продвинутая 32-битная консоль с разрешением 640 на 480,
WASM-4 — GameBoy-подобная 4-цветная консоль на базе Wasm.
Но парочка платформ, как мне кажется, заслуживает особого упоминания.
Во-первых, это платформа Gigadrive, стоящая на границе между эмуляторами и виртуальными консолями. Это вымышленный апгрейд реальной 16-битной игровой консоли Sega Genesis, придуманный японской компанией-разработчиком M2. И не просто придуманный, но и воплощённый в одноимённом программном эмуляторе, который был применён в сборнике переизданий игр Sega 3D Classics Collection для Nintendo 3DS, то есть в достаточно большом официальном коммерческом продукте.
Gigadrive отличается от оригинальной консоли удвоенным объёмом видеопамяти, четырьмя дополнительными слоями фоновой графики, и поддержкой глубины у слоёв фона и спрайтов для стереоскопического дисплея. Таким образом удалось адаптировать классические игры для стереоскопического 3D, сохранив их оригинальную графику, звук, и все нюансы игрового процесса.

Другая платформа, за которую зацепился мой глаз — свежайшая отечественная разработка «Брус-16», которой было посвящено несколько недавних публикаций на Хабре. Это виртуальная консоль с особым предназначением: учебная игровая платформа, открытую спецификацию которой должны воплощать в железе студенты, изучающие проектирование для микросхем программируемой логики (FPGA).
«Брус-16» имеет свой собственный уникальный 16-битный микропроцессор с гарвардской архитектурой, контроллер видео и звука, а также DMA-контроллер для быстрой передачи данных из памяти в контроллеры. Но главной особенностью лично для меня стала местная графика, обладающая ранее невиданной, совершенно уникальной эстетикой: уже не старые добрые пиксели, а что-то иное.

Всё изображение на экране составляется из 64 прямоугольников с изменяемым размером и цветом. Больше ничего отображать нельзя. Это вынуждает использовать доступные ресурсы очень креативно. С одной стороны, получается примитивизм, напоминающий игры для Atari 2600, с другой — современный геометризм, по чистоте и детализации композиции напоминающий модный векторный ретро-клипарт.
И если очередная виртуальная платформа сама по себе кажется уже обыденным явлением, нахождение новой визуальной ретро-эстетики в XXI веке — это очень сильное достижение.
Заключение
Однажды зародившись, движение fantasy-консолей и компьютеров не собирается сбавлять обороты, являя миру всё новые проекты. И некоторые из них действительно приносят с собой что-то новое, интересное и ценное.
Знаете, я и сам своего рода создатель виртуальной игровой консоли. У меня тоже есть проект такого рода, платформа 1-BOY, ориентированная на унификацию самодельных портативок на базе разных микроконтроллеров и монохромных экранов. Когда-нибудь я доведу эту затею до внятного результата, и тогда подробно расскажу о ней вам.
© 2026 ООО «МТ ФИНАНС»

