Что делает создание эмуляторов игровых приставок таким трудным [закрыто]
-
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 МГц. Р>
- Иногда наборы инструкций и / или работа подсистемы неизвестны людям Ол>
- Отсутствие людей, создающих эмуляторы Ол>
Большинство аппаратных средств - это, по сути, черный ящик, и понимание того, как оно работает, выясняется с помощью реверс-инжиниринга, который требует много времени и терпения. Не говоря уже о том, что компании стараются изо всех сил сделать реверс-инжиниринг трудным, и компании стали намного лучше в эту эпоху после Playstation 1. Р>
Эмуляция - это довольно нишевая область, требующая большого количества знаний во многих областях Честно говоря, не так много людей, способных подражать многим современным системам. Эмуляция этих систем требует много времени и усилий, и только самые преданные могут это сделать. Р>
Писать эмуляторы сложно, потому что вы должны точно / полностью / абсолютно повторять указанное аппаратное поведение, включая поведение ОС в программном обеспечении.
Написание эмуляторов для старых консолей в некоторых случаях было сложнее, чем написание эмуляторов для современных консолей. Потому что во многих современных консолях используется та или иная форма Linux или * nix, поэтому, когда аппаратное обеспечение эмулируется, программное обеспечение становится вопросом сброса биоса машины и обработки контроля.
Старые консоли делали все аппаратно, а это значит, что реверс-инжиниринг играл гораздо большую роль. Вы нуждались в очень хороших хакерах низкого уровня, чтобы помочь вам документировать, как работала старая консоль и что означало каждое магическое число.
Сегодня волшебных чисел меньше, но вместо стандартных карт GFX и процессоров. Хотя современное оборудование имеет гораздо больше инструкций и блестящих элементов для подражания. Многое из того, что делают более современные консоли, хорошо документировано, в отличие от старых консолей.
Это просто потому, что игровая программа написана для этого конкретного оборудования, поэтому она может использовать все свои аппаратные преимущества. Даже если у вас есть суперкомпьютер, он не может правильно запускать определенные программы, которые не могут взаимодействовать с оборудованием самого суперкомпьютера. Та же ситуация, если вы запускаете игры для ПК на консолях, таких как PS3 / 4 или xbox One. Единственный эмулятор, который работает на 99%, это эмулятор Snes и PS1.