Главная » Хабрахабр » [Перевод] Можем ли мы возродить «Утиную охоту»?

[Перевод] Можем ли мы возродить «Утиную охоту»?

Бесконечное стремление заново пережить опыт молодости ведёт нас путями, которые мы давно уже позабыли. Большая часть людей радуется, когда им удаётся вернуть к жизни старые вещи. Кого-то обратно в старшие классы, к вечерним автопрогулкам с выкрученной на полную катушку громкостью радиоприёмника возвращает рёв двигателя Ford Windsor. А по дороге мы иногда сталкиваемся с забытыми воспоминаниями, вызывающими другие забытые воспоминания, позволяющие нам заново переживать счастливые моменты, о которых мы не думали годами, или даже десятилетиями. Кто может забыть первую встречу со скрепкой-помощником из Microsoft Office, элегантную музыку из Final Fantasy, или вверх-вверх-вниз-вниз-влево-вправо-влево-вправо-b-a-выбрать-начать? Для тех, кто родился в 80-х и 90-х подобные воспоминания могут вызывать видеоигры.

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

Внутренности NES Zapper

Она позволяет нам двигаться вперёд и делать сегодня то, что было невозможным вчера. Технология – штука прекрасная. Один из них – это игровая приставка NES, Nintendo Entertainment System, и её контроллер в виде пистолета, Zapper. Однако в некоторых случаях эта парадигма неверна. Инженеры, программисты и эксперты по аудио компании Nintendo сумели породить некоторые из лучших видеоигр, когда-либо созданных. В своё время NES стала самой популярной игровой приставкой, и не зря. Вряд ли кто может забыть, как весело было играть в «Утиную охоту» (Duck Hunt). К сожалению, в некоторые из этих игр нельзя играть на вашем любимом эмуляторе на Raspberry Pi, поскольку Zapper несовместим с современными цифровыми мониторами. Но связанная с нею ностальгия погребена из-за нерешённых технологических особенностей. Эта игра шла в комплекте со всеми системами NES, поэтому мы все играли в неё.

Так что сначала мы разберёмся, как работает Zapper, и почему он не работает с цифровыми дисплеями. Скажу вам, как хакер хакеру – этого больше терпеть нельзя. А потом мы подумаем, как его исправить.

Проблема

Пистолет Zapper – это просто фотоэлемент с переключателем. Когда спусковой крючок (переключатель) нажимается, NES проводит определённые манипуляции с экраном, чтобы понять, куда направлен пистолет. Какие именно – обсудим чуть позже. Но сначала нам необходимо понять, что они работают только на аналоговых телевизорах с ЭЛТ. Если вы подключите ваш эмулятор к такому телевизору, у вас не будет проблем. Проблема в том, что телевизоров с ЭЛТ уже ни у кого нет. У всех стоят цифровые телевизоры с плоским экраном и мониторы. При подключении к такому монитору игра не будет работать. Нам нужно понять, почему это так.

Развенчиваем мифы

По поводу того, откуда NES знает, куда направлен Zapper, есть много путаницы, даже среди людей, немного разбирающихся в электронике. Некоторые из них считают, и продолжают распространять этот миф, что NES считывает строчки развёртки с ЭЛТ. ЭЛТ рисует строки развёртки с верха до низа экрана через определённые промежутки времени. Сравнив время начала прорисовки и время, когда Zapper видит линию, NES может узнать, куда указывает Zapper. А поскольку современный монитор показывает все строки одновременно, подсчитать, куда именно указывает Zapper, нельзя никак. Возможно, что какие-то более старые пистолеты на фотоэлементах так и работали, но NES работает не так. Совсем.

Как работает NES Zapper

Система довольно хитроумная. При нажатии спускового крючка NES рисует сплошной чёрный кадр на ТВ. NES рисует 60 кадров в секунду, поэтому один кадр находится на экране примерно 0,0166, или 17 мс. В следующем кадре на месте утки появляется белый прямоугольник, и приставка опрашивает состояние фотоэлемента в пистолете. Выход фотодиода сильно отличается в зависимости от того, направлен ли он на чёрный экран или на белый прямоугольник. И всё это происходит за время демонстрации двух кадров, 34 мс. Человек едва это замечает. Следующий кадр снова рисует игровое поле, и вам засчитывается попадание или промах. Гениально!

