Paprium: почему, на мой взгляд, это посредственная игра, раскрученная маркетингом
Если оставить в стороне многолетнюю шумиху вокруг предзаказов, эффектные трейлеры и культ «секретного железа», перед нами окажется вполне заурядный битемап. На статичных скриншотах игра действительно выглядит ярко, но стоит нажать Start — и впечатление начинает меняться.
Из чего же на самом деле состоит эта «революция»:
-
Геймдизайн уровня середнячков 90-х. По динамике, ощущению ударов и балансу Paprium уступает даже Streets of Rage 2, вышедшей в 1992 году, не говоря уже о Comix Zone и Alien Soldier. Анимация порой выглядит дерганой, хитбоксы ведут себя непредсказуемо, а затяжные волны однотипных противников быстро утомляют.
-
Раздутые маркетинговые обещания. Покупателям годами рассказывали об «80 мегабитах чистой мощи» и загадочном сопроцессоре Datenmeister, без которого бедная Sega якобы не справилась бы со столь впечатляющей графикой. Реальность прозаичнее: в картридже установлены обычный 32-битный ARM-микроконтроллер и достаточно мощная для картриджа с одной игрой CPLD.
-
Железо прежде всего ради защиты, а не игры. Даже знаменитый SVP в Virtua Racing действительно выполнял трехмерные вычисления и преобразовывал полигоны в тайлы для штатного VDP: Motorola 68000 с такой задачей не справилась бы. Здесь же перед нами обычный двухмерный битмап. Никакой «графической магии» Datenmeister не создает — изображение выводит VDP. CPLD и ARM в картридже занимались распаковкой данных, воспроизведением внешнего аудиопотока в обход консоли и сложной обфускацией шины, призванной помешать созданию дампа игры.
-
Итог. Маркетинговая мишура окончательно рассыпалась в конце октября 2026 года, когда появился патч Paprium MD. Энтузиасты убрали зависимость от ARM и хитроумного маппера, перенесли звук на штатный Z80 и уместили игру в обычный 15-мегабайтный ROM. Внезапно оказалось, что сама Mega Drive образца 1988 года прекрасно справляется с игрой без дополнительных костылей. А будь в звуковом чипе YM от SEGA 16-битный ЦАП, разница, возможно, и вовсе не ощущалась бы.
Как все это устроено:
Оригинальная Paprium работает по принципу «тонкого клиента». Sega Mega Drive в этой схеме выступает в роли видеоадаптера и устройства ввода, тогда как вычислительная работа перенесена в картридж, на сопроцессор Datenmeister.
-
Обмен через «почтовый ящик» (Dual-Port CPLD MAX10 RAM + SDRAM). Процессор консоли Motorola 68000 не получает прямого доступа к сжатым ресурсам. Вместо этого он взаимодействует с картриджем через область общей памяти ($0-$1FFF DPRAM, $0x2000-$BFFF RO RAM, $C000-$FFFF Increments RAM; каждое чтение сдвигает указатель распаковщика на 2 байта). Чтобы передать команду, 68000 записывает аргументы в рабочие ячейки, например
0x1E10–0x1E28, а затем отправляет ее код в управляющий регистр0x1FEA. Пока чип выполняет операцию, он выставляет биты занятости в статусном регистре0x1FEA. -
Аппаратный графический конвейер (DPRAM + SDRAM + VDP DMA). В картридже установлена память SDRAM. Получая команды от приставки (
0xAE— начало кадра,0xAD— добавление объекта,0xAF— завершение кадра), сопроцессор ARM выполняет следующие действия:-
Распаковывает тайлы в SDRAM с помощью алгоритмов LZ+RLE и LZO.
-
Управляет кэшем слотов видеопамяти (VRAM) и при необходимости масштабирует графику командами
0xF4/0xF5. -
Создает готовую таблицу спрайтов (SAT) и пакеты команд для VDP DMA. Приставке остается передать подготовленные данные в видеочип через окно потокового чтения
0xC000–0xFFFF и область 0x0-0xBFFF.
-
-
Аудиокодек (BGM + 8 каналов SFX). Штатные звуковые чипы Mega Drive, YM2612 и SN76489, в воспроизведении музыки не участвуют. В картридже работают программный декодер и восьмиканальный микшер эффектов с поддержкой панорамирования, изменения высоты тона и стереоэха. Готовый микс подается непосредственно на аудиовход слота картриджа.
Психология долгостроя: как покупателю продали DRM:
История разработки Paprium — наглядный пример управления ожиданиями ретросообщества. Создатели годами поддерживали интерес, переносили релиз, говорили о «невозможных 80 мегабитах чистой мощи» и создавали образ секретной технологии, которую якобы «невозможно эмулировать». Это обращение к психологии коллекционера: вам предлагают не просто игру, а «артефакт» с уникальным чипом внутри.
Дефицит, закрытые предзаказы и легенды о «сгорающих при попытке дампа платах» формируют вокруг посредственного битемапа ореол исключительности.
Тест №1. Запуск оригинала на ПК: порт Datenmeister для Genesis Plus GX
Чтобы подробно изучить взаимодействие игры с картриджем, я портировал эмуляцию сопроцессора Datenmeister в Genesis Plus GX.
Обработчик команд сопроцессора: регистр 0x1FEA
static void paprium_cmd(uint16_t raw_data) {
uint8_t cmd = raw_data >> 8;
uint8_t arg = raw_data & 0xFF;
uint16_t resp = 0;
// Set BUSY 0x1FE4 / 0x1FE6
ram_w16(0x1FE4, ram_r16(0x1FE4) | 0x0004);
ram_w16(0x1FE6, ram_r16(0x1FE6) | (1 << 14));
switch (cmd) {
case 0x00:
resp = (arg == 0xAA) ? 0x00FF : 0x0000;
break;
case 0x81: // Init / Reset
ppm_vram_set_budget(0);
ppm_obj_reset();
break;
case 0x84: // Mapper
memcpy(ppm.ram + 0x8000, cart.rom + 0x8000, 0x8000);
break;
case 0x88: // Audio settings
ppm.audio_flags = arg;
ppm.ram[0x1801] = arg & 0x01;
ppm.ram[0x1800] = ((arg & 0x01) ? 0x80 : 0x00) + ((arg & 0x02) ? 0x40 : 0x00);
break;
case 0x8C: // Play BGM
{
uint8_t track = arg & 0x7F;
if (ppm.bgm_tracks_base_addr) {
ppm_unpack(ppm_bgm_addr(track), ppm.bgm_unpack_addr);
}
if (track != 0) {
paprium_load_mp3(track, 1);
}
else {
ppm.music_track = 0;
}
}
break;
case 0x8D: // BGM settings
if (arg == 0 || arg == 8) {
ppm.music_track = 0;
}
break;
case 0xAD: // Add object to draw list
if (ppm.draw_list_ptr < ppm.draw_list + PPM_OBJECTS_COUNT) {
*ppm.draw_list_ptr++ = arg;
}
break;
case 0xAE: // Frame start
ppm_obj_frame_start();
break;
case 0xAF: // Frame end (AF01 = обычный кадр, AF02 = кадр со скейлингом)
ppm_obj_frame_end(arg);
break;
case 0xB0: // Sprite init
memset(ppm.ram + 0x1F20, 0, 14 * 8);
break;
case 0xB1: // Sprite pause
if (ram_r16(0x1F18) == 0) {
memset(ppm.ram + 0xB00, 0, 8);
}
break;
case 0xC6: // Setup data tables
ppm_setup_data(
ram_r32_swapped(0x1E10),
ram_r32_swapped(0x1E14),
ram_r32_swapped(0x1E18),
ram_r32_swapped(0x1E1C),
ram_r32_swapped(0x1E20),
ram_r32_swapped(0x1E24),
ram_r32_swapped(0x1E28)
);
break;
case 0xC9: // BGM volume
ppm.music_volume = arg;
break;
case 0xCA: // SFX volume
ppm.sfx_volume = arg;
break;
case 0xD1: // SFX play
paprium_sfx_play(arg);
break;
case 0xD2: // SFX stop
paprium_sfx_stop(arg);
break;
case 0xD3: // SFX loop
paprium_sfx_loop(arg);
break;
case 0xD5: // SFX stop all
paprium_sfx_stop(0xC0);
break;
case 0xDA: // Unpack to SDRAM
{
uint32_t dst = ram_r16(0x1E10);
uint32_t src = ((uint32_t)ram_r16(0x1E12) << 16) | ram_r16(0x1E14);
ppm_unpack(src, dst);
ppm.sdram_read_ptr = dst;
}
break;
case 0xDB: // Set SDRAM read pointer
ppm.sdram_read_ptr = ram_r32_swapped(0x1E10);
break;
case 0xDF: // EEPROM / SRAM read
{
uint16_t offset = ram_r16(0x1E10);
if (arg >= 1 && arg <= 4) {
memcpy(ppm.ram + offset, sram.sram + ((arg - 1) * 0x780), 0x780);
}
}
break;
case 0xE0: // EEPROM / SRAM write
{
uint16_t offset = ram_r16(0x1E12);
if (arg >= 1 && arg <= 4) {
memcpy(sram.sram + ((arg - 1) * 0x780), ppm.ram + offset, 0x780);
}
ram_w16(0x1FE6, ram_r16(0x1FE6) & ~((1 << 8) | (1 << 9)));
}
break;
case 0xE7: // MegaWire fake ack
ram_w16(0x1FE6, ram_r16(0x1FE6) | (1 << 5));
ram_w16(0x1C00 + 0x10, ram_r16(0x1E10) + 16);
break;
case 0xEC: // VRAM block budget
ppm_vram_set_budget(ram_r16(0x1E12));
break;
case 0xF2: // Unpack block (sprite test menu)
{
uint16_t blk = ram_r16(0x1E10);
ppm_unpack(ppm_block_addr(blk), 0x9000);
ppm_unpack(ppm_block_addr(blk), 0x9200);
ppm.sdram_read_ptr = 0x9000;
}
break;
case 0xF4: // Unpack scaling stamp
ppm_unpack_internal(ram_r32_swapped(0x1E10), 0, 1);
break;
case 0xF5: // Rescale stamp
ppm_stamp_rescale(
ram_r16(0x1E10),
ram_r16(0x1E12),
ram_r16(0x1E14),
ram_r16(0x1E16)
);
break;
default:
break;
}
// Снимаем флаг занятости и записываем ответ в 0x1FEA
ram_w16(0x1FE4, ram_r16(0x1FE4) & ~0x0004);
ram_w16(0x1FE6, ram_r16(0x1FE6) & ~(1 << 14));
ram_w16(0x1FEA, resp & ~0x8000);
}



