Введение


Осенью 1990 года родители подарили мне набор Nintendo Entertainment System Action Set: серую угловатую консоль (Control Deck), два контроллера, ярко-оранжевый световой пистолет "Zapper" и картридж, на котором были Super Mario Bros. и Duck Hunt.


Консоль NES с одним контроллером. Фото Эвана Эмоса.

Control Deck подключалась к стоявшему в чулане большому ЭЛТ-телевизору RF-переключателем — по сути, это была антенна, подававшая видеосигнал из консоли на телевизор на канале 3. Это была моя первая видеоигровая консоль, и я её обожал.

В том году я проводил в чулане много времени. Поначалу и отец тоже — он проходил Super Mario Bros., выяснял местоположение секретных Warp Zones и пытался проскользнуть через опасных Hammer Bro (прим. пер.: кидающихся молотками черепах). Однажды ему удалось победить Баузера («дракона», как он его называл) и спасти принцессу, после чего он практически перестал играть в игры на NES.

Однако меня консоль очаровала. Я получил на почту рекламное письмо с предложением бесплатного картриджа Dragon Warrior за подписку на журнал Nintendo Power magazine: подписаться на журнал за 20 долларов, чтобы получить игру за 50? О чём тут вообще размышлять!


Коробка версии Dragon Warrior, продававшейся в США.

Dragon Warrior познакомил меня с миром RPG так же, как Super Mario Bros. познакомил меня с миром платформеров. Я тратил много времени и на другие игры: моими любимыми были Ducktales, Final Fantasy, Contra и Mega Man III.

В конечном итоге, NES определила мою карьеру во взрослой жизни. В детстве я знал, что видеоигры — это нечто особенное, и что когда вырасту, хочу создавать их. У меня было (ошибочное) представление о том, что карьера в создании видеоигр означает карьеру в прохождении видеоигр. Сразу после того, как моя семья приобрела компьютер, я начал изучать C++, потому что с ним работали «настоящие» программисты. (Я и не подозревал, что программисты игр для NES не пользуются C++, но в свою защиту могу сказать, что был молод и наивен.) Однако я так и не создал ни одной реальной игры. Программирование игр всегда казалось сложнее того, к чему я был готов; кроме того, не было недостатка в созданных другими людьми отличных играх, в которые можно было бы поиграть.

Но моя мечта осталась со мной, и спустя многие годы работы профессиональным веб-разработчиком я начал изучать разработку для NES. (Сильный толчок в нужном направлении я получил от превосходной книги Нейтана Элтиса I Am Error.)

I Am Error, front cover

I Am Error.

Сложно было понять, с чего начинать. В Интернете было полно ресурсов, но все они были в той или иной степени неполными ил неточными. Я начал с серии "Nerdy Nights" пользователя bunnyboy на форумах NintendoAge. Потом я нашёл на GitHub шаблон NROM пользователя tepples и начал изучать ассемблер ca65. Спустя месяцы борьбы с операциями записи в PPU, таблицами атрибутов и регистрами скроллинга в голове начало формироваться понимание. Я рад, что у меня был опыт борьбы с самостоятельным изучением этих концепций, но было бы здорово, чтобы существовало какое-то руководство, начинающее с нуля и обучающее всем основам разработки для NES.

Надеюсь, что книга, которую вы сейчас читаете, станет для вас таким руководством.

1. Краткая история NES


Если говорить в целом, NES («Nintendo Entertainment System») — это домашняя видеоигровая консоль, предназначенная для подключения к ЭЛТ-телевизору. Для хранения игр используются заменяемые картриджи («Game Pak»), потому что в системе отсутствуют постоянные накопители. Ввод выполняется через два порта для контроллеров на передней панели системы; стандартный контроллер NES состоит из четырёхконечной крестовины управления и четырёх дополнительных кнопок: Start, Select, A и B.


Консоль NES с одним контроллером. Фото Эвана Эмоса.

