Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1-2)

в 9:00, , рубрики: 8-bit, Famicom, mmc1, mmc3, mmc5, Nes, nrom, ruvds_статьи, unrom, денди, консоли, маппер, приставки

Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1-2) - 1


Примерно раз в десятилетие на русскоязычных около-компьютерных ресурсах кто-нибудь поднимает тему такого элемента архитектуры 8-битной Денди и её прародителей, как «маппер», пытаясь на пальцах объяснить, что же это такое. И каждый раз у меня возникает ощущение, что рассказчики сами не вполне знакомы с сюжетом. К тому же практически всегда речь идёт о чисто технических моментах, совершенно не затрагивая историю вопроса: откуда взялось, как развивалось, чем было полезно для фактических игр — что, на мой взгляд, может быть интересно гораздо более широкому кругу лиц.

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

▍ Жизнь до мапперов

В 1983 году на японский рынок вышла 8-битная игровая система Nintendo Famicom. Позже ставшая известной в разных частях планеты под множеством названий, включая Nintendo Entertainment System в США и Денди в странах СНГ. Хотя для многих она является символом самого что ни на есть начала эпохи видеоигр, на самом деле она была настоящим некст-геном своего времени: её появлению предшествовали два поколения игровых систем.

Лидерами предыдущего поколения были Atari 2600 (1977), Intellivision (1979) и ColecoVision (1982), продававшиеся миллионными тиражами. В нём игровые издатели уже регулярно пытались переносить самые передовые игры из аркадных залов на домашние консоли. Но игровые автоматы были значительно мощнее, и подобные адаптации получались лишь условно похожими на оригинальные игры.

Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1-2) - 2

Donkey Kong курильщика для Atari 2600 и ColecoVision

Nintendo, у которой уже был успешный опыт разработки и игровых автоматов, и домашних видеоигр (формата Pong), и интерактивных электронных игрушек (Game & Watch) поставила перед своими инженерами амбициозную задачу: принести в дома игроков графику высокого разрешения с качеством, максимально приближённым к аркадному. В частности, новая система должна была достойно воспроизводить хит самой Nintendo 1981 года, игру Donkey Kong. Эта задача действительно была выполнена.

Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1-2) - 3

Donkey Kong здорового человека для аркадного автомата и Famicom

Как и игровые консоли предыдущего поколения, Famicom использовал концепцию картриджей — легко заменяемого внешнего носителя-кассеты с игровыми программами, технически реализованного в виде печатной платы с микросхемами ПЗУ, что обеспечивало практически мгновенный запуск игр. Но реализация имела значительные отличия от предшественников, уникальные именно для этой платформы.

Картриджи предыдущих систем имели не очень большое количество контактов — 24 у Atari 2600, 40 у ColecoVision. Картридж Famicom имеет целых 60 контактов (и даже 72 у NES), на которые выведена значительная часть сигналов от различных компонентов архитектуры — шины адреса и данных процессора и видеоконтроллера, которые у Famicom полностью независимы друг от друга, а также некоторые другие сигналы, в частности, позволяющие манипулировать отображением графики. Но главное, что наверняка положительно повлияло на дальнейшую судьбу платформы — несмотря на применение ПЗУ, на разъёме картриджа также присутствуют и сигналы записи в каждый из видов памяти.

Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1-2) - 4

Разъём картриджа Famicom и его сигналы

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

Оптимальная конфигурация заключалась в возможности использования ПЗУ меньшего объёма для более простых игр — например, Galaxian (1984) от Namco имеет всего 8 килобайт ПЗУ кода, а Pac-Man (1984) и всеми любимый Battle City (1985) — по 16 килобайт.

Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1-2) - 5

Family Basic

Потенциал для расширения вскоре пригодился для дополнения Family Basic (1984), в котором начали воплощаться отвергнутые ранее планы Nintendo. Совместная с Hudson Soft и Sharp разработка превращала-таки Famicom в простейший персональный компьютер. Комплект состоял из внешней клавиатуры, опционального красного магнитофона от Panasonic, и картриджа с интерпретатором Бейсика. Картридж также содержал дополнительное ОЗУ с батарейным питанием для хранения программ — так заодно родилась и концепция встроенных сохранений в картриджных играх, которая продержалась на картриджных платформах до начала 2000-х годов.

Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1-2) - 6

Картридж Family Basic внутри. Энергонезависимая память на пальчиковых батарейках!

