Как прошить sega saturn

Обновлено: 07.07.2024

RB_SaturnPCM 05/04/29 Конвертер Wav -> PCM и обратно. PCM это звуковой формат Sega Saturn. Коммандная строка. Saturn Country Converter GUI Version Эта небольшая утилита, поможет вам переконвертировать ISO-образ Sega Saturn из одного региона в другой. Утилита для работы с образами дисков Sega Saturn, генерирование cue, запись на диск. Sega Cue Maker v1.1.00 Утилита позволяющая создавать *.cue из ISO+Mp3(WAV) для корректой сборки образа. Работает с Sega CD и Saturn - структура дисков этих двух платформ не отличается. SRP v3.0 Gold Edition Утилита для изменения региона образа диска/игры Sega Saturn. Эта утилита позволяет вытаскивать изображения из игр для Saturn.

Модули

TEST.S — ничего особенного, задаёт несколько меток.

MAIN.C — верхний уровень программы. Содержит инициализацию оборудования, настройку уровней, код прохождения уровней и различные другие мелкие элементы, которые на самом деле стоило бы поместить в более подходящие модули. В нём довольно много мусора, потому что в этот модуль проще всего добавлять что-то новое для быстрого тестирования. Содержит код загрузки с CD или файлового сервера на PC. Содержит флаг для включения и отключения цветных полос TIMING.

GFXLIB.C — различные процедуры для доступа к оборудованию и выполнения различных графических функций. Почти все они написаны с нуля Дэном и часто очень неэффективны. Если вы часто используете процедуру отсюда, то неплохо было бы взглянуть, что она делает и написать более быструю версию в своём коде.

Тем не менее, все функции работают и обеспечивают превосходный фреймворк для черновой реализации и тестирования. Поблагодарим Дэна, без него это было бы невозможно.

SMP_PAD.C — различные процедуры для считывания с джойстика Saturn, очень зависимые от оборудования.

GLOBALS.C — все глобальные переменные и несколько общих функций. Использование глобальных переменных — приемлемая практика программирования. Однако по различным причинам реализация глобальных переменных в SH2 довольно медленная, поэтому со временем я возможно преобразую часть в глобальные структуры, если понадобится. Содержит переменные, описывающие состояние MAN и PATH.

MAN.C — обрабатывает движение и отображение человека (Prince Lightstar, Talyn, Guardian или Grimskull — персонажа, которым управляет игрок). Пока это в основном логика движения и коллизий с дорогой. Кроме того, он обеспечивает соответствующую анимацию для каждого действия. Тут ещё нужно сделать много работы.

OB.C — обрабатывает движение и отображение объектов в игре, в особенности объектов врагов, например, воинов-скелетов и маленьких инопланетян. Здесь программируется основная часть геймплея: вражеский ИИ, основные движения и срабатывание триггеров. Структура данных готова ещё не полностью, в частности, не совсем проработаны проблемы с коллизиями и анимацией. Предстоит ещё куча работы.

DATA.S — различные таблицы, в настоящее время в основном анимации основных персонажей игрока.

LAYER.C — скроллинг фонов с параллаксом. Обновляет состоящие из символов фоны и скроллит битовые карты. Также выполняет скроллинг линий (эффект волн) в слое тумана. Пока таблицы для слоёв карт символов хранятся без сжатия. Их нужно сжать в формат RLE, который я использовал для версии на Genesis. Эта задача может перейти к Кену, если мы получим систему разработки под Saturn раньше, чем для Sony.

PAL.C — палитра. Можно выбирать из 2048 цветов. Любой пиксель на экране может быть одного из этих цветов. Я логичным образом разделил палитру на восемь палитр по 256 цветов. В PAL.C содержится код для их инициализации, подготовки и код для их циклической смены. Также им понадобится затемнение и более сложная циклическая смена, а также вспышки яркости и т.д.

BUL.C — примитивная система для обработки снарядов (бросок меча, удар рукой, выстреливаемые из рук ракеты и т.д.) как отдельных объектов. По-прежнему требуется довольно много работы для более сложного использования снарядов. Также нужен правильный код коллизий и анимаций.

PAD.C — простой модуль для запоминания состояния джойстика в более удобном формате. Запоминает, была ли недавно нажата кнопка, и нажата ли она сейчас.

START.C — одна строка, сообщающая, какой уровень будет первым, для простоты его смены в командном файле.