В США NES была выпущена в 1985 году; никто точно не знает, когда, но большинство источников сходится на октябре. Nintendo продавала NES в США до 1995 года, ещё долго после выпуска в 1991 году её преемницы, Super NES. За эти десять лет для NES было выпущено почти 700 официально лицензированных игр, созданных и самой Nintendo, и множеством сторонних разработчиков, например, Konami и Capcom. Это была самая продаваемая консоль своего поколения [David Sheff. Game over: how Nintendo zapped an American industry, captured your dollars, and enslaved your children. 1st edition. Random House New York, 1993. ISBN: 0679404694.], а «играть в Nintendo» стало синонимом видеоигр в США аналогично тому, как и «играть в Atari» в предыдущем десятилетии.

NES не вышла полностью сформировавшейся из лаборатории исследований и разработок Nintendo. К тому, чтобы эта система стала мощным представителем мира домашних видеоигр, привела уникальная серия неудач и инноваций. Поэтому прежде чем мы приступим к работе с NES, важно сделать шаг назад и поговорить о том, откуда взялась эта система. Историческая справка о происхождении NES имеет важные предпосылки к архитектуре и возможностям системы, что в конечном итоге повлияло на игры, которые можно (и нельзя) создавать для системы.

Американский эксперимент


Nintendo была основана в 1889 году в японском Киото как производитель игральных карт для ханафуда. [Sept. 23, 1889: Success is in the Cards for Nintendo.]

Когда в 1949 году бизнесом занялся Хироси Ямаути, правнук основателя компании Фусадзиро Ямаути, он начал расширять линейку продукции компании, диверсифицируясь в такие сферы, как услуги такси, «отели любви» и игрушки Ultra Hand. [As Nintendo Turns 125, 6 Things You May Not Know About This Gaming Giant.]

Nintendo не могла достичь прорывного успеха, пока не начала создавать электронные игрушки. В 1977 году компания приступила к производству серии видеоигровых консолей Color TV-Game (клонов «Pong»), а в 1980 году выпустила серию портативных видеоигр «Game & Watch». [High Score!: The Illustrated History of Electronic Games.]

К тому моменту Nintendo выпустила несколько аркадных автоматов, самым успешным из которых оказался Radar Scope 1979 года


Рекламная листовка Radar Scope.


Игровой процесс Radar Scope

Эта космическая стрелялка стала второй по популярности аркадной игрой в Японии после Pac-Man Namco. [The Ultimate History of Video Games: From Pong to Pokemon — the Story Behind the Craze That Touched Our Lives and Changed the World.]

К 1978 году Namco уже обрела огромный успех в американских залах аркадных автоматов, а Taito продала Midway лицензию на невероятно популярную Space Invaders для продажи на рынке США. Nintendo знала, что американский рынок предоставляет огромные возможности, но ей придётся конкурировать и со своими японскими соперниками, и с американскими аркадными компаниями наподобие Atari.

Президент Nintendo Хироси Ямаути решил, что Radar Scope станет отличным поводом для создания американского филиала Nintendo. В 1980 году он приказал своему зятю Минору Аракаве арендовать офис и склад для новой «Nintendo of America» и отправил ему из Японии 3000 машин Radar Scope.

К сожалению, из-за почти годового ожидания начала доставки машин Radar, плюс двух недель транспортировки с западного побережья США на склад Аракавы в Нью-Джерси Radar Scope выглядел устаревшим, поэтому американские покупатели не особо им заинтересовались. Отдел продаж Аракавы сумел продать лишь около тысячи машин Radar Scope, а остальные постепенно покрывались пылью на складе.

Для Nintendo это было серьёзной проблемой. В начале 1980-х годов две тысячи аркадных автоматов имели довольно приличную стоимость. Для сравнения: в тот же период времени Atari предоставляла заинтересованным клиентам «Смету затрат на материалы проекта» с подробным описанием деталей, необходимых для создания аркадного автомата, и их стоимости. Типичная аркадная игра Atari наподобие Missile Command содержала в себе деталей на 871 доллар, а продавалась игровым залам или барам за 1995 долларов.