Полный же потенциал такой открытой архитектуры был раскрыт позже, ближе к концу 1980-х годов. За счёт появления и широкого использования пресловутых мапперов на том же самом железе удалось реализовать значительно более продвинутые игры, чем те одноэкранные аркады, для одомашнивания которых оно создавалось. Это позволило растянуть активную коммерческую жизнь платформы на рынке, на целых десять лет — от запуска в 1983 году в Японии и в 1985 году в США до 1995 года в Европе, когда вышла игра Lion King, последняя с официальной лицензией от Nintendo.

▍ Зачем нужны мапперы

В первые годы жизни Famicom и даже его вышедшей чуть позже американской версии, NES, игры укладывались в заложенный архитектурный лимит — 32 килобайта на код и 8 килобайт на графику. За это время аркадные игровые автоматы, являющиеся тогда остриём прогресса, только подкрепили тренд на усложнение содержания игр. Больше графики, больше уровней, более разнообразный игровой процесс. В двух словах — «bigger, better».

Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1-2) - 7

Аркадные версии игр Space Invaders, Pac-Man, Popeye

Количественный и качественный рост контента оформился уже в начале 1980-х. Сама Nintendo совершила переход от первых одноэкранных игр типа Breakout (1976), Space Invaders (1978) и Pac-Man (1980) к многоэкранным — Donkey Kong (1981) и Popeye (1982), в которых было уже несколько довольно сильно отличающихся локаций. А в 1985 году ей же был совершён следующий качественный переход, определивший лицо домашних видеоигр ещё на добрый десяток лет.

Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1-2) - 8

Разнообразие локаций в игре Super Mario Bros.

Игра Super Mario Bros явила миру новую концепцию платформера с плавным перемещением по уровням, не помещающимся в один экран. Она состояла из 8 миров по 4 уровня в каждом, имела весьма разнообразный и очень динамичный игровой процесс, полноценное музыкальное сопровождение, и хорошую, хотя и довольно однообразную графику. Так был достигнут предел возможностей Famicom в рамках имеющейся памяти. Чтобы продолжать повышать планку, было необходимо увеличить хранимый на внешнем носителе объём данных.

Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1-2) - 9

Проблемы расширения памяти на картридже

Почему же нельзя было просто так взять и установить в картридже больше памяти? Дело в том, что изначально такие объёмы просто не предусматривались в архитектуре системы. Ведь она задумывалась в годы становления игровой индустрии, когда будущее домашних видеоигр было довольно туманным и не было представления ни о том, какими они должны стать через несколько лет, ни о том, насколько долго игровые устройства смогут существовать на рынке до замены их следующим поколением.

Таким образом, если говорить максимально просто, маппер — такая штука, которая позволяет поставить больше памяти в картридж. Больше памяти — больше графики, анимации, музыки, уровней, и прочего содержания в игре, и в конечном счёте разнообразнее, красивее, лучше и интереснее игры. Или, чуть посложнее: маппер — это устройство, расположенное внутри каждого картриджа, позволяющее управлять памятью большего размера, чем было задумано изначально.

Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1-2) - 10

Одна из первых и одна из последних игр для Famicom

Однако, дальнейший сюжет развивается не так просто, как можно было бы подумать. Нет, Nintendo не взяла и создала пресловутый маппер для своих новых игровых хитов, и все жили долго и счастливо, пока не пришли 16 бит и не разогнали всех. На самом деле Nintendo делала ставку на совершенно иное устройство, не имеющее отношения к картриджам.

▍ Крутятся диски

Несколько лет назад Масаюки Уемура, в начале 1980-х возглавлявший разработку Famicom, рассказал, что одной из причин, почему был выбран именно процессор MOS 6502, была его малоизвестность в Японии — он не производился в стране и не применялся в местных разработках. В Nintendo надеялись, что у других компаний возникнут затруднения с изучением новой системы, и они не смогут быстро составить конкуренцию. Данный эпизод закладывает сохранившееся на многие годы отношение Nintendo к сторонним разработчикам игр для её платформ как к нежеланным гостям, и даёт понять, что последующие события были вполне закономерны.

Надежды компании некоторое время действительно оправдывались — в течении первого года жизни платформы. Только-только успели выйти первые игры от Hudson Soft, картриджи для которых производила сама Nintendo, и уже в конце 1984 года компания Namco — в то время сторонний разработчик, не имевший партнёрского соглашения с Nintendo — разобралась в технологии и выпустила свои игры на картриджах собственного производства. Вскоре к ней присоединились все кому не лень: Bandai, Irem, Jaleco, Konami, Sunsoft, Taito, и др.

Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1-2) - 11