PANEL.C — простые процедуры для вывода полоски силы.

PATH.C — чудовищные процедуры для отрисовки дороги, а также обработки коллизий с дорогой.

MATH.C — простые синус, косинус и поворот точки на угол.

[Обновление] Вот пример кода из MAN.C. Всё жёстко прописано в коде и ссылается на глобальную структуру данных Man. Куча прописанных в коде чисел.


OB.C разросся до чудовищного файла из 9000 строк, в которые включены все паттерны поведений отдельных объектов в игре. Также там есть огромное количество прописанных в коде чисел, например таких:


Неприятное зрелище. Такой стиль кода пришёл из времён, когда игры были очень маленькими и наработал я его при работе с 68K.

DRM-защиту игровой приставки Sega Saturn взломали спустя 20 лет


Опытные геймеры наверняка помнят Sega Saturn — 32-битную игровую приставку от компании Sega. Она начала продаваться 22 ноября 1994 года, на две недели раньше главного конкурента — первой модели Sony Playstation. Это была настоящая бомба. В первый же день фанаты выкупили 170 000 экземпляров новой «Сеги». В 1995 году приставка появилась в продаже в Европе и США, где её тоже ждал успех: на неё портировали Quake, C&C, Tomb Raider, Duke Nukem 3D и другие игры.

На момент выхода архитектура Sega Saturn была гораздо более продвинутой, чем у любой другой игровой приставки. Saturn была очень мощной системой для своего времени: два центральных RISC-процессора (Hitachi SuperH-2 7604), два видеопроцессора (собственной разработки), 32-битный звук (звуковой DSP-процессор Yamaha FH1), CD-привод двойной скорости.

Впрочем, довольно быстро Sega Saturn уступила позиции Sony Playstation.

Забавно, что архитектура Saturn была во многом более продвинутой, чем у конкурента. В отличие от Playstation, оперирующей треугольниками в качестве базовых геометрических примитивов, Saturn отрисовывал четырёхугольники. При правильном использовании, такой рендеринг давал меньше искажений текстур, чем в играх Playstation. Аппаратная часть, нацеленная на четырёхугольники, и на 50% больший объём видеопамяти также давали Saturn преимущество в 2D-играх. Но в итоге более «продвинутая» архитектура Saturn стала препятствием для портирования многих игр, потому что основные инструменты разработчиков основывались на треугольниках, как и многоплатформенные игры. Поэтому победила Playstation.



Материнская плата Sega Saturn

На сегодняшний день обе эти приставки — и Sega Saturn, и первую Sony Playstation — можно найти разве что на полках коллекционеров. Но самое интересное, что DRM-защиту игр для Saturn так и не удалось взломать. Проблема в то, что трудно было создать нормальное окружение для обратной разработки. К примеру, в старых игровых приставках применялись картриджи с флэш-памятью, а в более поздних консолях есть возможность перепрошить непосредственно флэш-память на плате. В случае с Sega Saturn проблема в том, что практически невозможно найти древнюю приставку с рабочим приводом для компакт-дисков. Операционная система зашита в миросхему контроллера привода CD на материнской плате, а защита от копирования выполнена в форме физических отметок по краю компакт-дисков — сделать копии дисков с подобной защитой оказалось очень трудно.



Защита от копирования компакт-дисков

Как же осуществить обратную разработку и взломать диски в такой сверх-закрытой системе?

Выход нашёлся. Энтузиаст jhl (Dr Abrasive) из хакерского сообщества Assembler Games сделал практически невероятную вещь — эмулятор оптического привода Sega Saturn! На эту работу у него ушло около двух лет.



Dr Abrasive в своей лаборатории, где он за два года сумел разработать эмулятор оптического привода Sega Saturn. На столе лежит разобранная консоль

По словам jhl, японская игровая приставка очень замысловато устроена. Он называет это «овер-инжиниринг», говоря о таком количестве процессоров, среди них два центральных, два графических, один звуковой и так далее.

Приводом компакт-дисков управляет отдельный контроллер: 32-битный RISC-процессор SH-1. Хакеру пришлось немало потрудиться, чтобы разобраться с микросхемой этого контроллера.



Микросхема в контроллере привода компакт-дисков

В игровой приставке есть внутренний порт расширения, куда вставляется карта декодирования MPEG, чтобы просматривать компакт-диски с видео.




