Одна из исключительных особенностей игровых картриджей Super Nintendo — это способность упаковать в микросхемы ПЗУ не только инструкции и ресурсы. Если открыть картридж и посмотреть на плату, можно найти чип защиты от копирования CIC, SRAM и даже платы расширения. Давайте посмотрим чуть детальнее!

CIC

О механизме защиты от копирования SNES рассказано в этой статье о 10NES. Смысл в том, что два чипа работают синхронно. Один чип находится в консоли, другой — в картридже. Если CIC консоли видит что‑то, что ему не нравится, он сбрасывает все процессоры.

Не каждый картридж SNES имеет CIC. У несанкционированных игр, таких как «Super 3D Noah's Ark», его нет. Чтобы запустить игру, нужно сначала вставить ее в консоль, а затем вставить сверху официальный картридж. Шины CIC перенаправляются от «Noah» к CIC официальной игры!

ПЗУ: ИНСТРУКЦИИ И АКТИВЫ

Я не смог найти список всех игр для SNES с указанием размера их ПЗУ. Поэтому я сделал свой собственный. Сюда вошло 3000 игр(США/Япония/Европа), представленных в таблице.

Раньше размер ПЗУ игр выражался в битах, а не в байтах. Например, размер Zelda III указывался не 706 107 байт, а 706 107 * 8 = 5 648 856 бит = 6 Мб. Самой большой из когда‑либо выпущенных игр была Star Ocean (42 Мб), в то же время такой шедевр, как Super Mario World, занимал всего 346 330 байт.

Вот наиболее примечательные игры:

Игра

Страна

ПЗУ (байт)

Star Ocean

Япония

5,305,704

Tales of Phantasia

Япония

4,597,214

Street Fighter Alpha 2

США

3,656,898

Street Fighter Zero 2

США

3,664,837

Chrono Trigger

США

3,082,289

Super Street Fighter II

США

2,831,690

Donkey Kong Country

США

2,580,703

Super Metroid

США

1,571,143

Secret of Mana

США

1,346,021

Street Fighter II

США

1,322,550

Super Mario World 2 - Yoshi's Island

США

1,287,021

Mega Max X2

США

1,005,245

Aladdin

США

828,576

Teenage Mutant Ninja Turtles IV

США

808,998

Contra III - The Alien Wars

США

753,444

Legend of Zelda, The - A Link to the Past

США

706,107

Star Fox

США

622,583

Super Mario Kart

США

354,207

Super Mario World

США

346,330

F-Zero

США

290,893

SRAM

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

Источник (snescentral.com) . Печатная плата Зельда III

На этой печатной плате Zelda III в U4 можно увидеть ранее упомянутый CIC (D413A). В U1 находится размером 0×80 000 = 524 288 байт. В U2 — SRAM LH5268AF-10TLL размером 64 Кбит. В U3 находится микросхема MAD-1 — дешифратор адресов памяти, осуществляющий контроль доступа к ПЗУ/ОЗУ.

Платы расширения (EC)

Самой известной платой расширения является Super FX (он же «MARIO», он же «GSU-1»), который использовался для Starfox в 1993 году. Но EC использовались и ранее.

Полный список игр для расширенных SNES доступен на википедии и snescentral.com. В общей сложности на 13 EC создали 72 игры.

Платы РАСШИРЕНИЯ: SA-1

«Супер‑ускоритель 1» (Super Accelerator 1) — самый ценный среди чипов расширения. Он входит в состав 34 картриджей и представляет собой процессор 65C816 (такой же, как в SNES), но работающий в 4 раза быстрее на частоте 10,74 МГц. Он также имеет 2 килобайта SRAM и интегрированный CIC.

Источник (snescentral.com). Печатная плата для ролевой игры Super Mario

Выше показана печатная плата игры Mario. Обратите внимание на отсутствие чипа CIC (поскольку он есть у SA-1), микросхему ПЗУ в U1, содержащую игровые инструкции и активы, микросхему SRAM в U2 (со встроенным декодером, который устраняет необходимость в MAD-1), и SA-1 в U3.

Обратите внимание, что здесь нет генератора, поскольку SA-1 использует линию тактового генератора System Master из порта картриджа и изнутри делит ее пополам. В результате получается частота 21,4 772 700 МГц / 2 = 10,74 МГц.

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

Полное описание можно найти в документации разработчика SNES, том II. При запуске SA-1 находится в состоянии «стоп». Процессор SNES создает вектор сброса (Reset Vector) и возобновляет работу SA-1. Начальный указатель инструкций SA-1 извлекается из этого выделенного вектора сброса.

SA-1 имеет три режима работы: ускоритель, параллельная обработка и смешанная обработка. В самой мощной конфигурации вся система становится в пять раз более производительной.

