Ухищрения аппаратной обратной совместимости в игровых приставках

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

Но вычислительные машины ценны не своими характеристиками, а набором программного обеспечения, которое они могут запускать. Именно поэтому во многих ситуациях так важно обеспечивать обратную совместимость с оборудованием предыдущего поколения — нравится это разработчику или нет. Но иногда обратная совместимость принимает причудливые формы. Сложно подобрать правильное слово: то ли это «костыли», то ли вполне обоснованные решения.
Современные персональные компьютеры имеют неплохую обратную совместимость. В процессорах архитектуры x86–64 всё ещё есть поддержка 32-битного режима и 32-битных программ. При желании на купленный сегодня компьютер можно установить 32-битную операционную систему 14-летней давности или даже старее. Прикладные программы из девяностых могут работать без дополнительных пакетов эмуляции прямо в современной операционке. А с эмуляцией можно запускать практически любой софт.

На игровых приставках всё немного хуже. Выход консоли нового поколения означает, что совместимость со старыми играми будет потеряна полностью. Игра просто не запустится, если об этом не позаботиться. В результате получится устройство со скудной коллекцией игр при запуске. Его нет смысла покупать, поскольку игр для него нет. А делать игры разработчики не захотят, поскольку приставку никто не покупает.

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


В 1989 году на прилавках магазинов появилась компактная игровая система Game Boy. Это была игровая консоль, которая обладала следующими характеристиками: чёрно-белый экран с 4 градациями серого без подсветки, 8-битный процессор Sharp LR35902 (вариант Zilog Z80) частоты 4,194 МГц, 8 КБ ОЗУ и 8 КБ видеопамяти, 4-канальный звук. Всё это запитывалось от четырёх «пальчиковых» батареек AA. Позднее выходили улучшенные версии этой консоли. Игры распространялись на специальных картриджах.

В начале девяностых подоспела замена игровой приставке Nintendo Entertainment System (NES). Новая консоль называлась Super Nintendo Entertainment System (SNES). 8-битная игровая приставка получила замену в виде 16-битной. Продукт Nintendo четвёртого поколения игровых приставок можно характеризовать как значительно улучшенную версию консоли третьего поколения: похожие контроллеры, игры на картриджах, но куда более сильное «железо». В SNES стоял 16-битный процессор Ricoh 5A22, работающий на частоте чуть выше 21 МГц, 128 КБ ОЗУ, 64 КБ видеопамяти, 64 КБ на 8-канальный звук.

Это были два совсем разных продукта: портативная консоль и полноценная игровая приставка к телевизору. Покупка одного из устройств не означала возможность запуска игр для другого. Но появился переходник. В 1994 году был выпущен Super Game Boy. Это был адаптер, позволявший играть в игры Game Boy на SNES. Он выглядел как обычный картридж для SNES, в который нужно было вставить картридж с игрой для Game Boy или камеру Game Boy Camera. Работали и игры с обратной совместимостью для Game Boy Color, но только в монохромном режиме.

Адаптер обладал своими преимуществами: давалась возможность играть с иллюзией цвета, выбирая палитру в меню. Иногда специальные границы экрана создавали ощущение использования игрового автомата. В некоторых играх можно было задавать свои границы экрана.

0c62f4bd0ca5400eb5a623d60c217735.png

SNES мощнее оригинального Game Boy. Можно подумать, что этот адаптер является просто соединением между начинкой домашней консоли и контактными дорожками картриджа с игрой для портативной консоли. На самом деле этот картридж содержал почти весь Game Boy — не было лишь экрана. Внутри картриджа-адаптера стояла вся необходимая начинка. SNES использовалась как прослойка между картриджем и телевизором.

effbd9977dbf4913aaa39b50cc0bee8d.JPG
Внутренности картриджа. Видны процессор и чипы памяти.

Эмуляция происходила не без проблем: на плате не было кварцевого генератора. Чтобы получить частоту работы процессора Game Boy, частота работы процессора SNES делилась на пять. В итоге получалась игра на ≈2,4% быстрее: 4,295 МГц таковой частоты вместо 4,194.

Этот приём не является уделом подобных адаптеров. Многие игровые приставки иногда содержат процессор, видеоускоритель и/или другие части консоли предыдущего поколения, чтобы обеспечивать практически полную обратную совместимость. Но просто так «балластом» их не добавляют: в обычных режимах работы старые чипы выполняют вспомогательные роли.


