
Вспомните мой предыдущий обзор самой дешёвой консоли с Ozon — Sup GameBox. Тогда я раскрыл её внутреннее устройство и показал, что это не просто эмулятор, а сложный аппаратный клон. После публикации я решил связаться с производителем процессора и, к своему удивлению, получил ответ! Оказалось, что тайваньская компания V.R.T даже спустя десятилетия продолжает развивать архитектуру легендарной NES. Это вдохновило меня на полноценный хак: вооружившись программатором и феном, я решил модифицировать это устройство.
Предыстория и контакт с производителем
В прошлый раз мы выяснили, что Sup GameBox — это полноценный аппаратный клон Famicom (японской NES), созданный инженерами V.R.T. Они не только сохранили полную совместимость, но и значительно модернизировали оригинальную архитектуру, добавив мультимедийные функции. Ключевая находка — чипсет консоли умеет работать не только с пиратскими картриджами, но и с обычными SPI/NOR-флэшками. Это открывало теоретическую возможность замены и добавления игр в стандартный набор из 500 тайтлов.

Знаменитая "капелька" — чип V.R.T.
Однако у читателей возник резонный вопрос: зачем сейчас производить такие специализированные чипы, когда есть дешёвые и мощные процессоры вроде AllWinner? Неужели это просто складские остатки от давно несуществующей компании? Чтобы прояснить этот момент, я написал письмо в V.R.T с вопросами о чипсете.

Моё письмо на "рунглише".
И мне ответили! Представитель компании по имени Джек подтвердил, что в GameBox используются чипы серии VT38/39. Он также рассказал о фирменной утилите NesMaker для сборки своих прошивок и намекнул, что компания заинтересована в сообществе энтузиастов и демосценеров, хотя официальный DIY-кит пока не выпускается из-за проблем с пиратским контентом.
Разновидности консолей и подготовка к взлому

Пока официального набора для разработки нет, остаётся модифицировать готовые консоли. Важно понимать, что Sup собираются "из того, что было", часто с использованием б/у компонентов. Существует как минимум три ревизии устройства:
Первая ревизия: использует NOR Flash в корпусе TSOP56 на 16 МБ (часто от Spansion) с 500 играми. Именно такая была у меня, и с ней связана основная сложность — для прошивки нужна специальная дорогая колодка для программатора XGecu T48.
Вторая ревизия: здесь используется флэш-память в корпусе TSOP48 на 8 МБ (версия "400 in 1"). Её можно прошить обычной дешёвой колодкой для NAND, но часть памяти часто не используется.
Третья ревизия: самая сложная. Использует BGA-память, припаянную через переходные платы. Такая память — это старые запасы со спутниковых ресиверов, и работа с ней требует сборки специального адаптера.
Мне повезло: один из зрителей помог с покупкой необходимого программатора и колодки. С этим комплектом и iPhone X для качественных фото я был готов к работе.

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

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

Процесс чтения дампа в Xgpro.
Открыв полученный образ в HEX-редакторе, я ожидал увидеть внятную структуру: код меню, названия игр. Однако всё оказалось сложнее. Память была разделена на секции графики (CHR ROM) и кода (PRG ROM) неочевидным образом. Поиск по названиям игр (Mario, Contra) не дал результатов — строки были искажены.

Обрывки названий в дампе. "Contra 1" едва угадывается.
Разгадка: аппаратная защита через перестановку битов
Изучив дампы других владельцев Sup, я нашёл ключ к разгадке. Оказалось, что инженеры применили простой, но эффективный аппаратный метод защиты от реверс-инжиниринга: они физически поменяли местами сигнальные линии (биты) на плате. В моём случае были переставлены биты DQ1 с DQ9 и DQ2 с DQ10. Для процессора всё работает прозрачно, но при прямом чтении дампа данные оказываются "перепутаны". Скорее всего, это не столько защита, сколько костыль из-за однослойной платы, где сложно развести все дорожки правильно.