Процессор SA-1 и процессор Super NES работают одновременно, что позволяет в пять раз увеличить производительность системы Super Accelerator System (SAS) по сравнению с нынешней Super NES.

Руководство разработчика Super Nintendo, книга II

Благодаря улучшенной обработке SNES может анимировать и обнаруживать коллизии всех 128 спрайтов, доступных в PPU. Мощность процессора также позволила трансформировать спрайты на лету (поворачивать/масштабировать) и записывать их обратно в VRAM PPU. Значительные улучшения были показаны на демонстрационном картридже Nintendo SA-1.

Энтузиасты SA-1 ещё раз продемонстрировали разницу в производительности. На видео ниже сравнивается выполнение алгоритмов сортировки на LoRom (самый дешёвый в производстве), HiRom (картридж с более быстрым ПЗУ, что приводит к снижению ожидания при обращении процессора к шине) и SA-1.

SA-1 также использовался сообществом ретро‑игроков для улучшения игрового процесса старых игр, в которых наблюдалось замедление. Появились такие удивительные проекты, как устранение замедления в Super Mario World, в Gradius III (на это ушло три месяца) и в Contra III.

Super R‑Type (SNES) — сравнение оригинала и SA-1.

Contra III (SNES) — сравнение оригинала и SA-1.

Gradius III — сравнение SNES оригинала и SA-1.

Gradius III (SNES) — сравнение оригинала и SA-1.

Процесс преобразования игры в SA-1 кажется сложным, в частности, он требует ремапинга обращений к ОЗУ/ПЗУ. Это вызывает недоумение, поскольку в документации к SA-1 говорится, что «SNES и SA-1 используют один и тот же маппинг памяти».

Усилия по автоматизации ремаппинга и «SA1-лизации» большего количества игр SNES предпринимались ещё в 2019 году в рамках проекта SA-1 Collection Project.

ПЛАТЫ РАСШИРЕНИЯ: CX4

CX4 — детище Capcom, на котором работают Mega Man X2 и Mega Man X3. Он способен выполнять трехмерный каркасный рендеринг (вайрфрейминг) и множество математических операций, а также масштабировать и поворачивать спрайты в VRAM. Примеры можно найти в интро к MMX2 или в боях с боссами MMX2.

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

В MMX2 и MMX3 он обрабатывает все спрайты, поэтому используется на протяжении всей игры. В принципе, это позволяет разместить на экране больше спрайтов, чем позволила бы SNES без мерцания. Думаю, именно так сделаны некоторые крупные боссы.

Отсюда

Источник (snescentral.com) . Печатная плата Mega Man X2

Выше показана печатная плата Mega Man X2. Обратите внимание на CIC для защиты от копирования в U4, ПЗУ объёмом 8М (8 Мбит = 1МиБ), содержащее игровые инструкции и активы в U1, дополнительное ПЗУ в U2 и CX4 в U3

Обратите внимание на 20-мегагерцовый генератор в X1, поскольку CX4 не использует главную тактовую частоту консоли (Master-Clock).

ПРОЦЕССОРЫ РАСШИРЕНИЯ: CS-DD1

DD1 — это чип для декомпрессии спрайтов, способный напрямую питать VRAM процессора обработки изображений (и не только). Он использовался в двух играх — Star Ocean и Street Fighter Alpha 2.

Ходили слухи, что именно DD1 виноват в появлении чёрного экрана в Street Fighter Alpha 2 перед началом раунда. Но журнал Modern Vintage Gamer опроверг это. Оказалось, что проблема заключалась в передаче звуковых сэмплов в оперативную память DSP.

Источник (snescentral.com) . Плата Street Fighter Alpha 2

Самая простая печатная плата, которую мы сегодня рассмотрим, Street Fighter Alpha 2, поставляется с большим объёмом ПЗУ в U1 (4 МиБ) и DD1 для распаковки активов на лету. Обратите внимание, что здесь нет CIC, он интегрирован в DD1.

ПЛАТЫ РАСШИРЕНИЯ: DSP-1

Серия чипов DSP поддерживает девятнадцать игр. Шестнадцать из них приходится на DSP-1, в частности такие классические игры, как Super Mario Kart и Pilotwings.

Название выбрано неудачно, поскольку DSP означает «процессор цифровых сигналов», но он не работает с непрерывным сигналом, как большинство DSP.

Чип подробно описан в Руководстве разработчика Super Nintendo II. Со страниц книги мы узнаем, что он работает в режиме блокировки (ЦП ничего не делает, пока работает DSP).

ЦП Super NES ждёт, пока DSP1 обработает данные, прежде чем отправлять ему следующие.

Руководство разработчика

DSP предлагает такие инструкции, как быстрое 16-битное умножение, инверсию, sin/cos‑проецирование, вращение и т. д., которые, очевидно, имели первостепенное значение для программирования HDMA и обновления 3D‑изображения в Режиме 7.

