Найти в Дзене
Сапбот

Почему железо SNES работает быстрее чем ожидалось -- и почему это проблема

(Перевод arstechnica) В идеале, вы ожидаете что все консоли Super NES - если правильно содержатся - работают также как и любая другая такая-же консоль (в том же регионе, как минимум). Если дать им одинаковый картридж и одинаковые нажатия кнопок в нужное время, все консоли будут давать одинаковый результат в любое время. Сообщество TASBot считало что так и есть, создавая спидраны с использование утилит которые могут быть запущены с роботизированной точностью на настоящем железе. Но на SNES, команде всегда было тяжело запустить эмулированные спидраны на настоящих консолях. После долгого изучения и тестирования на множестве настоящих консолей SNES, команда TASBot теперь думает что дешёвый керамический резонатор использующееся в системном Блоке Обработки Звука (БОЗ). Пока документация Nintendo гласит что БОЗ должен запускаться на частоте 24.576 Мгц (и связанным с Цифровым Сигнальным Процессором запускающимся на частоте дискретизации около 32000гц), на практике, эта частота может варьироват
Оглавление
Сэр, вы знаете как часто работает ваша SNES?
Сэр, вы знаете как часто работает ваша SNES?

(Перевод arstechnica)

В идеале, вы ожидаете что все консоли Super NES - если правильно содержатся - работают также как и любая другая такая-же консоль (в том же регионе, как минимум). Если дать им одинаковый картридж и одинаковые нажатия кнопок в нужное время, все консоли будут давать одинаковый результат в любое время.

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

После долгого изучения и тестирования на множестве настоящих консолей SNES, команда TASBot теперь думает что дешёвый керамический резонатор использующееся в системном Блоке Обработки Звука (БОЗ). Пока документация Nintendo гласит что БОЗ должен запускаться на частоте 24.576 Мгц (и связанным с Цифровым Сигнальным Процессором запускающимся на частоте дискретизации около 32000гц), на практике, эта частота может варьироваться из-за нагрева, возраста системы, и других физических показателях.

Казуальные игроки заметят это только в музыке и звуках. Но для TASBot, Аллан «dwangoAC» Сесил говорит что эта разница в скорости стала "заметной, неизбежной" проблемой из-за получения разных результатов по кадрам в спидранах с проверкой на железе.

Не указано

Сесил тестируя свой SNES БОЗ в 2016.
Сесил тестируя свой SNES БОЗ в 2016.

Сесил говорит что он начал подозревать роль БОЗ в TASBot проблемы со SNES ещё в 2016 когда он открыл свою SNES чтобы проверить её с помощью внешнего тестера частоты. Он обнаружил что часы его БОЗ создают непредсказуемые "кадры лагов" если не получалось синхронизировать ЦПУ и БОЗ. Эти кадры лагов, в последствии, были достаточны чтобы "десинхронизировать" нажатия TASBot с результатами на эмуляторе.

По сравнению с кристаллами Кварц использующийся во многой электронике (включая ЦПУ SNES), дешёвые керамические резонаторы в SNES БОЗ "известны за свою способность деградировать за время", как уточнил Сесил. Документация для резонаторов которые используются в БОЗ тоже также подсказывает об этом.

Мануал к резонатору БОЗ показывает вариации в работе, основывающиеся на нагреве и других факторов.
Мануал к резонатору БОЗ показывает вариации в работе, основывающиеся на нагреве и других факторов.

Команда TASBot была не первой кто заметил это. Ещё в 00-ые, некоторые разработчики эмуляторов нашли что поздние SNES игры не работают на эмуляторе корректно, так-как в эмуляторе стояла скорость заявленная Nintendo (около 32000гц). Разработчики протестировали свою SNES в это время, и обратили внимание что резонатор работает на скорости 32040гц и после изменения скорости на эту, все ошибки куда-то исчезли.

Эта маленькая но важная поправка эмулятора объясняет что "оригинальные разработчики скорее всего использовали такое железо... которое скорее всего работало слишком быстро.", Сесил сказал Арс. "Это не работало потому-что у них было написано то что заявила Nintendo, а не как оно работало."