Внутренний порт расширения Saturn

Этот порт расширения подключается к контроллеру компакт-дисков и пропускает данные через него, с использованием шифрования.

Для начала, хакер придумал способ, как добраться до прошивки контроллера. Он изъял плату с контроллером из игровой приставки и подсоединил его к перепрошитому картриджу Game Boy. В этом картридже ROM была перепрошита таким образом, что считывать ROM из контроллера через NVRAM и далее по USB. Таким образом, jhl сумел сделать дамп памяти ROM из контроллера.



Плата с контроллером из приставки Saturn подключена к перепрошитому картриджу Game Boy

64 килобайта памяти этого процессора плотно упакованы инструкциями, в которых пришлось долго разбираться. Dr Abrasive говорит, что изучение этого кода открывает очень много информации об истории разработки Sega Saturn, но в целом он был очень впечатлён открывшейся картиной.


Изучив содержимое ROM, удалось понять, каким образом код для SH-1 загружается из карты-декодера MPEG. Dr Abrasive говорит, что он нашёл своеобразный «бэкдор» во встроенной операционной системе, который позволяет загружать диски без защиты от копирования.


Так получилось сделать USB-интерфейс, чтобы загрузить также содержимое микросхемы YGR022 (через разъём карты MPEG). Это был первый и самый важный шаг к созданию полноценного эмулятора оптического привода Saturn.

В результате этой работы Dr. Abrasive сумел сделать адаптер, через который данные загружаются в приставку в обход штатного CD-привода, то есть через внутренний порт расширения! То есть игры в приставку теперь можно загружать даже с обычной USB-флэшки, не нужны оригинальные компакт-диски.

Титанический объём работы, который проделал Dr. Abrasive за два года, не может не вызвать уважения. Обо всём процессе реверс-инжиниринга автор подробно рассказывает в любительском документальном фильме. Это действительно великолепный фильм.

Код для взлома Saturn и эмулятор привода автор в ближайшее время выложит в открытый доступ.

Во-первых, эмулятор нужен энтузиастам, которые занимаются копированием дисков для Saturn и портированием игр под эту приставку. Во-вторых, владельцы игровых приставок теперь могут снова использовать их даже в том случае, если штатный CD-привод вышел из строя, а ведь это самая распространённая поломка Saturn. Кроме того, наличие эмулятора позволит сделать копии многочисленных дисков для Saturn и сохранить их для истории.

Данные

Игра разбита на несколько уровней, во многих уровнях используются одинаковые данные, но в основном они для каждого уровня свои. Все данные для каждого уровня собираются в два огромных файла .GOV и .GOB. (в случае шахты это MINE.GOV и MINE.GOB). Файл GOV содержит короткий заголовок, а затем идут все данные, которые должны находиться в видеопамяти. Файл .GOB содержит все данные, которые должны находиться в ОЗУ.

Уровень состоит из части показанных ниже файлов данных.

.SSQ — файл секвенсора спрайтов
.SBM — файл битовой карты, используемый для битовых фонов
.MAP — обе карты для заполняемых символами фонов.
.TIL — тайлсеты и палитры для заполняемых символами фонов.
.PTH — данные точек дороги и триггеров.
.TEX — текстуры для дороги.

Файлы .SSQ и .SBM созданы моим становящимся всё более неудобным секвенсором «SEQ». Файлы .MAP, .TIL, .PTH и .TEX созданы становящимся всё более потрясающим редактором карт «TULE», написанного Дэном.

Эти файлы при помощи ассемблера ASMSH собираются в соответствующие файлы .GOV и .GOB. Чтобы посмотреть, как это делается, см. файлы LEVEL.S и LEVEL1.S. В файл .GOV также включается часть данных конкретного уровня.

Компилирование и компоновка

Общая сборка готовой программы управляется одним makefile: MAKEFILE.MAK. Он содержит зависимости и целевые объекты для всего проекта, в том числе компиляцию файлов .GOB и .GOV.

Отдельные модули исходного кода C (файлы .C) компилируются программой CCSH в объектные модули SH2 (.OBJ). Она сначала вызывает препроцессор GNU C под названием CPPSH (находится в C:\GNUSH2\BIN), затем вызывает CC1SH для его выходных данных, чтобы создать ассемблерный код SH2, и, наконец, вызывает ASSH (в C:\PSYQ) для сборки его в готовый объектный формат.

