Внутри картриджей Super Nintendo
Одна из исключительных особенностей игровых картриджей 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 переходила в режим пониженного энергопотребления, чтобы снизить расход энергии.
На этой печатной плате 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.
Выше показана печатная плата игры 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 без мерцания. Думаю, именно так сделаны некоторые крупные боссы.
Выше показана печатная плата 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.
Самая простая печатная плата, которую мы сегодня рассмотрим, 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.
Выше показана печатная плата 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.
Честно говоря, это кажется пустой тратой инженерных усилий. Чтобы полностью устранить необходимость в чипе опытному программисту достаточно одного уикэнда. [...]
Я думаю, что главным оправданием для этого были антипиратские преимущества.
На печатной плате Metal Combat мы видим OBC1 в U4. В U6 находится CIC, в U5 — декодер адреса MAD-1, в U1 и U2 — ПЗУ игровых ресурсов, в U3 — SRAM ёмкостью 8 КБ для сохранения игр, и, наконец, в левом верхнем углу — батарея для питания SRAM.
Платы РАСШИРЕНИЯ: S-RTC
S‑RTC — это чип для отслеживания реального времени, используемый в одной игре Daikaijuu Monogatari II. Непонятно, зачем разработчикам Hudson Soft вообще понадобилось отслеживать реальное время. Возможно, чтобы показывать его игрокам?
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, который также имеет функцию часов реального времени.
А тут уже есть кое‑что новенькое: 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).
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.
На печатной плате выше мы видим чип 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. Он сделал обратный инжиниринг. Рэнди проделал великолепную работу, поскольку это единственный консольный порт, способный использовать уровни, созданные под ПК (на других консолях приходилось упрощать геометрию).
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 году эмуляция некоторых малоизвестных чипов все ещё не была завершена.
Спасибо за внимание!