Unplayable, или как разработчики с эмуляцией боролись

Недавно вышедший рекламный буклет от Denuvo про вред эмуляции вызвал очередное негодование среди игроков. Но что если разработчики ещё до Denuvo боролись с эмуляторами используя их несовершенство? Давайте взглянем на пару примеров.

Cars 2 (2011) и Disney Infinity (2013) для Wii

МакКуин готов<br />
МакКуин готов

Что же такого натворили разработчики игры чтобы эмуль Dolphin падал случайным образом? В 2017 проблема была решена: выяснилось что на низшем уровне памяти MEM1 хранятся важные данные для игры, во время геймплея игра пытается записать туда ненужные данные, по сути мусор. Сначала он копится в L1/L2 кэше ЦП, но только достаточное количество чтобы ЦП не отправил весь этот кэш с мусором в ту самую область MEM1. В определённый момент игра сообщает консоли что ей кэш не нужен, он очищается и всё начинается заново. Вот только эмулятор не мог в эмуляцию кэша ЦП, весь мусор шёл сразу напрямую в MEM1, игра не выдерживала такой херни и падала вместе с эмулем.

Для исправления в Dolphin добавили хак который обходит это. Добавить эмулирование кэша ЦП было невозможно, наверное даже сейчас, по заверениям разработчиков это замедлило бы производительность эмулятора в 10 раз и более. Возможно, когда-нибудь его завезут.

Как считают разработчики Dolphin, программисты Avalanche Software (ага, создатели Hogwarts Legacy) намеренно добавили такую процедуру метко попав в слабое место эмулятора.

Classic NES Series для GBA

С тебя 20$, чувачок.<br />
С тебя 20$, чувачок.

GBA, пятая портативка от Nintendo, или же "карманная SNES", неудивительно, на неё было выпущено 48 портов с SNES. Но в 2004 Nintendo пошла дальше и запустила линейку Classic NES Series (NES Classics для Европы) на 12 игр, Япония же получила Famicom Mini на 30 игр. Преимущественно они были из первой волны, большинство которых мы встречали на 999999 in 1.

Полная коллекция<br />
Полная коллекция

Из-за разрешения экрана GBA пришлось немного ужать вертикаль

Перейдём же к эмуляции.

GBA, как оказалось, вещь непростая, точнее её игры. Как сообщает endrift, разработчик mGBA, в среднестатистической игре для GBA много багов и ошибок, и в консоли есть несколько механизмов которые следят за этим и предотвращают сбои. Поэтому эмулятору надо быть совместимым даже на уровне ошибок/багов (bug compatible) чтобы всё работало правильно. Но в 2004 Nintendo пошла вразнос лишь бы вы не смогли запустить игры NES портированные на GBA на эмуляторе GBA. Чё?

Если взять любой ROM из этой серии и загрузить в старый эмулятор, например VBA, то увидите это.

Попался
Попался

Что же происходит? Оооо, много херни происходит. Но я приведу наиболее понятные примеры.

Код из видяхи

Всё довольно просто, архитектура GBA позволяет загрузить код игры в видеопамять (VRAM) и запустить его оттуда. Но кто же знал, когда делали эмуляторы о таком даже не задумывались, с другими играми проблем не было, они даже не пытались в такое. А игра из Classic проверяет и просто не запускается если ей не удаётся выполнить код из VRAM.

Эй, тебе SRAM, а может Flash, или EEPROM?

У картриджей GBA есть три способа сохранения. Выглядит процесс следующим образом, игра запускается и для инициализации запрашивает запись/чтение одного из трёх вариантов, эмулятор это видит подсовывает нужный вариант, игра говорит "ок, принято" и начинает работу. Но только не Classic, у каждой игры установлен EEPROM, вот только при запуске просит SRAM, и если она его получает, то понимает что чёт подозрительно и снова выводит на экран GAME PAK ERROR.

SRAM, EEPROM, Flash<br />
SRAM, EEPROM, Flash

Хотелось бы добавить ещё примеров но дальше всё очень сложно.
Здесь можете прочитать полную версию со всеми приколами. Зеркальное отражение памяти на котором ломаются эмуляторы не зная куда обращаться, жонглирование регистрами, работа пайплайнов и вывод звука в один PCM канал. Разработчики эмуляторов считают Classic NES Series наиболее ранним примером борьбы с эмуляцией.

Как разраб mGBA разбирал этот бардак.
Как разраб mGBA разбирал этот бардак.

После всего этого может возникнуть вопрос. Зачем? Хорошо работающие эмуляторы NES начали появляться ещё во второй половине девяностых, в чём был смысл, причём таких костылей больше нигде не встречали, только у серии Classic NES. Ответа нет. Но ведь сделали же! Может это была всего лишь остроумная шутка от программистов Nintendo которые знали все подвохи GBA и эмуляции?

3939
4 комментария

После всего этого может возникнуть вопрос. Зачем? Ответа нет.

Ответ на самом деле есть, он уже десятилетия известен:

20

Это давно известная штука. Когда программист пишет низкоорувневый код учитывающий всю архетектуру чипа, и где что там можно "подрезать", "сэкономить и т.д. это фишка знания устройствв чипа, памяти и т д.
А те кто пишет эмулятор подходят к задаячи влоб и просто конвертируют ассемблерный код с одного устройства на другое, буз учета "лафхаков" и древних знаний предков.

Этта проблемма эмуляции есть почти у всего по что делалось до конца 80х

7

Официальной Эмуляцией насколько я помню занимается европейское отделение Нинтендо. У них либо все плохо либо прикол на приколе

1

имхо если так и делать то только в мега экзах нинки (кому нужны тачки на 2 на эмуле) но это бы это просто отложило бы нормальную игру на релизе и умные люди бы быстро сделали спец хаки для игр

1