Схема, показывающая странный порядок линий данных.
Создание инструмента и реверс-инжиниринг
Чтобы исправить дамп, я написал небольшую консольную утилиту на C#, которая меняла местами соответствующие биты в образе памяти. Код утилиты прост: он проходит по данным и корректирует их в соответствии с обнаруженной перестановкой.
privatestaticbool GetBit(byte b, int bit) {
return ((b >> bit) & 0x01) == 1;
}
privatestaticvoid SetBit(refbyte b, int bit, boolvalue) {
b = (byte)(value ? b | (1 << bit) : b & ~(1 << bit));
}
staticvoid Main(string[] args) {
constint firstBit = 1;
constint secondBit = 2;
if(args.Length < 1) {
Console.WriteLine("Usage VTFasoler <ROM dump>");
return;
}
string fileName = args[0];
string ext = Path.GetExtension(fileName);
FileStream input = File.OpenRead(args[0]);
FileStream output = File.Create(Path.GetFileNameWithoutExtension(args[0]) + (ext == ".bin" ? ".fixed" : ".bin"));
byte[] data = newbyte[input.Length];
input.Read(data, 0, data.Length);
/* VT chipsets use whole 16 data lines, which means we have D1 swapped with D9 and D2 swapped with D10 */
for(int i = 0; i < data.Length / 2; i++) {
byte b1 = data[i * 2];
byte b2 = data[i * 2 + 1];
byte tmp = b1;
SetBit(ref b1, firstBit, GetBit(b2, firstBit));
SetBit(ref b1, secondBit, GetBit(b2, secondBit));
SetBit(ref b2, firstBit, GetBit(tmp, firstBit));
SetBit(ref b2, secondBit, GetBit(tmp, secondBit));
data[i * 2] = b1;
data[i * 2 + 1] = b2;
}
output.Write(data, 0, data.Length);
output.Close();
input.Close();
}С "исправленным" дампом работа пошла легче. Однако структура меню оказалась нестандартной: названия игр хранились отдельно от их дескрипторов. Официальная утилита NesMaker от V.R.T тоже не помогла, так как создаёт игры в другом формате.
Практическая замена игр: хирургия в HEX-редакторе
Поскольку прямой реверс кода меню был сложен, я выбрал более прагматичный путь — замену игр "вручную" по паттернам. Игры для NES имеют чёткую структуру: заголовок (16 байт), за которым следуют секции кода (PRG ROM) и графики (CHR ROM). Размеры этих секций указаны в заголовке.

Структура .nes файла: в заголовке указаны размеры PRG и CHR.
Алгоритм замены игры (например, Dr. Mario на хак Super Mario Bros):
- Открываем целевую игру в HEX-редакторе, смотрим размеры её PRG и CHR ROM.
- Копируем данные этих секций в буфер.
- В дампе консоли ищем паттерн начала PRG ROM заменяемой игры (например, байты инициализации).
- Находим по этому паттерну адрес секции в дампе (в моём случае 0x60000).
- Заменяем данные в дампе на скопированные, соблюдая точный размер.
- Аналогично находим и заменяем секцию CHR ROM. Для проверки графики удобно использовать программу YY-CHR.
- Обновляем название игры в текстовом пуле меню, стараясь не выйти за границы строки.

Поиск паттерна PRG ROM в дампе консоли.
Момент истины: прошивка и тест
Подготовленный модифицированный дамп был записан обратно на флэш-память. Чип аккуратно припаян на место, контакты проверены.

Чип запаян обратно. Момент истины близок.
Включение... и консоль работает! Выбираем в меню наш новый "Super Mario Bros" и видим результат.

Хак работает! Графика выглядит необычно, но играет отлично.
Выводы и перспективы
Итак, моддинг Sup GameBox возможен, хоть и требует определённых усилий и оборудования. Эта консоль, несмотря на свою дешевизну и кустарную сборку, представляет собой уникальный аппаратный клон NES. Она может стать самым доступным инструментом для тестирования самодельных игр (хоумбрю) на реальном "железе" от V.R.T. Кто знает, может, компания действительно выпустит DIY-версию для энтузиастов, и тогда начнётся новая волна творчества для демосцены.
Если вам интересны темы ремонта, моддинга и программирования для ретро-устройств — добро пожаловать в мой Telegram-канал и на YouTube. Ваша поддержка и донаты помогают проводить такие эксперименты и делиться результатами.
Подготовлено при поддержке @Timeweb.Cloud
Больше интересных статей здесь: Гаджеты.
Источник статьи: Хакаем самую дешёвую консоль с Ozon.