Мы не используем C++, потому что мне сказали, что он создаёт огромные объектные файлы. Однако я не работал с ним, можете поэкспериментировать.

Несколько файлов на языке ассемблера SH2 (с расширением .S) просто собираются при помощи ASMSH напрямую в файлы .OBJ (это не то же самое, что ASSH, а более сложный макроассемблер). В настоящее время они используются только для встраивания данных, и не содержат машинно-зависимого кода.

ОЗУ Saturn, в которое можно загружать код, разделено на два блока по 1МБ. Один начинается по адресу $06000000, а другой — по $00200000. Блок по адресу $00200000 используется исключительно для хранения графики главного персонажа. Код программы записывается по адресу $06010000 (первые $10000 байт используются для системного пространства, стека и тому подобного.)

Код позиционно-зависимый и компилируется так, чтобы выполняться по этому конкретному адресу ($06010000) и никак иначе.

Файлы .OBJ компонуются вместе при помощи программы PSYLINK для создания файла MAIN.CPE — исполняемой программы с небольшим заголовком, который можно скачать в Saturn командой RUN. PSYLINK использует файл TEST.LNK для указания того, какие файлы .OBJ нужно включать и куда их помещать.

Оборудование для разработки

Наша целевая платформа — Sega Saturn, имеющая два Risc-микропроцессора SH2 и один 68000. Пока мы используем только основной процессор Master SH2, вспомогательный slave SH2 будет использоваться, когда мы разберёмся, как это сделать. 68000 применяется для управления звуковым чипом, нам не пришлось писать для него код, потому что он будет использовать предоставленную Sega звуковую библиотеку.

Программа почти целиком написана на чистом C. Мы используем компилятор GNU SH2 для получения выходного ассемблера SH2. В коде есть несколько модулей SH2, в которых в основном находятся исключительно данные. Пока я не написал ничего значимого на SH2.

В качестве системы разработки мы пользуемся PsyQ. Это не стандартная система разработки Sega, однако все, кто с ней работал, считают её лучшей. Альтернативой ей является SNASM, созданная принадлежащей Sega студии Cross Products. Основная часть поставляемых Sega примеров кода должна работать в системе разработки SNASM, но легко конвертируется под PsyQ.

Система PsyQ состоит из платы интерфейса SCSI, которая устанавливается в PC, картриджа, вставляемого в Saturn и соединяющего их кабеля. Исходники компилируются на PC и скачиватся на Saturn, где и запускается программа. Код можно отлаживать с PC.


Система разработки PsyQ

Связь контролируется резидентной программой (PSYBIOS), обрабатывающей коммуникации между машинами. Это позволяет консоли Saturn загружать файлы с PC почти так же, как она загружала бы их с CD. Мы используем эту функцию для загрузки файлов каждого уровня.

У меня в комнате есть пара больших и громких ящиков, а ещё два PC. Меньший из двух ящиков — это E7000PC, являющийся встроенным эмулятором SH2. Он помогает разобраться, где вылетает программа, если отладчик PsyQ её не остановил. Также он полезен для отслеживания записи в память, но пока я почти не пользовался этой функцией.

Второй из громких ящиков — это нечто под названием «Small Box» (первый «Large Box» был размерами примерно с небольшой холодильник). По сути это Saturn с дополнительными интерфейсами для E7000 и эмулятора CD. На передней панели у него есть переключатели ID стран и переключатель между PAL и NTSC.

Внутри второго компьютера находится эмулятор CD — большая плата, благодаря которой жёсткий диск компьютера притворяется CD-приводом. В нём можно собрать образ CD и эмулировать его в реальном времени, чтобы посмотреть, как будет выглядеть игра, когда доберётся до настоящего CD. Эмулятор более-менее работает, хотя у него есть некоторые проблемы, над решением которых мы сейчас работаем вместе с Sega.

image

Dev kit самой компании Sega

Состояние игры

В представленном ниже документе вкратце описывается состояние кода Skeleton Warriors для Sega Saturn, а также упоминаются некоторые из множества аспектов, которые нужно было ещё сделать.

Документ нужен был, чтобы ускорить Дэну, Кену и Джеймсу знакомство с уже готовым кодом, объяснить им назначение каждого модуля и взаимодействие между ними. Также он позволил мне оценить печальное состояние этого кода, и, надеюсь, заставил меня взяться за ум.