[Подробнее о бизнесе аркадных автоматов начала 80-х можно прочитать в статье Tales from the Arcade Factory Floors.]

В долларах 2018 года это эквивалентно стоимости деталей 2695 долларов и цене автомата 6170 долларов. Таким образом, две тысячи нераспроданных аркадных автоматов означали невозместимые затраты в пять миллионов долларов (2018 года).

У Хироси Ямаути появилась идея: что если Nintendo спроектирует новую игру, более привлекательную для американских покупателей, в которой будет использована большая часть компонентов Radar Scope? Ямаути выделил на этот проект 100 тысяч долларов (1980 года), и поручил придумать новую игру молодому дизайнеру, который ранее работал над корпусом серии игр Color TV-Game. Этим дизайнером был Сигэру Миямото, впоследствии прославившийся как создатель Марио, Линка и многих других самых известных персонажей игр Nintendo.


Сигэру Миямото на E3 2013.

Миямото создал игру про бесстрашного плотника, подругу которого похитила огромная обезьяна. Источниками его вдохновения были комикс про Попая и классический фильм «Кинг-Конг». Так появилась Donkey Kong.


Donkey Kong.

Чтобы сделать игру более «американской», Nintendo of America назвала героя Марио (в честь владельца склада Марио Сегале), а его подругу — Паулиной. Donkey Kong была невероятно популярной и в США, и в Японии, сделав Nintendo лидером аркадного рынка.

Рынок домашних игр


Успех проекта по превращению Radar Scope в Donkey Kong привёл к появлению ещё одной отличной идеи: домашней системы, которая подобно автомату Radar Scope будет способна запускать на одном оборудовании разное игровое ПО. До этого момента видеоигровые системы были узкоспециализированными машинами, зачастую предназначенными для запуска всего одной игры (иногда с разными вариациями). Например, разные модели Color TV-Game самой Nintendo могли запускать от шести до пятнадцати вариантов Pong, но больше ничего другого. Наиболее универсальной системой той эпохи была Magnavox Odyssey, на которой можно было играть более чем в дюжину игр при помощи вставки «игровых карт», поставлявшихся с системой. Но карты не содержали игровых данных, а лишь активировали разные части внутренней схемы системы, то есть дальнейшее расширение функций Odyssey было крайне ограничено. Проект домашней системы Nintendo должен был работать так же, как и машина Donkey Kong: игровой код должен храниться отдельно от основных обрабатывающих компонентов, без предварительно запрограммированного в самой системе кода.

При создании такой системы существовало одно серьёзное препятствие: цена. Видеоигры, особенно для дома, позиционировались маркетологами для семей с детьми как интересный способ проводить время вместе. Если бы машина была слишком дорогой, родители бы и не задумались о её покупке, как бы ни были хороши её игры. Ни один родитель не захотел бы потратить 871 доллар на домашнюю систему, поэтому лаборатория исследований и разработок Nintendo должна была найти способ изготовить аркадный автомат Donkey Kong за меньшие деньги. Целью Ямаути была система, достаточно мощная для запуска Donkey Kong дома, которую можно было при этом продавать за сумасшедшую цену в 9800 йен (эквивалентно примерно 40 долларам).

Чтобы достичь этой цены, лаборатория исследований и разработок Nintendo начала с процессора системы. Ядром аркадного автомата Donkey Kong был процессор Zilog Z80, разработанный группой бывших инженеров Intel, попытавшихся взять всё хорошее от серии процессоров Intel 8080 и реализовать их в более маленьком, быстром и дешёвом комплекте. Z80 был очень популярен на японском компьютерном рынке и использовался в стандарте домашних компьютеров MSX.


Процессор Zilog Z80.

Однако Nintendo не могла найти производителя, который бы согласился на её строгие требования. Единственной японской компанией, достаточно отчаянной, чтобы подписать договор с Nintendo, оказалась Ricoh. В то время Ricoh использовала лишь 10% своих мощностей процессорных производств, поэтому для расширения бизнеса согласилась предоставить Nintendo три миллиона процессоров с авансовой оплатой. Чтобы реализовать свой проект домашней консоли, Nintendo поставила на карту всё.