Инженеры NES справляются с этой проблемой, просто повторяя весь процесс. «Но погодите, как эта система работает, когда на экране есть две цели?» Хороший вопрос. Если на экране есть ещё одна цель, то третий кадр будет с прямоугольником вокруг второй цели. Первый кадр будет чёрный, за ним будет кадр с белым прямоугольником на месте одной цели и опрос фотоэлемента. Вы можете подстрелить только одну, и эта техника даёт NES знать, какую именно. Все три кадра проходят примерно за полсекунды, поэтому у вас не будет возможности подстрелить сразу двух уток.

Инженеры NES избавились от такого обмана, опрашивая состояние фотоэлемента ещё во время появления первого, чёрного кадра. «Если NES просто опрашивает состояние фотоэлемента, могу я просто направить пистолет на яркий свет и каждый раз записывать себе попадание?» Ещё один хороший вопрос. Есть слухи о том, что в самых ранних версиях игры эту ошибку не исправляли, но пока что никто такого бага продемонстрировать не смог. Если фотоэлемент видит что-то, отличное от чёрного экрана, приставка засчитывает вам промах.

Другой взгляд на проблему

Теперь, зная, как работает Zapper, мы можем перейти к решению проблем с цифровым монитором. Если игра просто замеряет разницу между чёрным и белым, то пистолет должен прекрасно работать и на цифровых мониторах. Но он, очевидно, не работает. Некоторые утверждают, что фотоэлемент чувствителен к инфракрасному излучению ЭЛТ, а цифровой монитор не испускает инфракрасных лучей. Но посмотрите на этот ролик: Zapper прекрасно работает!

[В ролике показан модифицированный Zapper / прим. перев.]

Мы можем заключить, что наша проблема связана со временем. Мы знаем, что строки развёртки тут ни при чём, и что Zapper может различать контраст между белым и чёрным на цифровом экране. В NES жёстко зашита необходимость проверять наличие белого прямоугольника после 16 мс. Судя по всему, ЭЛТ может выводить изображение гораздо быстрее цифрового коллеги. Если ваш цифровой экране не в состоянии обрабатывать выход NES с достаточной скоростью, то приставка будет искать белый прямоугольник в то время, когда на экране ещё видна игра.

Цифровому монитору необходимо масштабировать каждый кадр до рабочего разрешения. Выходное разрешение NES — 256 x 240 точек. Этот процесс порождает задержку, которая может доходить до 70 мс, серьёзно превышая наш показатель в 16 мс.

Как это исправить

Это будет нелегко. Если цифровой монитор по своей природе слишком медленный, то единственным решением будет замедление NES.

Вариант 1: уменьшение тактовой частоты

Мы все слышали про разгон процессора через увеличение тактовой частоты. А что насчёт торможения? Можем ли мы замедлить время в процессоре NES, не разогнав его до ощутимой доли от скорости света? При этом необходимо, чтобы игра шла с нормальной скоростью, но при нажатии спускового крючка переключалась на замедленную работу и, по сути, увеличивала время задержки. Помните, что NES выводит чёрный экран на 16 мс, а затем рисует белый прямоугольник. Замедляя процессор, мы можем увеличить эту задержку и дать цифровому монитору время на реакцию.

Вариант 2: редактирование ROM

ROM можно редактировать только в шестнадцатеричном редакторе. Что, если бы мы изучили эмулятор и нашли, в каком месте задаётся величина задержки после нажатия спускового крючка? Мы могли бы просто сделать её больше, и надеяться, что ничего не сломали.

Вариант 3: ваш вариант

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

Делитесь вашими решениями в комментариях. Схема работы не такая уж и сложная – наверняка мы все вместе сможем придумать, как сделать так, чтобы Zapper перестал стрелять холостыми в нашем цифровом мире.

Оригинал статьи


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Ugears: скакуны, парусники и прочие королевские развлечения

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

[Перевод] Руководство по JavaScript, часть 3: переменные, типы данных, выражения, объекты

Сегодня, в третьей части перевода руководства по JavaScript, мы поговорим о разных способах объявления переменных, о типах данных, о выражениях и об особенностях работы с объектами. → Часть 1: первая программа, особенности языка, стандарты→ Часть 2: стиль кода и структура ...