Ровно трёхдюймовая дискета FDS. Рельефные буквы Nintendo являются частью механической защиты от нелицензионной продукции

Решением этой проблемы в глазах Nintendo стал свой возврат к первоначальной концепции: возник план создать дисковод для Famicom и выпускать игры на нестандартных трёхдюймовых (ровно, не трёх с половиной!) гибких магнитных дисках, производить которые третьим лицам было бы значительно сложнее. Таким образом, Nintendo могла бы сохранять полный контроль над собственной платформой, а заодно и снизить расходы на производство копий игр. Также это открыло возможности для альтернативных маркетинговых стратегий типа продажи чистых дисков и записи на них выбранных игр в специальных автоматах.

Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1-2) - 12

Famicom Disk System. Бело-красный Famicom сверху, чёрно-красный DS снизу

План воплотился в реальность в феврале 1986 года — на рынок вышло устройство Famicom Disk System (FDS). Помимо работы с дискетами, хранящими 112 килобайт данных и заодно позволяющими делать внутриигровые сохранения, оно расширяло и другие возможности консоли. В частности, добавлялся ещё один одноканальный, но более продвинутый звуковой синтезатор. В связи с появлением FDS в период с осени 1985 по осень 1987 игры самой Nintendo в Японии выходили исключительно на дискетах, и многие зародившиеся тогда и знаменитые ныне игровые серии, такие как Legend of Zelda, Metroid, Kid Icarus, и даже Castlevania, впервые увидели свет именно на FDS.

Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1-2) - 13

Просьба перевернуть диск в играх для FDS встречается гораздо чаще, чем хотелось бы

Как показала история, решение о смене носителя хотя и имело успех в ближайшие годы, в перспективе оказалось не особо удачным. Даже не говоря о надёжности и удобстве, оставляющих желать лучшего — дискеты нужно было постоянно переворачивать вручную! — оно жёстко ограничило объём игр, который продолжал расти и дальше. Забавно, но через годы Nintendo снова вернулась к тем же граблям, сначала выбрав картриджи вместо компакт-диска для своей Ultra 64 в 1996 году, а потом попытавшись сделать для неё магнито-оптический дисковод 64DD. Впрочем, это уже совсем другая история.

▍ Рождение мапперов

Тем временем оставшиеся в рамках картриджной технологии сторонние разработчики были вынуждены пойти своим путём, и в 1985 году появились первые две игры, использующие простейший маппер для увеличения максимального объёма графического ПЗУ — City Connection от Jaleco и Hyper Olympic Gentaiban! от Konami.

Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1-2) - 14

Плата картриджа с игрой Hyper Olympic Gentaiban!

В интернете есть разночтения по поводу первенства, но так или иначе, обе игры являются портами соответствующих аркад, они полностью разработаны и произведены сторонними разработчиками, и используют одинаковый по устройству маппер. Вскоре это решение, с сохранением программной совместимости, но улучшением аппаратной реализации, было позаимствовано и другими компаниями, Весной 1986 года появился первый маппер в виде заказной микросхемы, а не стандартной дискретной логики, и снова он был разработан сторонней компанией, Sunsoft, для её игры Atlantis no Nazo.

Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1-2) - 15

Плата картриджа с игрой City Connection

Той же весной аналог маппера City Connection создала и сама Nintendo. В дальнейшем эта тенденция сохранялась. Большое количество разнообразных мапперов с новыми, всё более продвинутыми возможностями, разрабатывалось для своих игр сторонними компаниями, после чего немного улучшенные аналоги некоторых из них появлялись и у Nintendo.

Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1-2) - 16

Одна из иллюстраций патента на MMC1

Практически все технические решения, использованные Nintendo в своих платформах, были запатентованы ей в Японии и США. Это касается и особенностей устройства NES, и в том числе мапперов. Так, US Patent 4,926,372 от 6 мая 1986 года описывает маппер UNROM, а US Patent 4,949,298 от 19 ноября 1986 описывает ранний вариант MMC1, несколько упрощённый в практической реализации. Срок действия патентов уже истёк, но в те времена их наличие с одной стороны, и отсутствие решений от Nintendo с другой, плюс острая конкуренция между собой, мешало сторонним разработчикам просто применять готовые решения и вынуждало постоянно изобретать свои велосипеды.