Однако у Ricoh не было лицензии на производство Z80. Покупка этой лицензии была бы дорогой и заняла бы много времени, поэтому Ricoh предложила альтернативу: почему бы не использовать MOS Technologies 6502?


MOS Technologies 6502.

У Ricoh уже была лицензия на производство 8-битного процессора 6502, по уровню производительности сравнимого с Z80. Кроме того, он был значительно менее известен в Японии (несмотря на то, что работал в Apple II, Commodore 64, Atari VCS и многих других популярных на Западе компьютерах). Использование 6502 обеспечивало бы новой системе Nintendo своеобразную «защиту от копирования», поскольку игры, написанные для системы Nintendo, не так-то просто было бы портировать на системы конкурентов.

MOS Technologies 6502 был разработан группой бывших инженеров Motorola, попытавшихся взять всё хорошее у серии процессоров Motorola 6800 и реализовать их в более маленьком, быстром и дешёвом комплекте. (Кажется, где-то мы это уже слышали...)

У Ricoh была лицензия на производство 6502, однако не было лицензии на функцию «binary-coded decimal» (BCD) чипа. Чтобы не ссориться с MOS Technologies, в процессоре Ricoh были перерезаны все электрические соединения между модулем BCD и остальной частью чипа. Когда MOS Technologies купила компания Commodore, последняя попыталась засудить Nintendo за нарушение лицензии, но сдалась, когда инженеры Commodore обнаружили внесённые Ricoh изменения.

Даже сегодня у Western Design Center (WDC) можно купить процессоры на основе 6502, и их активно используют в промышленных сферах применения. Продажи 6502 начались в 1975 году, то есть ему уже исполнилось десять лет, когда Nintendo решила использовать его в новой домашней системе. В 1975 году один процессор 6502 стоил 25 долларов, а массовый заказ Nintendo ещё больше снизил его стоимость. Ricoh дополнила свой процессор на основе 6502 собственным Picture Processing Unit (PPU) для обработки отрисовки графики на экране. PPU позволял обеспечивать сложную графику, поддерживал палитру из 64 цветов, дисплей разрешением 256x240 пикселей, 64 аппаратных спрайта и слой фона с аппаратным скроллингом.

Определившись с внутренним устройством, компании оставалось лишь спроектировать внешний корпус и дать системе название. Nintendo решила назвать свою новую домашнюю систему «Family Computer», или сокращённо «Famicom»


Nintendo Famicom.

Корпус был спроектирован так, чтобы устройство напоминало забавную игрушку: красно-белый, с золотыми элементами. У Famicom было два несъёмных контроллера, прикреплённых к бокам консоли, и 15-контактный разъём расширений на передней части. Игровые картриджи вставлялись в разъём в верхней части консоли.

Выпущенная в июле 1983 года Famicom обрела большой успех, несмотря на наличие всего трёх игр (Donkey Kong, Donkey Kong Jr. и Popeye), за два месяца было продано 500 тысяч консолей. Хотя лаборатории исследований и разработок Nintendo не удалось достичь амбициозной цели Ямаучи и снизить цену до 9800 йен, система продавалась за 14800 йен (эквивалент 65 долларов), поэтому привлекала родителей своей дешевизной.

Американский Ренессанс


Учитывая популярность Famicom в Японии, было понятно, что её непременно стоит продавать в США. Однако у американского рынка были свои проблемы; в 1983 году в США произошёл «крах Atari» — розничные сети отказались от идеи домашних видеоигр из-за перепроизводства и отсутствия контроля качества, что привело к огромным нераспроданным запасам картриджей для Atari 2600. Розничные сети США не были заинтересованы в покупке новых видеоигровых систем.

