Как Dolphin наконец-то взломал код на Star Wars: Clone Wars, теперь эмулирует каждый заголовок GameCube

Этот сайт может зарабатывать партнерские комиссии по ссылкам на этой странице. Условия эксплуатации ,

Эмуляция консолей на современных ПК - сложный бизнес. Существуют значительные различия на низком уровне между архитектурой консоли и ПК. В то время как некоторые из этих проблем могут быть грубо вызваны необработанными вычислительными ресурсами, другие сильно сопротивляются такому решению. Dolphin, популярный эмулятор для игр GameCube и Wii, недавно выпустил серьезное обновление для своего собственного исходного кода, которое, наконец, позволяет эмулировать последнее название игры: Star Wars: The Clone Wars.

Команда опубликовал пост в блоге подробно о том, как он выполнил эту задачу. Это интересный пример того, как решение оригинального разработчика использовать некоторые редко используемые возможности GameCube не позволяло им эмулировать игру более десяти лет. В этом случае проблема сводится к блоку управления памятью GC или MMU.

MMU внутри GameCube предоставляет играм адреса виртуальной памяти, которые он внутренне сопоставляет с местами физической памяти. MMU способен обеспечить либо преобразование адреса блока (BAT), которое перераспределяет большой кусок памяти, либо с более мелко детализированными таблицами страниц для небольших объемов памяти. GameCube в первую очередь использовал MMU, потому что он позволял процессору кэшировать доступ к памяти, а также потому, что в системе всего 24 МБ ОЗУ, несмотря на то, что у него было 4 ГБ. Диаграмма ниже показывает, как работают MMU, в общих чертах.

Диаграмма ниже показывает, как работают MMU, в общих чертах

Изображение из Википедии

Dolphin уже был способен эмулировать MMU GameCube несколькими способами. В большинстве игр используются сопоставления BAT по умолчанию, предоставляемые Nintendo. Поддержка этого режима жестко запрограммирована в Dolphin. Эмулируемая консоль не «знает», что ее запросы данных выполняются из совсем другой подсистемы памяти, чем та, которую GameCube поставляется с В этом режиме MMU фактически не выполняет трансляцию адресов - он знает, где GameCube ожидает найти память, основываясь на переданном ему адресе, и извлекает соответствующий блок информации из оперативной памяти ПК.

Вторая форма эмуляция что Dolphin поддерживает предсказуемо неверно объем памяти Запросы. GameCube включал 16 МБ оперативной памяти, которая была сопоставлена ​​со звуковым DSP, но многие игры используют этот пул для дополнительной памяти. При условии, что они делают это предсказуемым образом, Dolphin может захватить эти адреса (даже если они недействительны) и передать игре запрашиваемые данные - при условии, что он всегда запрашивает информацию с одного и того же набора недействительных адресов памяти.

Но что происходит, когда адреса являются недействительными и непредсказуемыми? В прошлом это убивало игровую производительность. На самом деле эмуляция MMU занимает тысячи циклов ЦП, и темпы повышения тактовой частоты ЦП практически остановились. Процессор GameCube мог бы работать только на частоте 485 МГц, но наши современные чипы в 10 раз быстрее с точки зрения необработанной тактовой частоты - и есть функции, которые просто не могут эффективно эмулироваться, если это стоит тысяч циклов процессора.

Пользовательские BAT гораздо сложнее подражать.

Из блога команды Dolphin:

Обработка проверок памяти (memchecks) медленнее, потому что вредит оптимизации быстродействия «fastmem». Fastmem отображает адресное пространство GameCube / Wii в память хоста, а затем отмечает всю эмулированную недопустимую память как выделенную для хост-ПК. Это позволяет Dolphin использовать обработчик исключений центрального процессора, чтобы выполнять грязную работу при отлове исключений. Когда он перехватывает исключение, Dolphin вынужден переключаться с fastmem на slowmem, чтобы обработать адрес, что может стать огромной дилеммой производительности.

Memchecks - это ядро ​​того, что делает MMU Enable, и это основная причина, по которой названия с поддержкой MMU были настолько медленными в Dolphin. Есть случаи, когда требуется обратиться к интерпретатору, он не работает с fastmem, и они даже медленнее, чем обычный доступ к памяти на консоли!

Недавний вклад кода в Fiora увеличил производительность одного MMU-фильма (Star Wars: Rogue Squadron) в 10 раз, а в большинстве других - в среднем на 100%, но этого оказалось недостаточно для решения проблемы Star Wars: The Clone Wars. Этот конкретный заголовок фактически определил свою собственную BAT - единственную известную игру, которая сделала это. Поскольку Dolphin в основном полагался на идею жестко запрограммированного BAT, не было никакого способа решить этот крайний случай без переписывания всей подсистемы эмулятора памяти и, возможно, не без ухудшения производительности во многих других играх в процессе.

Один из авторов Dolphin, magumagu, очевидно, придумал способ переписать Dolphin для поддержки пользовательского отображения BAT The Clone Wars без ущерба для производительности в любом другом названии. По словам команды Dolphin, предыдущие попытки поддержать игру имели побочный эффект снижения производительности в других играх до 30%. Несмотря на то, что команда получила 8-15% хитов в других играх MMU, она считает, что сможет восстановить эту потерю с помощью дальнейших настроек и улучшений. Другие игры на самом деле должны увидеть улучшенную производительность и меньшее количество ошибок в результате переписывания, поэтому выигрыш должен стоить того в долгосрочной перспективе.

Благодаря эмпирическим усилиям Microsoft эмулировать Xbox 360 на Xbox One , Даже Sony имеет опустил носок в воду с эмуляцией PS2 на PlayStation 4. Наступающая консоль Nintendo NX, как сообщается, не будет обратно-совместимым, что также может стимулировать интерес к эмуляции этой платформы.