NES с двумя PPU: графическое расширение через “заземлённые” входы фона
Четыре вывода EXT видеочипа RP2C02 позволяют добавить Nintendo Entertainment System второй программируемый графический слой. Проект ANES использует штатный режим обмена между двумя PPU: один чип формирует основной кадр, второй передаёт 4-битный индекс цвета в прозрачные области первого. Цена эффекта — переделка адресной логики, отдельная видеопамять и ROM, написанный под новую топологию.
Модификация Advanced Nintendo Entertainment System, или ANES, превратила четыре редко используемые линии EXT видеочипа RP2C02 в канал связи между двумя PPU. В серийной NTSC NES выводы EXT3..EXT0 обычно соединены с землёй. Поэтому прозрачный пиксель кадра получает обычный backdrop-цвет из палитры. В ANES эти линии отсоединены от земли и связаны с выходом второго PPU.
Режим предусмотрен самим RP2C02. Бит 6 регистра PPUCTRL определяет направление EXT-интерфейса. При нулевом бите PPU читает с четырёх линий индекс backdrop-цвета, при установленном — выдаёт на них четыре младших бита индекса выбранного пикселя. Второй PPU в ANES работает в режиме вывода, первый принимает его данные. Там, где основной чип строит непрозрачный фон или спрайт, кадр остаётся его собственным. В прозрачных окнах появляется слой, сформированный вторым PPU.
Такой композитинг подходит для параллакс-прокрутки, дальнего фона, декоративных объектов и цветовых переходов, которые трудно уложить в одну обычную таблицу тайлов NES. Однако передаются только четыре бита индекса, то есть один из 16 адресов палитры первого PPU. Аналоговая палитра консоли остаётся прежней: модификация меняет способ выбора её записей, а не разрядность цветового ЦАП.
Аппаратная часть заметно сложнее, чем соединение четырёх проводов. В опубликованной конструкции применены два RP2C02, SRAM AS6C6264-55PCN, защёлка 74LS373, дешифратор 74LS139 и четыре резистора подтяжки 10 кОм. Второму PPU выделены 8 КБ памяти: по 4 КБ для pattern data и nametable. Дешифратор меняет стандартное отображение регистров: PPU1 доступен процессору в диапазоне $2000–$2FFF, PPU2 — в $3000–$3FFF. Это позволяет CPU отдельно настраивать прокрутку, таблицы тайлов и палитровое содержимое обоих видеочипов.
Термин «дополнительные спрайты» для этой схемы требует оговорки. Лимит первого PPU в восемь спрайтов на строку сохраняется. Второй PPU способен формировать изображение, похожее на отдельные объекты, однако его поток на EXT лишён обычной семантики спрайтовых палитр и не становится прямым расширением OAM. Почти это второй нижний графический слой с жёстким способом смешения.
Переделка требует снятия штатного заземления EXT. Попытка включить режим EXT-output на исходной NES оставляет активные драйверы PPU соединёнными с землёй; при передаче ненулевых данных это создаёт конфликт токов, нагрев и риск повреждения чипа. Проект рассчитан на глубокую аппаратную модификацию с донорскими PPU либо на совместимое самодельное железо. Обычные картриджи также не получают новый видеорежим автоматически: для ANES подготовлены отдельный demo ROM и поддержка в форке эмулятора Mesen2.
ANES интересна именно тем, что использует штатный, но почти не задействованный интерфейс RP2C02. Консоль получает дополнительный слой через внутреннюю точку композиции видеочипа, сохраняя исходную архитектуру рендеринга и её ограничения.