
Картридж ревизии 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.
- Собираем корпус и закручиваем фиксирующие винты.