Nintendo потратила два года на редизайн Famicom для рынка, на котором случился крах видеоигр. Консоль не могла выглядеть как машина для видеоигр, поэтому внешний корпус превратился в серый параллелепипед с откидной крышкой на передней части, чтобы устройство походило на видеомагнитофон. Маленькие разноцветные картриджи Famicom превратились в большие серые «Game Paks», внутри почти пустые; однако благодаря своему большому размеру и одинаковости они отдалённо напоминали видеокассеты. Также нужно было поменять название системы. Бренд «Nintendo Entertainment System» позиционировал систему как часть домашнего кинотеатра, которую можно разместить рядом со стереооборудованием.

Модифицированная система была уже почти готова, однако Nintendo всё равно считала, что ей требуется нечто уникальное, чтобы продукт стал обязательным к покупке в глазах потребителей. В комплект «Deluxe Set» были добавлены световой пистолет «Zapper», идеально подходящий для таких игр со стрельбой, как Duck Hunt, а также R.O.B. (Robotic Operating Buddy)


R.O.B.

Это была не просто видеоигровая система — она продавалась с роботом! Камеры в глазах R.O.B. могли распознавать закодированные паттерны мерцающего света, идущие от телевизора, приказывая R.O.B. поворачиваться влево или вправо, опускать или поднимать руки. R.O.B. можно было использовать в двух играх, Gyromite и Stack-Up, но ни одна из них не была особо хороша. Впрочем, игры были не главными: R.O.B. требовался исключительно для продажи NES американским родителям, уже обжегшимся на Atari 2600.

Прежде чем переходить к программированию оборудования, следует упомянуть ещё один аспект ребрендинга Famicom. Основной причиной краха 1983 года было отсутствие контроля качества и лицензирования игр для Atari 2600. Видеоигры были крупным бизнесом, и любая компания могла нанять одного-двух программистов, чтобы продавать игры для Atari. В результате появилась целая лавина игр, некоторые из которых едва работали. Большинство потребителей, несколько раз обжёгшись на покупке ужасных игр за полную цену, перестало их покупать, и рынок видеоигр рухнул.

Отчаянно стремясь избежать повторения этой ситуации для NES, Nintendo добавила на материнскую плату чип под названием 10NES (иногда его называют «CIC», или «Checking Integrated Circuit»).


Чип 10NES в картридже NES.

Чип 10NES использовался в качестве криптографического ключа и замка. У консоли и картриджа были собственные чипы CIC; каждый из них вычислял по особому алгоритму значение, после чего картридж отправлял свой ответ консоли для сравнения. Если результаты совпадали, система загружалась. Если они не совпадали, чип CIC выполнял перезагрузку и повторял попытку.

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

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

Создание игр для NES на ассемблере 6502: приступаем к разработке

Комментарии (4)


  1. SShtole
    21.03.2022 13:28
    +7

    Про «дуть на картридж». Реймонд Чен (майкрософтовский технический евангелист) рассказывал, что это известный лайфхак в саппорте. Допустим, звонит юзер и говорит, что у него не включается компьютер. По статистике, в 9 случаях из 10 виной всему неподключенный кабель питания. Но если сказать юзеру: «А у вас питание подключено?», юзер ответит: «Да я что, по-вашему, ИДИОТ?» и ситуация зайдёт в тупик. Надо, оказывается, сказать: «У вас, скорее всего, пыль попала в разъём, надо достать, продуть и вставить обратно». Тогда юзер без лишних споров полезет раком под стол, найдёт на полу кабель, который зацепила уборщица, воткнёт на место, скажет в трубку: «О да, это помогло!» и проблема будет решена.

    Возможно, что продутие NES'овских картриджей растёт тоже откуда-то отсюда.


    1. Skigh
      21.03.2022 18:07

      Пересказываю по памяти какой-то ролик с Ютуба:
      Используемый на NES разъём для картриджа ZIF (Zero Insertion Force) был не слишком надежен при активном использовании. Соединение могло теряться из-за загрязнения, окисления, деформации контактов. А если на картридж подуть, на контактах появлялась влага, которая временно улучшала соединение (а затем усиливала окисление).


      1. Zenitchik
        21.03.2022 19:05

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


        1. VBKesha
          22.03.2022 00:06

          Именно на NES? На клонах был другой разъем.