Все началось с приближающегося релиза проекта, над которым я работаю, под названием «починка Gran Trak 1», о первой аркадной видео-игре 1974 года. Я закончил ремонт электроники и пытался взять интервью у как можно большего числа людей, которые занимались созданием игры. Одно из интервью было с Роном Милнером. Рон интересный парень. Он был инженером и изобретателем секретного мозгового центра Atari в горах — Cyan Engineering с 1973 по 1985 год. Помимо работы с монетоприёмниками он был одним из изобретателей системы видеоигр Atari 2600 и даже помог прототипировать анимации для роботов в Chuck E Cheese. В конце нашего разговора, когда мы болтали обо всем подряд, он спросил:
«Вы когда-нибудь играли в Starship 1?»
Я сказал: «Знаю эту игру! Я бы хотел, чтобы она оказалась в моей коллекции. Помню, как играл в нее, когда был ребенком».
Рон рассказал, как он сконструировал «радиальную катушку» для ЭЛТ, которая заставляла звезды вращаться, когда игрок поворачивал штурвал. Довольно хитрый трюк. К сожалению, эта функция была вырезана, чтобы сэкономить стоимость производства игры.
Он продолжал: «Это была первая и единственная игра, которую я когда-либо программировал, и вероятно, одна из первых игр с бэкдором. Я не говорил об этом даже в Atari, по крайней мере 30 лет, но у меня был встроен некоторый код, который при выполнении определенной последовательности действий сообщал «Привет, Рон!» и давал 10 бесплатных игр.»
Я был ошеломлен. Если все было так, то получается, что это было раньше появления самого первого из известных мне пасхальных яиц в видеоиграх, то есть того, которое чаще всего упоминается как первое: «Adventure» для Atari 2600 из 1979 года. Я провёл небольшое исследование в Интернете и обнаружил, что существует ещё более ранняя пасхалка в игре «Video Whizball», которая была выпущена в 1978 году для игровой консоли Fairchild Channel F.
Но была проблема. Рон не помнил точно как получить пасхальное яйцо. Он помнил, как показывал его некоторым приятелям на выставке, когда игра впервые появилась, но это было 40 лет назад!
Я не мог просто так упустить эту пасхалку! Оставалось выяснить только две вещи: когда был выпущен «Starship 1» и как получить пасхальное яйцо.
Подтверждение даты выпуска
Рон не был уверен в дате выпуска игры. Поэтому первая остановка — Музей аркад. На этом сайте перечислены практически все аркадные игры, которые когда-либо были созданы, но поскольку информация собрана сообществом, я обнаружил, что она не всегда надежна. В нашем случае сайт показывает, что Starship 1 вышел в 1976 году. Многообещающе! Ведь это на два года раньше, чем другие соперники.
Но, пока я ковырялся, у меня стали возникать сомнения.
Руководство и флаер имели отметку о копирайте за 1977 год. Я решил проверить другие источники. Мне подсказали, что архивы журнала Cash Box были отсканированы и полностью доступны в Интернете. Поскольку этот журнал освещал аркадный бизнес, он подходил идеально. Я быстро нашел статью за 13.08.77 с первым упоминанием Starship 1.
После я сверился со старым внутренним торговым документом Atari, который использовал для проверки даты выпуска в моей статье «ремонт цветной Gotcha». Как можно видеть, в нем приводится дата выпуска в июле 1977 года:
Это согласуется с первым упоминанием в Cash Box в августе 1977го, поэтому я уверен, что июль 1977 года — реальная дата выхода игры.
Поиск кода
Итак, мы определили дату, но правда ли, что пасхальное яйцо существовало в игре? Рон упоминал, что его пасхалка показывала на экране сообщение «Привет, Рон!», а затем давала десять бесплатных игр, но за прошедшие года он забыл как её запускать.
Первым шагом было скачать ром игры из Интернета. Обычный поиск по этому шестнадцатеричному дампу позволил найти:
Итак, сообщение было! Но можем ли мы его запустить? Рон связался с Майклом Албо, знакомым инженером Atari, и мы стали работать втроём. Starship 1 был создан с использованием микропроцессора 6502, который также использовался в Atari 2600 и домашних компьютерах Atari, мы все были с ним знакомы. Рон и Майкл погрузились в схемы, а я вооружился дампом рома и листингами дизассемблированного кода. На схемах мы нашли карту памяти, из которой стало ясно, как различные кнопки панели управления взаимодействуют с программным обеспечением игры:
Вскоре стало ясно, что интересующий нас код был частью прерывания, срабатывающего при опускании монеты в игру. Майкл первым нашел код, который печатает «Привет Рон!» на экране, но как он вызывался? Рон нашёл две специфические проверки в коде и прислал мне листинг дизассемблированного кода с комментариями.
Первая оказалась проверкой того, что одновременно нажаты кнопки фазера и пуска в момент, когда опускается момента:
А после проверялось, что нажата кнопка замедления (и никаких других):
Таким образом, если мы правильно поняли код, для запуска пасхалки надо было опустить монету одновременно удерживая кнопки фазера и пуска. Потом резко отпустить их и дубасить по замедлению. Неудивительно, что никто никогда не наткнулся на эту «особенность»… Теперь нам осталось доказать, что эта последовательность реально выполнима.
Высиживание яйца
Я быстро связался с местной группой коллекционеров (Seattle Metro Arcade Collectors или SMAC), но ни у кого поблизости не оказалось этой игры. Потом я вспомнил, что несколько месяцев назад видел Starship 1 в продаже в Ванкувере, и даже думал её купить, еще до того, как узнал о пасхальном яйце. Я связался с дилером, машина все еще была доступна. Скрепя сердце, я заплатил немного завышенную цену. К сожалению, требовалось несколько недель, чтобы он восстановил её и отправил мне в Сиэтл. Тем временем я приступил к попытке воспроизвести яйцо в эмулированной версии игры под управлением MAME.
MAME — это чудо мира коллекционеров аркад. Выпущенный 20 лет назад, в 1997 году, и непрерывно развивающийся с тех пор, MAME имеет скромную цель — эмулировать все когда-либо созданные аркадные игры, вместе со многими винтажными компьютерами, игровыми системами и даже калькуляторами. За прошедшие годы этот проект с открытым исходным кодом вдохновил так много талантливых программистов, что сегодня трудно найти игру, которая не поддерживается. Не удивительно, что Starship 1 тоже нашелся.
Однако первые мои попытки запустить пасхалку окончились неудачей. Я мог сжульничать, воспользовавшись встроенным отладчиком MAME, и пропустить обе проверки, которые предшествуют сообщению «Привет, Рон!», но выполнить необходимые действия нажимая имитированные кнопки панели управления мне не удалось.
После некоторой отладки я обнаружил, что проблема заключалась в контроллере замедления. Тот, кто делал драйвер для поддержки Starship 1 в MAME, решил, что контроллер замедления должен работать как коробка передач. Неплохое решение с учётом того, как он выглядит:
Видите его с правой стороны изображения? Он выглядит как коробка передач, но, с точки зрения игры, это всего лишь еще одна кнопка, ничем не отличающаяся от кнопок фазера или пуска. Из-за того, что он работал как коробка передач («переключатель» в терминологии MAME), было практически невозможно нажать его за то небольшое количество времени, которое у меня было после опускания виртуальной монеты в эмулятор.
Я уже начал думать о создании собственного драйвера и об объёмах работы по настройке среды сборки MAME. Но прежде чем двинуться по этой длинной и ухабистой дороге, я решил попробовать то, о чем частенько забываю: поиск в Google. В частности я набрал «отключить переключатель MAME», и первой появившиеся ссылкой была небольшая статья о том, как решить абсолютно такую же проблему. В статье говорилось, что достаточно добавить фразу toggle = "no"
в конфигурационный файл:
(Знатоки MAME среди вас заметят, что я переназначил кнопку замедления на правый ALT, а кнопку пуска на правый CTRL)
После этих приготовлений, удерживая левый и правый CTRL, я нажал кнопку 5, которая отвечает за опускание монеты в MAME. Затем я сразу же отпустил все кнопки и зажал правый ALT. Сработало! Слова «Привет Рон!» появились на экране!!! Я сделал видео для доказательства (внимательно смотрите на левый верхний угол экрана):
Видели «Привет, Рон!»? Если нет, посмотрите ещё раз. Я подожду.
Обратный отсчёт
Осталось только показать, что пасхальное яйцо может быть запущено на реальной машине, но где же она? Я связался с дилером и получил ответ «Возникла проблема с монитором, не синхронизируется». Он объяснил, что после исправления, потребуется оставить автомат работающим в течение нескольких дней, чтобы убедиться, что проблема не возникнет снова. Да, конечно. Хорошо. Мне нужно, чтобы он работал.
Следующие несколько недель я с нетерпением ждал прибытия машины. Меня раздирали иррациональный страх, что кто-то другой наткнется и опубликует мое 40-летнее открытие до меня, и вполне реальный страх, что всем будет все равно.
В конце концов машина приехала.
Я осторожно развернул её и внимательно осмотрел. Все выглядело прекрасно. Я включил автомат, он загрузился без проблем. Экран выглядел великолепно. Я схватил четвертак, опустил его в один из двух монетоприёмников и, кроме звона провалившейся монеты, ничего не произошло.
Окей, без проблем. Я открыл дверцу монетоприёмника и увидел, что коробка для монет была установлена неправильно, поэтому четвертак не смог провалиться через механизм. Поправив его, я попробовал еще раз. На этот раз монета упала, но опять ничего не произошло. Снова открыв дверцу, я обнаружил, что монета выбила проволоку микропереключателя, который сообщает игре о новой жизни. При ремонте проволока была прикреплена ненадёжно. Закрепив её, я попробовал снова.
На этот раз, после включения машины звезды начали бешено крутиться, а сообщение COIN зависло в верхней части экрана. Открыв монетоприёмник в третий раз, я обнаружил, что один из его проводов поврежден.
Мда. Может я проклят?! Заменив сломанный провод, я попробовал в очередной раз.
Получилось?
Попытки продолжались часами. Было непросто. Мне пришлось извернуться левой рукой, чтобы одновременно удерживать кнопку на штурвале и кнопку пуска:
Тем временем правой рукой я опускал монету. Пока она падала, я отпускал левую руку и давил рычаг замедления правой рукой. Поймать подходящий момент было сложно. Я знал из кода, что монета должна пройти через механизм, прежде чем я отпущу левую руку, при этом остаётся совсем небольшой промежуток времени, за который следует опустить рычаг замедления. Что бы я ни делал, как ни пытался, пасхалка не запускалась. В чем проблема? Я провёл все исследования, был уверен, что знаю, что делаю, но все же получить сообщение «Привет, Рон!» не удавалось.
Важно ли, какой слот для монет использовать? Я думал, что нет, но на всякий случай, пробовал оба. Мне стало любопытно, и я перепроверил схему. От монетоприёмников поступали два совершенно разных сигнала, но проверяемый кодом пасхалки байт выглядел так:
Нам нужно шестнадцатеричное значение $76, что соответствует монетке плюс кнопка фазера плюс пуск. Чтобы удостовериться, я запустил версию MAME. Я всегда нажимал клавишу 5, когда воспроизводил пасхалку, что соответствует слоту «Монета 1». А что если нажать кнопку 6 (слот «Монета 2»)? Попытавшись, я не смог получить пасхальное яйцо. Я установил точку останова в отладчике и, конечно же, получил отличное от ожидаемых $76 значение. Похоже, что второй слот соответствует одному из битов с надписью «Резервный» (Spare) на схеме. Ладно, это нормально. Дважды перепроверив, какой из слотов первый, я использовал только его, но безрезультатно. В конце концов я сдался и пошёл спать.
Лежа в постели, я размышлял о том, что могло пойти не так. Единственное, что не давало мне покоя, это резервные биты. Если второй монетоприёмник соответствует одному из этих битов, может есть что-то связанное со вторым? Я снова достал схему и попытался понять, как биты реализованы в электронике игры. Вот, что я нашёл:
Сигналы, поступающие в контакты 4 и 12 микросхемы E6 через J6, по-видимому, идеально соответствуют битам в байте, который проверяется кодом. Если все верно, обратите внимание на линию, связанную с контактом 12 микросхемы J6. Несмотря на то, что линия не подписана, не нужно быть гением, чтобы проследовать за проводом направо и обнаружить, что он подключен к Quad DIP-переключателю и маркирован «Bonus Time». Поняв наверняка, что это значит, я заснул с уверенностью, что завтра будет лучший день.
Лучший день
Проснувшись рано утром, я отвел детей в школу и начал работать. Я вытащил плату и обнаружил DIP-переключатель:
Видите переключатель помеченный символами «B.T.», то есть «Bonus Time»? Он нажат на сторону, отмеченную знаком «плюс». Это определяет включен он или закрыт. Судя по схеме, закрытый переключатель соединяется с землей, а это значит, что он генерирует нулевой бит. Такое поведение абсолютно противоположно тому, что нам нужно для запуска пасхалки. Эта находка придала мне уверенности. Я щелкнул выключателем и вернул все обратно. Последняя попытка. Если не получится, у меня больше не было идей.
Bonus time был выключен. Я нажал кнопки фазера и пуска левой рукой, а правая держала четвертак возле монетоприёмника. Я бы скрестил пальцы, но обе руки были заняты. Я опустил монету и выждал мгновение, пока она пробивалась через механизм, потом я быстро отпустил левую руку и хлопнул по рычагу замедления правой. На экране появилось «Привет, Рон!». С первой попытки.
Я настроил камеру для записи и попробовал ещё раз. Все прошло как по маслу. Вот получившееся видео:
Аллилуйя.
Первая ли она?
Остается последний вопрос: это первое пасхальное яйцо? Как и в большинстве случаев, ответ зависит от точки зрения. Википедия определяет пасхальное яйцо как «умышленную шутку, скрытое сообщение или секретную особенность интерактивного произведения». Далее в статье приводятся примеры из программного обеспечения вплоть до текстового редактора TECO из 1960х. Его нам явно не переплюнуть.
Итак, перефразируем: это первое пасхальное яйцо в видео играх? Июль 1977го явно раньше выхода Adventure и Video Whizzball в 1978м, в наших руках сильный претендент на победу. Проводя дополнительные исследования, я наткнулся на статью, в которой рассказывается о редком картридже Democart для Fairchild Channel F, предположительно выпущенном только для использования в магазинах. Если удерживать три кнопки в конце демки, появится имя программиста. Как можно видеть, она имеет отметку о копирайте за 1977 год:
Было ли она сделана до июля 1977 или после? Я не знаю. Соответствует ли неинтерактивная демка для магазина критериям пасхалки в видеоиграх? Решайте сами
Возможно стоит сузить круг ещё раз и сказать, что в Starship 1 появилось первое пасхальное яйцо в аркадной видеоигре. В этом случае остаётся только один соперник, но упоминания о нем датируются вплоть до июня 1975 года. В игре Anti-Aircraft II от Atari требуется сбивать пролетающие самолеты, однако можно сделать так, чтобы они превратились в НЛО. Правда, для этого требуется внести небольшие изменения в печатную плату игры. После изменения экран выглядит следующим образом:
Считается ли пасхальным яйцом набор графики, который можно отобразить только внеся изменения в железе? Примерно в это время Atari вела бизнес, используя два разных имени (другое название — Kee Games) и выпустила несколько разных версий большинства своих игр под каждым из своих имён. Подозреваю, что НЛО предназначались для версии Anti-Aircraft от Kee Games, и не являлись чем-то скрытым в ROM ее создателями.
По-моему, Starship 1 — на данный момент первая известная аркадная игра, которая явно соответствует определению пасхального яйца, а молодой и умный программист, который его встроил, Рон Милнер, заслуживает нашего признания и уважения. Тем не менее, до Starship 1 было выпущено более ста аркадных видеоигр. Возможно, где-то глубоко внутри одной из них лежит еще одно более древнее пасхальное яйцо, которое только и ждет того, чтобы его обнаружили. Надеюсь, что это так!
Автор: AndreyMI