Опрос гласит...

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

После получения 143 ответов и подсчёта ответов, Сесил сказал что он был удивлён тем что температура имеет минимальное влияние на скорость ЦСП; менялось максимум 8гц на типичном среднем "холодной" и "тёплой" температуре одной и той-же консоли. Сесил даже ради интереса засунул свою консоль в холодильник чтобы проверить изменится ли скорость ЦСП и заметил что изменилось всего 32гц разницы.

Пример результата работы программы тестирования ЦСП.
Пример результата работы программы тестирования ЦСП.

Однако эти тепловые эффекты меркли по сравнению с естественными колебаниями тактовой частоты на разных консолях. Самые медленные и быстрые ЦСП в выборке Сесил показал разницу в тактовой частоте на 234 Гц, или около 0,7% от заявленных 32 000 Гц.

Эта разница настолько мала, что игроки-люди, вероятно, не заметили бы ее напрямую; по оценкам члена команды TASBot Тотал, она может составить "максимум секунду или две разницы за час геймплея". Однако опытные спидраннеры могут заметить небольшие различия, если разные настройки ЦПУ и БОЗ приводят к тому, что "идеально заученные части игры могут изменится" между запусками, сказал Сесил.

Для утилиты запуска спидранов по кадром, конечно, это создаст много головных болей. Как участник команды TASBot Undisbeliever объяснил в своём точном анализе: "На одной консоли это может занять 0.127 кадров. На другой это будет меньше но этого хватит чтобы задержать музыку на 1 кадр (влияет на это тайминг, лаги и игровой-код)."

Опрос Сесила нашёл вариацию между разными консолями больше чем разница от нагрева.
Опрос Сесила нашёл вариацию между разными консолями больше чем разница от нагрева.

Однако эти тепловые эффекты меркли по сравнению с естественными колебаниями часов на разных консолях. Сесил также отметил, что тактовые частоты ЦСП, о которых сообщалось в ходе опроса, также были немного выше, чем он ожидал, и составляли в среднем 32 076 Гц при комнатной температуре. Это значительно выше как спецификации 32 000 Гц, установленной Nintendo, так и частоты 32 040 Гц, на которой остановились разработчики эмулятора после тестирования реального оборудования в 2003 году.

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

"Мы просто куча разных умелых гиков и зануд, и это наша природа спорить что означают результаты, что в принципе нормально" - сказал Сесил. "Единственная вещь которую можно точно сказать, так это то, что средняя частота ЦСП на данный момент 32076гц, что быстрее чем стандартная спецификация. На всё остальное влияет точка зрения и количество догадок основывающихся на том, что мы имеем."

Первый шаг

Для команды TASBot, знание того, как настоящее SNES железо отличается от сухих спецификаций (и эмуляторов) это очень важный шаг к получению лучших результатов на железе. Но это знание не до конца получено из-за проблем с синхронизацией. Даже когда Сесил заменил керамический резонатор из БОЗ на более точный кварц (настроенный специально под спецификацию Nintendo), команда "не увидела ожидаемого идеала", сказал он Арсу.

Кроме нестабильности скорости часов, Сесил объяснил Арсу, что команда TASBot во время тестирования, нашла дополнительный "паттерн дрожания" который присутствует в семплинге БОЗ которое "влияет на то, как долго консоль выполняет те, или иные действия" между прохождениями. "Что влияет на неадекватную производительность даже на одинаковом железе" - сказал Сесил, что означает, что "TASBot скорее всего рассинхруется" всего через несколько минут на большинства SNES игр.

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

Долгое изучение из Rasteri подсказывает что вся вот эта разница в скорости между консолями связана с "очень недетерминированной схемой сброса" которая влияет на очередь запуска компонентов и времени для включения остальных деталей платы при включении. Это и стало причиной "бесконечных способов" для места где ЦПУ и БОЗ часы стартуют "синхронизацию" для каждого нового запуска консоли, что делает невозможным угадать где и когда появятся лаг-кадры, пишет Rasteri.

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

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

Оригинал статьи был написан Кайл Орландом (Kyle Orland)