Оригинальная PlayStation вышла в 1994 году. Это была консоль с 32-битным процессором MIPS R3000A частотой работы 33,8688 МГц, 2 МБ ОЗУ и 1 МБ видеопамяти. По современным меркам характеристики системы скромные. Близкий родственник процессора PlayStation установлен в «Новых горизонтах», станции, недавно пролетевшей мимо Плутона и теперь отсылающей снимки. Часто этот факт упоминается в том духе, что оборудование космических зондов может сильно запаздывать относительно прогресса потребительской электроники. Читателю нужно покачать головой, задумываясь о слабости начинки «Новых горизонтов». Тем не менее этот чип есть во всех PlayStation 2. А официальная продажа этой консоли закончилось всего три года назад — в январе 2013.

fbb7d8c83a6c434aa07dbf609b67d5dc.jpg

В оригинальной «толстушке» PS2 в дополнение к мощной для своего времени начинке стоит аудиочип из PlayStation, 2 МБ ОЗУ и процессор PS1, который выступает в роли контроллера ввода-вывода. В режиме эмуляции игр консоли предыдущего поколения используется этот старый MIPS-чип. Он лишь снижает частоту работы до 33.8688 МГц (родная для PS1 частота) с обычных 37,5. Задействуются уже упомянутые специальные 2 МБ ОЗУ. Похожесть архитектуры графического ускорителя PS2 — его можно описать как восемь блоков видеочипа PS1 — позволяет запускать на нём старые игры.

Slimline-версия тоже содержит старый чип. В зависимости от ревизии материнской платы могут присутствовать или отсутствовать 2 МБ ОЗУ PS1 и даже следы IDE. Но старый процессор здесь выполняет исключительно свою основную роль контроллера ввода-вывода периферии. Здесь для запуска игр PS1 производится программная эмуляция на процессоре PS2. Он эмулирует расчёты процессора PS1, Geometry Transformation Engine, декодера Motion Decoder и аудио SPU. Рост частоты процессора с 294,912 МГц до 299 помогал этому, пусть и сказывался на теплоотделении системы, и без того осложнённого слабой вентиляцией уменьшенной модели.

Исключением отдельных частей можно сэкономить на стоимости консоли. Удаление в тонкой версии PS2 аудиочипа SPU из PS1, переход на софтверную эмуляцию и другие различия сказались на обратной совместимости. Легко отследить по спискам несовместимых игр, как выросло их число с переходом на программную эмуляцию. Аудиосистема PlayStation 2 была представлена двумя чипами SPU1 и SPU2, второй из которых был чипом из PS1. Некоторые игры PS2 полагались на него, но его убрали. В итоге сложилась интересная ситуация: slimline-ревизия PlayStation 2 не может играть некоторые из своих родных игр.

2006 год, компания Sony делает важное обновление своей консоли. Делать это приходится, торопясь: в конце 2005 года уже поступила в продажу приставка Xbox 360, основной конкурент. Поэтому для обеспечения обратной совместимости приходится прибегать к уже известному трюку. Со временем тоже произошёл переход к программной эмуляции. Но первые модели PS3 включали оригинальный процессор и графический ускоритель PlayStation 2. Для этого их объединили в один чип. Так было можно запускать практически любые диски PS2, поскольку игра буквально запускалась на оригинальном оборудовании. Эмуляция PlayStation 1 всегда производилась программно.

1c1a8128c40543b1af1b766b275b7c03.jpg
Материнская плата одной из оригинальных PlayStation 3. В левой части заметна микросхема, в которой собраны видеочип и процессор PlayStation 2.

Обратная совместимость с PS2 лишь ухудшалась с выходом новых ревизий. Процессор Emotion Engine оригинальной PS2 убрали, заменив программной эмуляцией. В результате 80-гигабайтная версия утеряла совместимость с многими играми. Более поздние версии PlayStation 3 вообще не могут проигрывать диски PS2. Осталась лишь возможность скачивать игры из онлайн-магазина PlayStation Store и запускать их в режиме программной эмуляции на основном процессоре PlayStation 3.

Вышедшая в 2013 году PlayStation 4 при запуске не имела аппаратной совместимости ни с одной из предыдущих консолей. Сейчас в онлайне официально можно купить какие-то игры приставок предыдущих поколений, но сами диски не заработают. Более того, привод PS4 даже не умеет играть компакт-диски — только DVD и Blu-ray.