Также я немного рассказываю о встраивании данных (файлы .GOV и .GOB) в программу, и о том, что мы будем делать в будущем.

Как в 1995 году писали игры для Sega Saturn

Это документ, написанный мной в 1995 году, когда я работал над первой игрой студии Neversoft: Skeleton Warriors. Это была первая игра, в которой я не использовал язык ассемблера 68K.

Фото сделано примерно в то время. Комплект разработчика (dev kit) («Small Box» и ICE) стоит справа от меня.


Сердце разработчика: девкиты Sega Saturn

До пятого поколения аппаратное обеспечение консолей было примерно равным по производительности и отличалось крайне незначительно. Чего нельзя сказать о 32/64-битных машинах, кои стали наводнять рынок с начала 1993 года. Именно тогда беззаботные контры Sega vs Nintendo обратились в борьбу «все против всех». Пятое поколение породило лавинообразные изменения в отрасли, когда каждый производитель старался сделать свою систему мощнее, чем у конкурентов. Так всего за 3 года сегмент расслоился на откровенных лидеров во главе с Sony и аутсайдеров во главе с Atari. 32-битная планка была задрана непомерно высоко для дебютантов поколения, погребя мечты тех немногих геймеров, кто поверил в силу Atari Jaguar, 3DO и 32X.

К счастью, здоровая конкуренция высветлила лучших из лучших. И именно о них сейчас и пойдёт речь, а точнее о девкитах к этим системам.


Так компания, некогда называемая Service Games, но знакомая всем именно как Sega, не просто поспевала за трендами, но вела в этом направлении активнейшую работу. Залогом успеха послужил аркадный задел Sega, сформированный такими машинами, как Sega System 1, Sega System 2, Sega System 16, в конечном счёте приведший к созданию передового для 1988 года консольного железа Sega Genesis. В том же году была выпущена Sega System 24, а два года спустя — Sega System 32, имевшая в своём чреве 32-битный RISC-процессор. Sega настолько плотно занималась аппаратным обеспечением, что вскоре появились аркадные кабинеты, работающие с полноценной 3D-полигональной графикой. Sega Model 1, а затем и пришедшая ей на смену Sega Model 2 не просто были успешными, они были революционными машинами для 1990 и 1993 годов соответственно.

Надо ли говорить, архитектура Sega Saturn в достатке позаимствовала функции, как минимум, четырёх аркадных систем Sega. Многопроцессорная схема Saturn включала в себя 2х CPU Hitachi SH-2, 3х DSP-математических сопроцессора, а также 2х видео процессора (VDP1 и VDP2), работавших в паре и отвечавших за отрисовку переднего плана и заднего фона, полигонов и спрайтов. Как следствие, четырёхугольный полигональный движок был разработан на основе движка Sega Model 1, а отдельный графический процессор для 2D фонов был основан на GPU Sega System 24.


Но не только компоновкой Sega Saturn была мудрёна для сторонних разработчиков. Отсутствие операционной системы и сложная среда программирования, требующая знания ассемблера, заметно осложняли поддержку консоли на старте продаж. Единственным на то время инструментом разработки был Sega Saturn Programming Box от японской компании Sophia Systems, но даже он не поддерживал язык С. Эта девелоперская станция, походившая на компьютер промышленного исполнения, не только имела внушительный вид, но и астрономическую цену $ 30 тыс. Не удивительно, что последнее не позволило системе распространиться должным образом среди мелких студий и независимых разработчиков.


Что интересно, некоторые комплекты Sega Saturn Programming Box имели всего один CPU SH-2, притом, что экстерьер был одинаков. Все порты и переключатели располагались на передней панели: два разъёма для геймпадов, SCSI II, AV-out, VCD-порт для подключения эмулятора CD, Serial, а также кнопки включения, сброса и тумблеры включения/отключения сторонних устройств и режимов. Система была «всеядной» и запускала ПО не только с CD-R, но и любого региона (PAL, NTSC).

Помимо инструмента для программирования Sophia Systems выпустила Sega Saturn Graphics Box, графическую станцию для гейм-дизайнеров и Sega Saturn Sound Box для звукорежиссёров и композиторов. Внешнее сходство роднило обе системы с родительской, объединяя их в триединый комплект разработчика ранних игр 1994-1995 годов.