Источник (snescentral.com) . Печатная плата Super Mario Kart

Выше показана печатная плата Mario Kart, в которой задействованы все компоненты, о которых мы говорили. Здесь есть внешний CIC в U5, ПЗУ в U1, SRAM для сохранения игр в U3 и, наконец, дешифратор адресов MAD-1 для адресации ROM/RAM в U4. Конечно же, чтобы сохранить игру после выключения консоли, в левом верхнем углу находится батарея.

Как и CX4, DSP не использует Master Clock. Вместо этого требуется генератор, который находится здесь же, в X1). Результирующая частота составляет 8 МГц.

Детали: Pilot Wings на базе DSP-1 были «улучшены», когда энтузиасты обнаружили, что в игре используются текстуры с гораздо более высоким разрешением, чем может отображать Режим 7. bsnes изменили , чтобы Режим 7 мог отображать разрешение HD. Результат можете увидеть ниже:

Существовало три версии DSP-1: DSP-1, DSP-1a и DSP-1b. В ходе исправления ошибок и улучшение процесса  было немного изменено поведение чипа, в результате чего самолёты в демо-версии Pilot Wings врезались в землю.

Платы РАСШИРЕНИЯ: DSP-2

Использовались в одной игре (Dungeon Master) для преобразования процедур Atari ST. Похоже, что это было сделано в основном для масштабирования спрайтов, как показано здесь.

ПЛАТЫ РАСШИРЕНИЯ: DSP-3

Использовались в одной игре (SD Gundam GX).

ПЛАТЫ РАСШИРЕНИЯ: DSP-4