В 2001 году вышла портативная игровая консоль Game Boy Advance. Цветной экран разрешением 240×160 пикселей выводил графику игр, которые запускались на 32-битном процессоре ARM7TDMI частотой 16,8 МГц. Центром оригинального Game Boy был Sharp LR35902, основанный на Zilog Z80. Он работал на частоте 4 (Game Boy) или 8 МГц (Game Boy Color). Чтобы на консоли можно было поиграть в картридж Game Boy или Game Boy Color, в Advance был установлен сопроцессор Z80. Его основной задачей была генерация звука. Такая конфигурация осталась и в Game Boy Advance SP, но в Game Boy Micro обратная совместимость исчезла. Z80 и некоторые другие элементы старых систем остались в Micro, поскольку они были нужны для работы.

В том же 2001 году Nintendo выпустила в продажу игровую приставку GameCube. Как и SNES, игровая приставка изначально не имела обратной совместимости ни с одним из предыдущих продуктов. Как и в случае SNES, возможность играть в игры портативных игровых консолей Game Boy была достигнута с помощью адаптера. И этот адаптер опять же был не совсем адаптером, а полноценным набором необходимого «железа».

7b8159b8790c4dcdad7b28288085d569.png

GameCube имеет параллельный порт, к которому подключается адаптер Game Boy Player. Последний выглядел как толстенькая подставка, на которую ставился GameCube. В эту подставку вставлялись картриджи для Game Boy, Game Boy Color и Game Boy Advance. Внутри содержалась начинка Game Boy и Game Boy Advance. Если вставить адаптер в GameCube, то получится настоящее чудовище Франкенштейна. В игровом устройстве будут находиться процессоры сразу трёх разных архитектур: PowerPC (родной процессор GameCube), ARM-чип из Game Boy Advance и вариант Zilog Z80 оригинального Game Boy.

В работе достигалась хорошая совместимость не только с играми, но и с большим числом устройств для Game Boy, хотя некоторые из них отключались намеренно. Для Game Boy Advance выходили видеокартриджи Game Boy Advance Video. Как следует из названия, на них был записан видеоконтент. В Game Boy Player они не работали, чтобы пользователь не смог просто так записать контент с вывода GameCube на какой-нибудь видеопроигрыватель.

Последователем GameCube стала консоль Wii. Её начинку можно характеризовать как значительно улучшенный GameCube. Поэтому для эмуляции игровой приставки предыдущего поколения происходят ряд действий внутри устройства. Частота работы процессора снижается, отключаются некоторые устройства.

Соответствие настолько высокое, что кое-где в спортивных прохождениях GameCube принимаются демки, записанные на Wii в режиме эмуляции. Но сказывается отсутствие некоторых портов и устройств. Упомянутый выше Game Boy Player несовместим из-за отсутствия нужного порта. Некоторые игры всё равно несовместимы. В более поздних версиях Wii возможность запускать игры GameCube исчезла. Последователь Wii — игровая приставка Wii U — не умеет играть диски GameCube, она принимает только свои и диски Wii. Для обеспечения работы игр с последних в новую консоль пришлось включить старый видеочип Wii.

В вышедшей в 2004 году портативной игровой консоли Nintendo DS было установлено два процессора архитектуры ARM. Один помощнее выполнял задачи обсчёта игр и их графики, а второй послабее помогал выводу звука и работе Wi-Fi. Здесь работала уже описанная выше схема: последний мог брать на себя роль оригинального процессора Game Boy Advance. Вариант Zilog Z80 отсутствовал, и именно поэтому не было возможности проигрывать картриджи Game Boy и Game Boy Color. В Nintendo DSi обратная совместимость исчезла.


За исключением Wii U, cовременные консоли восьмого поколения — это средненькие скучные компьютеры с x86-процессорами и видеоускорителями AMD. Аппаратной совместимости с предыдущими приставками нет. Ушли в прошлое дополнительные процессоры для обсчёта 3D-графики на картриджах с игрой, чипы нескольких совершенно несовместимых друг с другом архитектур и другие смелые, дерзкие технические решения. Возможно, всё это происходит из-за того, что сегодня игры всё чаще качают, а не покупают в оффлайне.

Xbox One программно научили запускать некоторые игры Xbox 360, PlayStation 4 тоже пользуется софтверной эмуляцией. Раздел Virtual Console цифрового магазина Nintendo позволяет доить ностальгические воспоминания владельцев Wii U. Но программу не потрогаешь руками, и число портированных игр не всегда удовлетворяет. При всей своей скрытой красоте программная эмуляция не так наглядна и увлекательна, как аппаратная. Конечно, запихнуть половину консоли предыдущего поколения в новый продукт — это дорого. Но так можно обеспечить высокий уровень обратной совместимости, когда работают почти все мелкие хаки и ухищрения.

© Geektimes