Что делает создание эмуляторов игровых приставок таким сложным

Я немного читал о людях, создающих эмулятор для Wii, и кажется, что, учитывая, что это не что иное, как усиленный GameCube или Nintendo64, так что же делает эмуляторы сборки для этих систем такими сложными?

Немного побочного примечания: аппаратное обеспечение для этих систем на удивление низкое:
Wii:
729 МГц процессор PPC
Память 88 МБ
243 МГц GPU
N64:
Процессор 93,75 МГц (64-разрядный)
4 МБ памяти

4 ответа

Решение

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

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

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

Для сравнения: архитектурный симулятор (программа, которая может запускать, например, программу PowerPC на компьютере с архитектурой x86 и собирать всевозможные статистические данные о ней) может работать в 1000-100000 раз медленнее, чем в режиме реального времени. RTL-симуляция (симуляция всех гейтов и триггеров, составляющих микросхему) современного процессора обычно может работать только между 10 Гц и несколькими сотнями Гц. Даже очень оптимизированная эмуляция, вероятно, будет в 10-100 раз медленнее, чем собственный код, что ограничивает то, что можно эмулировать убедительно сегодня (особенно с учетом интерактивности в реальном времени, подразумеваемой эмулятором игровой консоли).

Есть ряд причин, по которым эмуляция затруднена.

  1. Эмуляция системы требует намного больше энергии, чем целевая система

Иногда хост-системе требуется на порядок больше мощности (скорости), чем целевой системе. Это легко понять, если учесть, что хост-машине необходимо выполнить всю работу исходной системы, а затем еще немного поработать, чтобы управлять всей связью между компонентами, а также делиться системными ресурсами с другими приложениями. Вот почему требуется 2 ГГц процессор для точной эмуляции SNES, который работает на жалких 21 МГц.

  1. Иногда наборы инструкций и / или подсистемные работы неизвестны людям

Большинство аппаратных средств - это, по сути, черный ящик, и понимание того, как оно работает, выясняется с помощью реверс-инжиниринга, который требует много времени и терпения. Не говоря уже о том, что компании делают все возможное, чтобы сделать реверс-инжиниринг трудным, и компании стали намного лучше в эту эпоху после Playstation 1.

  1. Недостаток людей, создающих эмуляторы

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

Писать эмуляторы сложно, потому что вы должны точно / полностью / абсолютно повторять указанное аппаратное поведение, включая поведение ОС в программном обеспечении.

Написание эмуляторов для старых консолей в некоторых случаях было сложнее, чем написание эмуляторов для современных консолей. Потому что во многих современных консолях используется та или иная форма Linux или * nix, поэтому, когда аппаратное обеспечение эмулируется, программное обеспечение становится вопросом сброса биоса машины и обработки контроля.

Старые консоли делали все аппаратно, а это значит, что реверс-инжиниринг играл гораздо большую роль. Вы нуждались в очень хороших хакерах низкого уровня, чтобы помочь вам документировать, как работала старая консоль и что означало каждое магическое число.

Сегодня волшебных чисел меньше, но вместо стандартных карт GFX и процессоров. Хотя современное оборудование имеет гораздо больше инструкций и блестящих элементов для подражания. Многое из того, что делают более современные консоли, хорошо документировано, в отличие от старых консолей.

Это просто потому, что игровая программа написана для этого конкретного оборудования, поэтому она может использовать все свои аппаратные преимущества. Даже если у вас есть суперкомпьютер, он не может правильно запускать определенные программы, которые не могут взаимодействовать с оборудованием самого суперкомпьютера. Та же ситуация, если вы запускаете компьютерные игры на консолях, таких как PS3/4 или xbox One. Единственный эмулятор, который работает на 99%, это эмулятор Snes и PS1.

Другие вопросы по тегам