Японский период жизни Famicom показывает, что изначально технология мапперов, как, впрочем, и весь рынок видеоигр для платформы, развивались стихийно и никак не контролировались и не стандартизировались Nintendo, стратегия развития которой не предполагала ни появления других, независимых игроков на своём поле, ни даже продолжения поддержки картриджного формата.

▍ Licensed by Nintendo

С выходом на западный рынок видеоигр, ещё не оправившийся от краха 1983-1985 годов, для достижения успеха в этих непростых условиях, Nintendo решила контролировать свою платформу максимально жёстко.

В частности, каждому отдельно взятому издателю, независимо от репутации и заслуг — даже компании Atari, практически построившей саму индустрию видеоигр — было позволено выпускать максимум пять игр в год. Позже это породило несколько фантомных компаний (Ultra Games, Palcom, LJN после перехода к Acclaim), целью существования которых был исключительно обход ограничения.

Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1-2) - 17

Надпись Licensed by Nintendo в различных играх

Игры должны были оставаться эксклюзивом для платформы в течении двух лет, а для выпуска игры нужно было пройти сложный процесс лицензирования, получив пачку надписей Licensed by Nintendo в игре и на упаковке, в комплекте со строгой цензурой содержания игр. Готовые картриджи, вместе со всеми микросхемами в них, должны были закупаться у самой Nintendo (фактическим производством занимались подрядчики) по не самым выгодным ценам и в количестве не менее 10000 копий. Немногим компаниям, например Rare, удалось внедрить мапперы собственной разработки, но всё равно они производились с участием Nintendo.

В связи с этим некоторые изначально японские релизы сторонних компаний, использовавших мапперы их собственной разработки (Konami, Sunsoft, Namco, Taito и другие) при издании в США перерабатывались под мапперы Nintendo.

Например, наша любимая Contra была переделана с VRC2 под UNROM, при этом объём ПЗУ был урезан вдвое и из игры была убрана значительная часть оформления. Castlevania 3 была переделана с VRC6 на MMC5 и потеряла улучшенный саундтрек, а возможности этого нового, дорогого и очень мощного маппера остались практически незадействованными. В Hebereke (Uforia) маппер FME7 заменили на MMC3, а Power Blazer заодно с заменой экзотического маппера TC0190 на MMC3 был переделан настолько, что преобразился в совершенно другую игру — Power Blade.

Случались и обратные истории: британская игра Dragon’s Lair после выхода оригинального релиза в США была переделана с маппера UNROM на MMC3 для выпуска в Европе и Японии. При этом объём данных игры вырос вдвое, что, помимо прочего, позволило значительно ускорить её работу и сделать почти играбельной.

Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1-2) - 18

Один из немногих известных самодельных девкитов прошлых лет, так называемый Mission Control

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

Не всех издателей и разработчиков устраивало такое положение дел. Некоторые — Tengen, Color Dreams, Sachen и другие — предпочли работать на полу-подпольном положении. Это было непросто, так как в американскую и европейскую версии консоли был добавлен чип региональной защиты, который должен был устанавливаться в каждый картридж, а получить его можно было только у Nintendo. Но со временем нашлись разные пути обхода этой защиты (включая очень занимательный казус с Бюро авторского права США), и нелицензированные разработчики присоединились к японским коллегам в деле создания всё новых мапперов, как своих собственных, так и копий «официальных».

Последствия политики Nintendo отразились на всей индустрии видеоигр, и ещё очень долго выход на рынок консольных игр оставался для небольших компаний гораздо менее доступным по сравнению с домашними компьютерами. Только в середине 2010-х годов ситуация начала меняться к лучшему.

Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1-2) - 19

Времена, кому-то всё же удавалось переиграть и уничтожить саму Nintendo

Ближе к закату популярности платформы в США и Европе эстафету приняли пираты. Скрещивая ежа и ужа, собирающие «разномапперные» игры в сборники, пиратящие как оригинальные игры, так и ранее спираченные коллегами, а позже и разрабатывая свои собственные, они наплодили немалое количество мапперов, начиная довольно точными копиями официальных и заканчивая совершенно экзотическими оригинальными разработками. История продолжается до сих пор, и каждый год в FCUEX появляется поддержка всё новых обнаруженных в пиратской продукции мапперов.

▍ Мапперы для народа

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

Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1-2) - 20

Статья Why Your Game Paks Never Forget в журнале Nintendo Power, январь 1991