Демонстрация работоспособности концепции: https://archive.org/details/ppm-emu
Для запуска скачайте архив, распакуйте его и выполните ppm.cmd в Windows.
К чему я все это?
На борту находятся CPLD MAX10 10M08 с 64 КБ быстрой встроенной памяти, 8000 логическими блоками и 16 независимыми аппаратными блоками умножения 18×18 бит, а также процессор CORTEX M-4, SDRAM и FLASH. При этом Z80 консоли простаивает, а из возможностей задействованы только масштабирование, распаковка и аудио. Где динамическое освещение, вращение или трехмерные модели? Ничего этого нет: данные, распакованные ARM, просто копируются на экран через CPLD. На этом фоне SEGA CD выглядит настоящим техническим чудом, которое, казалось бы, невозможно было реализовать в 90-х.
Тест №2. Оригинальный дамп на IVD6 MAX
От программной эмуляции перейдем к настоящему железу.
Возьмем оригинальную Sega Mega Drive и флеш-картридж InviteDRIVE v6 MAX, после чего запустим непатченный образ Paprium. Чтобы не занимать 2 ГБ памяти на карте, соберем упакованный образ для аппаратных картриджей SCDX с помощью этой утилиты: https://ivd6max.ramfactory.com/scdx.html.
PAPRIUM Оригиналrutube.ru
Прислушайтесь к звуку на стартовой заставке: с первых секунд поверх интро звучит композиция из меню выбора персонажей (*90's Acid Dub Character Select*). В оригинале этого не было.
Я специально добавил трек в начало, чтобы наглядно показать: можно воспроизводить внешний цифровой аудиопоток одновременно с изображением через слот картриджа — именно так, как это делал «секретный» чип оригинала.
Тест №3. Запуск 15-мегабайтного хака без специального чипа.
Теперь загрузим октябрьский патч Paprium MD объемом 15 мегабайт, из которого энтузиасты полностью устранили зависимость от Cortex-M4 и внешнего аудиокодека.
Стандартное адресное пространство Sega Mega Drive ограничено окном в 4 мегабайта. Чтобы консоль могла обратиться ко всем 15 МБ распакованной графики и кода, используется аппаратный маппер банков памяти SSF2 (Super Street Figher 2), реализованный внутри ПЛИС картриджа.
И здесь все становится ясно: FPGA картриджа переключает банки памяти, а штатный Motorola 68000 самостоятельно передает тайлы в VDP.
Звук полностью перенесен на родные Z80 и YM2612. Из-за ограничений ЦАП самого YM2612 он, конечно, проще внешнего потока с картриджа, зато вполне аутентичен для классической Mega Drive.
Резюме. История Paprium показывает, как громкая реклама, искусственный дефицит и «секретный чип под эпоксидкой» позволяют годами продавать весьма посредственный битемап под видом технологического прорыва.
Когда с проекта сняли технологическую мишуру в виде Cortex-M4 и MAX 10, оказалось, что обычная Sega Mega Drive 1988 года без труда справляется с игрой объемом 15 мегабайт, а при необходимости может воспроизводить и внешний аудиопоток.
Поэтому для меня PAPRIUM — не столько обман, сколько пример применения большого количества высокоинтегрированных микросхем с использованием их возможностей лишь на пять процентов.
Еще раз подчеркну: это исключительно мое субъективное мнение. Я никому его не навязываю.
На этом позвольте откланяться. С уважением и наилучшими пожеланиями, хорошего вам дня!
Спасибо!
Новую версию Denuvo полностью взломали за месяц: voices38 сломал защиту Star Wars: Galactic Racer
Как мы возвращаем Ксин к жизни: восстанавливаем боёвку по архивам и собираем бестиарий с помощью Wayback Machine
Дизайн персонажей The Expanse: Osiris Reborn от Owlcat вызвал удивление
Никита Буянов сообщил о предстоящем анонсе консольной версии Escape from Tarkov
Геймдиректор Overwatch об анонсе второй части на BlizzCon 2019: «Вы же *** идиоты»
225 ГБ+: для Grand Theft Auto VI вышел первый патч
Microsoft расширила программу обратной совместимости на 21 игру с оригинальной Xbox
Книжный фестиваль Black Library Live для поклонников Warhammer пройдет 12 декабря