Русская локализация Final Fantasy V для консоли SNES
Заводская плата картриджа до модификации
Картридж ревизии SHVC-F5 базируется на печатной плате SHVC-2J3B-01. В заводском исполнении на ней размещены две микросхемы масочного ПЗУ (MASKROM) общим объемом 2048 КБ, функционирующие в режиме HiROM. Также на борту присутствует статическое ОЗУ (SRAM) для сохранения игрового прогресса, запитанное от литиевой батарейки CR2032. Управление логикой выбора чипов реализовано на дешифраторах: 74LS139 отвечает за SRAM, а 74LS00 — за выборку ROM.

Алгоритм работы декодера предельно прост: при обращении к адресам в пределах первого мегабайта (когда на линии A20 удерживается низкий уровень) активируется микросхема P0. Если адрес попадает в диапазон от 1 до 2 МБ (линия A20 в высоком состоянии), управление переходит к чипу P1.
Особенности подготовки ROM-файла
Процесс репро-программирования имеет свои тонкости. Локализованная версия игры (английский или русский перевод) значительно превосходит по объему японский оригинал. Если чистый образ «Final Fantasy V (Japan).sfc» занимает ровно 2048 КБ, то модифицированный файл с переводом разрастается до 2560 КБ. Кроме того, данная аппаратная конфигурация платы не поддерживается дампером Sanni Cardreader «из коробки», что требует внесения изменений в его прошивку.
Для корректной адресации 2,5 МБ данных мы применим техническую хитрость. Вместо штатной P0 будет установлена Flash-память 29F1610 (2 МБ), при этом ее адресную линию A20 необходимо соединить с линией A21 на слоте картриджа (удобнее всего это сделать через 14-й вывод микросхемы U4). Место P1 займет чип 29F800 объемом 1 МБ.
Поскольку микросхемы различаются по типу, исходный образ необходимо разделить на два сегмента для раздельной прошивки:
- P0.bin (1536 КБ): включает блоки данных из исходного файла по смещениям (0x000000 — 0x0FFFFF) и (0x200000 — 0x27FFFF).
- P1.bin (1024 КБ): включает блок данных (0x100000 — 0x1FFFFF).
Модификация ПО программатора (Sanni Cardreader)
Для работы с нестандартной распиновкой воспользуемся механизмом маппинга. Внесем изменения в исходный код файла Cart_Reader\FLASH.ino.
В тело функций writeByte_Flash и readByte_Flash добавим новые маппинги (221 и 223) для корректной записи P1 и P0 соответственно:
// Обработка A0-A7
PORTF = myAddress & 0xFF;
...
// Маппинг для SNES HiRom (2MB+1MB) — прошивка чипа P1
else if (mapping == 221) {
PORTK = (myAddress >> 8) & 0xFF; // A8-A15
PORTL = (myAddress >> 16) & 0xFF; // A16-A23
PORTL ^= (1 << 4); // Переключение BA5(PL5) для выбора второго ROM
PORTL |= (1 << 6); // Деактивация SRAM через BA6(PL6)
}
// Маппинг для SNES ExHiRom (2MB+1MB) — прошивка чипа P0
else if (mapping == 223) {
PORTK = (myAddress >> 8) & 0xFF; // A8-A15
PORTL = (myAddress >> 16) & 0xFF; // A16-A22
// Программная коммутация A20 и A21
if ((((myAddress >> 16) & 0xFF) & 0x10)) {
PORTL |= (1 << 5); // Активация A21
PORTL &= ~(1 << 4); // Сброс A20 для работы с P0
} else {
PORTL &= ~(1 << 5); // Сброс A21
}
}
После редактирования кода необходимо установить соответствующее значение переменной mapping в функции flashMenu, скомпилировать и обновить прошивку программатора.
Подготовка и запись чипа P0

- Изолируем вывод OE# (31) микросхемы MASKROM P0 от платы и подтягиваем его к Vcc.
- Соединяем технологическую площадку WE# с 27-м контактом SRAM.
- Вывод 43 (A20) микросхемы 29F1610 подключаем к 14-му выводу дешифратора U4 (74LS139).
- В интерфейсе Cardreader выбираем маппинг 223. В разделе "Flashrom Programmer" -> "8bit Flash" выполняем последовательно Erase, Blankcheck и Write (файл P0.bin).
- Верифицируем данные через операцию Read. Если контрольные суммы совпадают, возвращаем WE# на Vcc.
Подготовка и запись чипа P1

- Аналогично первой микросхеме, отключаем OE# (31) и соединяем с питанием.
- Стоит учесть, что распиновка 29F800 в части сигналов WE# и RST# отличается от 29F1610, поэтому штатные площадки адаптера не подойдут.
- Соединяем RST# (вывод 44) с Vcc.
- Линию WE# (вывод 43) временно подключаем к 27-му контакту SRAM.
- В настройках программатора устанавливаем маппинг 221 и прошиваем P1.bin.
- После успешной проверки (Read) фиксируем вывод 43 на линии Vcc.
Финальная сборка и тестирование

- Выполняем полный дамп картриджа для финальной сверки с образом.
- Проверяем напряжение на батарейке и при необходимости устанавливаем новый элемент CR2032.
- Собираем корпус и закручиваем фиксирующие винты.


Экшен X-Men Origins: Wolverine удалось разработать без переработок благодаря переносу фильма
Разработчик Total War Warhammer 40000 рассказал о влиянии настольной игры на стратегию
Для модификации Dawn of the Tiberium Age вышла новая фанатская кампания
Blizzard внедрила онлайн-DRM в Warcraft III: Reforged после релиза кампании Forsaken Kingdom
Sony PlayStation добилась закрытия фанатского мультиплеера The Last of Us Part II на ПК
Геймдизайнер объяснила отказ от выпуска Kemuri на Xbox угрозой для здоровья разработчиков
Создатель популярного мода для Half-Life: Alyx выпустил шутер Gunman Contracts Stand Alone
Owlcat показала культовое оружие огринов в тизере Warhammer 40,000: Dark Heresy