Однако в этих публикациях термин «маппер» не встречается. В прессе встречалось обозначение MMC с расшифровкой «Memory Management Controller» — но это, вероятно, лишь импровизация журналистов на основе подсмотренного на платах и микросхемах картриджей обозначения. В патентах Nintendo использовался более стандартный технический термин «bank switching», а также встречается словосочетание «multi-memory controller», от которого, видимо, и произошло обозначение MMC. В сохранившейся приватной документации компании Color Dreams, датированной 1989-1990 годами, их собственный маппер называется просто »page select». Официальной же документации Nintendo на английском языке, по всей видимости, никогда не существовало, и, соответственно, официального термина не было.

В наше же время название «маппер» используется повсеместно, и несмотря на его зарубежное звучание, есть вероятность, что оно имеет отечественное происхождение.

В отечественное информационное пространство информация про мапперы проникла в эпоху первых программных эмуляторов Famicom/NES/Денди, появившихся во второй половине 1990-х годов. На тот момент она имела вполне прикладное значение, ведь эмуляторы поддерживали только ограниченное количество мапперов, а значит, запускали только часть существующих игр. Представление неискушённых в технике пользователей о мапперах в то время сводилось примерно примерно к тому, что это некая микросхема внутри картриджа, и чем она лучше, тем круче игры. Это позволяло проводить аналогии с иными предметами компьютерной техники, обладающими подобными свойствами — лучший процессор, лучшая видеокарта, больше памяти. Последняя аналогия, кстати, довольно близка к истинной сути вещей.

Сейчас уже трудно сказать, какой эмулятор Famicom/NES появился первым, но наиболее вероятным кандидатом на эту роль является японский эмулятор Pasofami, разрабатывавшийся Nobuaki Andou с первой половины 1990-х годов, сначала для японского компьютера FM Towns, а в 1995-1996 годах и для PC с Windows. В те времена образы картриджей представляли собой два отдельных файла — дампы ПЗУ кода и ПЗУ графики, поэтому для запуска игр требовалась отдельная информация об используемом маппере. В документации к Pasofami это называлось просто Program Type, которых на тот момент поддерживалось всего шесть.

Вся информация, связанная с Pasofami, была доступна только на японском языке, что сильно осложняло его использование для западной аудитории. Однако его появление дало толчок к разработке первых западных эмуляторов. Два из них были разработаны нашими соотечественниками, Маратом Файзулиным и Алексом Красивским. Краткий период их сотрудничества привёл к появлению в 1996 году эмулятора interNES, впоследствии известного как iNES, а с ним и одноимённого файлового формата с расширением .nes. В нём дампы всех ПЗУ картриджа объединены в один файл и снабжены 16-байтным заголовком, где помимо прочих параметров указан и тип используемого игрой маппера. Этот формат, ставший негласным стандартом, до сих пор является основным и поддерживается всеми эмуляторами. С 1996 года слово «маппер» начинает встречаться в описаниях устройства NES, в том числе в описании заголовка iNES и другой документации за авторством Файзулина — например, в тексте Nintendo Entertainment System Architecture, от которого отталкивались многие другие авторы эмуляторов.

Таким образом, можно предположить, что повсеместно используемый в наше время термин «маппер» был введён в обиход именно авторами эмуляторов в середине 1990-х годов, и как минимум популяризирован, а, возможно, даже и предложен Маратом Файзулиным.

В появлением формата iNES мапперы получили номера и названия, чтобы можно было как-то их различать. Происходило это стихийно, по мере обнаружения новых игр, плат и микросхем, поэтому никакой особой системы в нумерации нет. Некоторые мапперы имеют собственные названия, выбранные комьюнити разработчиков эмуляторов в зависимости от ситуации: по маркировке ASIC’ов на плате, по обозначению на плате, по названию компании-разработчика, или другим причинам.

Платы картриджей Nintendo могли иметь разные конфигурации с одним и тем же маппером, но отличающиеся объёмом микросхем памяти и особенностями их коммутации, и они имели свои собственные обозначения. Например, маппер MMC3 применяется в семействе из двух десятков плат — TLROM, TKROM, TNROM и многих других, известных под общим названием TxROM. Части из этих конфигураций в iNES был назначен номер 4, а некоторым — другие номера, например, 118 и 119.

▍ Как это работает