Использовались в двух играх (Top Gear 3000 и The Planet's Champ TG 3000).

ПЛАТЫ РАСШИРЕНИЯ: OBC-1

OBC-1 использовалась в одиночной игре Metal Combat: Falcon's от Revenge Intelligent Systems. Ходили слухи, что его использовали для управления спрайтами. Однако на сайте nesdev.org по этому вопросу есть разные мнения.

По сути, это очень, очень упрощённый маппер для сохранения RAM. Он помогает создавать таблицы OAM (спрайты) в оперативной памяти (без необходимости манипуляций с битами), которые затем передаются по DMA в память OAM.

Честно говоря, это кажется пустой тратой инженерных усилий. Чтобы полностью устранить необходимость в чипе опытному программисту достаточно одного уикэнда. [...]

Я думаю, что главным оправданием для этого были антипиратские преимущества.

Near 

Источник (snescentral.com). Metal Combat: печатная плата Falcon's Revenge

На печатной плате Metal Combat мы видим OBC1 в U4. В U6 находится CIC, в U5 — декодер адреса MAD-1, в U1 и U2 — ПЗУ игровых ресурсов, в U3 — SRAM ёмкостью 8 КБ для сохранения игр, и, наконец, в левом верхнем углу — батарея для питания SRAM.

Платы РАСШИРЕНИЯ: S-RTC

S‑RTC — это чип для отслеживания реального времени, используемый в одной игре Daikaijuu Monogatari II. Непонятно, зачем разработчикам Hudson Soft вообще понадобилось отслеживать реальное время. Возможно, чтобы показывать его игрокам?

Источник (snescentral.com) . Печатная плата Daikaijuu Monogatari II

CIC в U6, S-RTC в U5, MAD-1 в U4, много ПЗУ в U1 и U2, 8 KiB SRAM для сохранения игр в U3, и батарея питания в левом верхнем углу.

ПЛАТЫ РАСШИРЕНИЯ: SPC7110

Чип декомпрессии данных от Epson, используемый в трёх играх: Tengai Makyou Zero , Momotaro Dentetsu Happy и Super Power League 4, который также имеет функцию часов реального времени.

Источник (snescentral.com) . Печатная плата Tengai Makyou Zero

А тут уже есть кое‑что новенькое: R1513 в U5, который защищает SRAM от скачков напряжения при включении и выключении питания. SRAM фактически находится в U3 (8 КБ), CIC (F411B) — в U7, два огромных ПЗУ — в U1 и U2. Наконец, SPC7110 находится в U4.

ПЛАТЫ РАСШИРЕНИЯ: ST-010

Считается, что чипы серии ST от корпорации SETA были направлены на улучшение игрового ИИ. ST-010 использовался в одной игре (Exhaust Heat 2 — F1 Driver he no Kiseki).

Источник (snescentral.com) . Плата "Exhaust Heat 2"

CIC (D411A) находится в U4. ПЗУ в U1, ST010 — в U2, обратите внимание на генератор X1 на 22 МГц для его синхронизации. Наконец, новинкой является 74LS139 в U4, который похож на декодер адреса MAD-1.

ПЛАТЫ РАСШИРЕНИЯ: ST-011

Также используется лишь в одной игре «Hayazashi Nidan: Morita Shougi».

ПЛАТЫ РАСШИРЕНИЯ: ST-018

Используется только в Hayazashi Nidan Morita Shougi 2. Похоже, это процессор ARM с внутренним ПЗУ, содержащим инструкции.

ПЛАТЫ РАСШИРЕНИЯ: SUPER GFX-GSU1

GSU-1 использовался в пяти играх (Star Fox, Stunt Race FX, Vortex, Dirt Racer и Dirt Trax FX). Из всех чипов Enhancement к нему есть наиболее полные документации в вики, руководствах и на сайте Super Nintendo Developer. 

Он работает на тактовой частоте 10,74 МГц (основная частота 21,47 МГц, внутренняя частота уменьшена вдвое) и может работать без перегрузки процессора SNES благодаря внутреннему кэшу инструкций объёмом 512 байт. После выполнения своей задачи он может прервать работу центрального процессора консоли (C-CPU).

SNES PPU1/PPU2 ориентированы на тайлмап/спрайт, а Super-GFX отлично справляется с рендерингом пикселей и растеризацией полигонов. Обычно рендеринг осуществляется в фреймбуфере, расположенном в картридже. Содержимое фреймбуфера передаётся в VRAM во время VSYNC.

Источник (snescentral.com) . Печатная плата Star Fox

На печатной плате выше мы видим чип GSU-1 (M.A.R.I.O, Mathematical, Argonaut, Rotation, Input/Output) в U3, CIC в U5, 74LS139 (аналог MAD-1) в U4, код игры и активы в ПЗУ U1. Странность в том, что в U2 находится SRAM, но нет батареи для его питания, когда консоль выключена. Это объясняется тем, что (256/8 = 32 килобайта) SRAM «частично выделена для хранения фреймбуфера SuperFX».

Как и в случае с SA-1, сообщество SNES старается максимально улучшить предыдущие игры, вкладываясь в GSU-1 через такие проекты, как Project Super FX. 

ПЛАТЫ РАСШИРЕНИЯ: SUPER GFX-GSU2

GSU-2 — это GSU-1, работающий на полной скорости, то есть на частоте 21,47 МГц. Он использовался в трёх играх Super Mario World 2: Yoshi's Island, DOOM и Winter Gold.

Прирост мощности появляется за счёт того, что тактовая частота не уменьшается вдвое. Это (в очередной раз) демонстрируют энтузиасты, которые заменили GSU-1 на GSU-2 на картридже Star Fox.

Создатель DOOM для SNES, Рэнди Линден, не имел доступа ни к документации о чипе GSU, ни даже к исходному коду DOOM. Он сделал обратный инжиниринг. Рэнди проделал великолепную работу, поскольку это единственный консольный порт, способный использовать уровни, созданные под ПК (на других консолях приходилось упрощать геометрию).

Источник (snescentral.com) . Плата Super Mario World 2: Yoshi's Island

Super Mario World 2 использует GSU-2 в основном для масштабирования и растяжения спрайтов (спрайты обрабатываются и записываются обратно в PPU VRAM). Например, это видно в сценеу с катящимися валунами.

Эта плата имеет батарею, поэтому SRAM используется как для размещения кадрового буфера, так и для сохранения игрового прогресса. Как ни странно, на плате оказался генератор X1, в котором не было необходимости, поскольку GSU-2 мог использовать Master-Clock. Может, это потребовалось из‑за проблем с напряжением.

Конечно, сообщество SNES поработало над играми GSU-2. DOOM, наиболее нагруженная полигонами игра, была разогнана до 32 МГц, что увеличило частоту кадров с 10-11 до 14-15 кадров в секунду.

ПЛАТЫ РАСШИРЕНИЯ VS СООБЩЕСТВА ЭМУЛЯТОРОВ

Если бы платы расширения значительно улучшили игровой опыт игроков и снизили бы затраты для издателей, в последующие годы они стали бы занозой в заднице для создателей эмуляторов. Некоторые игры, сделанные под платы расширения, были правильно эмулированы только в 2012 году!

Раньше для эмуляции таких игр, как SF2 Alpha, требовались предварительно распакованные пакеты спрайтов, поскольку внутреннее устройство DD1 было неизвестно.

Тонны усилий были потрачены на реверс‑инжиниринг. Некоторые из чипов имели жестко запрограммированные функции, требующие снятия ограничений. Некоторые (например, на базе ARM) имели внутреннее ПЗУ, в котором хранились инструкции. А значит, эмуляторам нужен был файл BIOS.

Даже к 2020 году эмуляция некоторых малоизвестных чипов все ещё не была завершена.

Спасибо за внимание!