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

StackOverflow https://stackoverflow.com/questions/471973

  •  19-08-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top