Центральный процессор Famicom может непосредственно обращаться только к определённому количеству адресов памяти — оно определяется количеством линий шины адреса, которых 16 штук — это даёт 65536 возможных комбинаций. Однако часть из них используется для внутренних ресурсов системы: для обращений ко встроенному ОЗУ, управляющим регистрам видеоконтроллера и синтезатора звука. Сделано это не особо оптимально, и поэтому, несмотря на небольшой объём ОЗУ и количество регистров им отведена целая половина адресного пространства — так в те времена было проще и дешевле. Вторая половина, соответственно, отдана под ПЗУ, которое находится на плате сменного игрового картриджа и содержит код игры. Таким образом, максимальный объём этого ПЗУ — 32 килобайта.

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

Мапперы на Famicom, NES, Денди: откуда взялись и зачем нужны (часть 1-2) - 21

Стандартная карта памяти Famicom

Распределение адресов в адресном пространстве по их назначению называют картой памяти — как вы догадываетесь, на английском это называется memory map. Где-то этой в карте располагается ОЗУ, где-то регистры устройств, где-то ПЗУ с кодом. Маппер же, то есть mapper — от слова map — устройство, управляющее конфигурацией этой карты. Технически это управление реализовано простой коммутацией «лишних» разрядов шины адреса ПЗУ, и в простейшем случае представляет собой регистр-защёлку, выходы которой соединены с дополнительными адресными линиями ПЗУ.

Запись в регистр маппера мгновенно подключает в определённую область адресного пространства (так называемое «окно» или «слот») выбранный фрагмент («банк» или «страницу») ПЗУ. В современном мире нередко встречаются некорректные аналогии с загрузкой или подкачкой. Маппер не процессор, не дисковод и не файл подкачки — он ничего никуда не копирует и не загружает. Новые данные появляются в адресном пространстве сразу же в момент записи управляющих бит в регистр маппера, и скорость доступа к этим данным точно такая же, как к ПЗУ обычного размера.

В зависимости от конструкции, маппер может переключать не только фрагменты ПЗУ кода, но и ПЗУ графики. В этом случае видеоконтроллер также начинает получать данные из нового места сразу же при переключении. Таким образом, можно менять отображаемую графику прямо во время прохода луча развёртки по экрану — или всю целиком, или только определённую её часть. Это позволяет отобразить на экране больше графических элементов, чем, возможно, в стандартной конфигурации, а также открывает широчайшие возможности для «бесплатной» по вычислительным ресурсам анимации.

В силу устройства у маппера есть понятие гранулярности, а именно, размера переключаемых фрагментов памяти. Так как при переключении коммутируются только старшие адресные линии ПЗУ, а младшие остаются неизменными, их количество и определяет гранулярность, которая получается кратной степени двойки. Чаще всего это 16 или 8 килобайт для ПЗУ кода, но для ПЗУ графики это слишком много, ведь оно само имеет максимальный размер 8 килобайт. Поэтому для переключения банков графики типична гранулярность 8, 4, 2 и даже 1 килобайт. Чем меньше размер банка для графики, тем удобнее.

Помимо своей основной задачи, конфигурации карты памяти, которая может быть реализована множеством способов, маппер может предоставлять и дополнительные функции. Например, программируемый таймер, генерирующий прерывания для процессора с заданной частотой, дополнительное ОЗУ кода и данных с батарейкой или без, ОЗУ для графики тайлов или тайловых карт, некоторые улучшения для графики, или даже целый дополнительный звуковой синтезатор. Звуковые расширения, впрочем, актуальны только для Famicom, так как на NES их работа штатно не предусмотрена.

▍ Как используется

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

Как правило, больше всего места в ПЗУ кода в играх занимают карты и прочие данные для описания уровней. Несколько меньше занимает музыкальное сопровождение, по паре-тройке килобайт на трек. Довольно много места может занимать и сам код игры, пару десятков килобайт. Соответственно, переключение банков кода может понадобиться для доступа к данным: к картам уровней, к музыкальным трекам и звуковым эффектам. Также в банках может находиться и дополнительный код, если он не помещается в один или два.

В ПЗУ графики в разных банках располагаются наборы элементов, из которых строится визуальное оформление уровней или отдельных экранов, а также спрайты персонажей. Банк для графики фона может переключаться относительно редко, а может, и часто — если нужно анимировать весь фон целиком, как это сделано, например, в игре Batman. Для спрайтов очень пригождается малая гранулярность, можно переключать набор элементов графики для одного персонажа, например героя, и таким образом анимировать его.

▍ Продолжение следует

Из-за большого объёма материала я решил разбить статью на две части — историческую и техническую. В продолжении рассмотрим особенности нескольких основных мапперов и их влияние на содержание игр, сложности программирования, а также ситуацию с мапперами на других платформах.

Автор: Александр Семенов

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js