В середине 1995 года «Sega Sophia» была вытеснена более дешёвым устройством Saturn CardDev, которое могло работать как с Sega Saturn Programming Box, так и напрямую с отладочной консолью Sega Saturn. Saturn CardDev выпускался в двух ревизиях: ревизия А (силами Sega of America) и ревизия B (силами материнской компании Cross products). Ввиду проблем с блоком питания ревизия А была крайне ненадёжной, распространение получила именно ревизия B. К компьютеру девкит подключался через SCSI-интерфейс (через интегрируемую в ПК карту SCSI Card Kit), а к консоли — через разъём для картриджа. Средой разработки стало программное обеспечение SNASM2, работавшее напрямую с процессорами SH-2.


Кстати, о SNASM2. Компания Cross products разработала целое семейство девкитов не только для Sega, но и для Philips CD-I и Atari Jaguar. Машина SNASM2 Saturn Development System очень напоминала архитектуру SNASM2 32X Development System и была весьма удобным инструментом разработки. SNASM2 включал в себя ассемблер для процессоров SH-2 и 60k, мощный мультипроцессорный линкер и GNU-компилятор, позволявший работать непосредственно с ассемблером, С и их комбинацией. А за счёт сплит-скрина отладка кода проходила в реальном времени на одном мониторе.


Продвинутый интерфейс станции осуществлял подключение к отладочной консоли Saturn CD Switch через NMI-шлейф, позволявший программисту обращаться к каждому процессору консоли. В остальном же SNASM2 Saturn Development System дублировала свои же наработки по Saturn CardDev. Отмечу, что данные девкиты по достоинству были оценены Sega. Поэтому та, не раздумывая, купила компанию Cross products, дабы в дальнейшем девелоперские машины и отладочные консоли выпускались именно под японским брендом. Между прочим, Saturn CD Switch, как и Sega Saturn Programming Box, была «region free» и могла запускать игры для отладки не только с CD-R, но и с внешнего накопителя. И этим накопителем служил так называемый Mirage Universal CD emulator, разработанный специально для эмуляции CD-ROM в реальном времени. Ёмкость устройства составляла 1 Гб и позволяла хранить на нём до двух игр.


Но, пожалуй, самым экстравагантным инструментом отладки была машина Sega Saturn Address checker от IS Electronics. Существовало несколько ревизий устройства от горизонтально ориентированной машины почти метровой длины до стандартной отладочной Sega Saturn.


Причём консольный вариант был похож на Saturn CD Switch за тем исключением, что на её правой передней части находилось 32 светодиода, переключатель сброса светодиодов и тумблер переключения регионов. 32 индикатора располагались на небольшой плате, где два чипа Lattice ispLSI 1032 выполняли в реальном времени проверку адресов памяти. Индикаторы подсвечивались только во время обращения машины к запрещённым областям ОЗУ, тем самым сигнализируя о достигнутых ошибках. Первоначальная («длинная») ревизия Sega Saturn Address checker вместо серии светодиодов имела лишь порт SCSI, а процессоры SH-2 были установлены на съемных платах – совсем как в компоновке Sega Saturn Programming Box.


Отдельно стоит упомянуть отладочный микрокомпьютер Е7000 производства Hitachi, работавший в паре с Sega Saturn Programming Box или Sega Saturn Address checker. Но после успеха CardDev и SNASM2 безумно дорогой Е7000 так и не снискал популярности в стане независимых разработчиков.


Замечу, что Cross products не единственные, кто смог использовать железо Sega Saturn по максимуму. Psygnosis в сотрудничестве с SN Systems создали уникальную систему PSY-Q Saturn, которой облегчили непростую жизнь разработчикам игр для Sega Saturn. Используя один и тот же подход к разработке, Psygnosis достигли оптимума для программирования на С как под нужды Sony PlayStation, так и для Sega Saturn.


Отличительной особенностью этой системы была низкая себестоимость, так как она представляла собой розничную Sega Saturn, девелоперский картридж PSY-Q и SCSI Adapter Card для соединения рабочей станции с консолью. Но, к сожалению, лишь три проекта из обширной библиотеки игр были разработаны с использованием данного инструмента программирования: Bubble Bobble also featuring Rainbow Islands, Batman Forever — The Arcade Game и Battle Stations.

Читайте также: