Обещал написать по поводу записи удалось его перезаписать
Дополню.
Сборка famicom-dumper-client.NET 8.0 для famicom-dumper-client нужен потому что я переключил проект на него с .NET 6, в этом не было необходимости. Новые версии famicom-dumper-client можно собрать самому: скачать исходный
https://github.com/ClusterM/famicom-dumper-client (Code > Download ZIP), установить Visual Studio
https://visualstudio.microsoft.com/ru/ (выбрать Разработка классических приложений .NET), открыть famicom-dumper.sln, предложит установить .NET 6.0 - соглашаетесь, в Solution Explorer открыть FlashWriters > CoolboyWriter.cs, найти функцию private void SelectBank(int bank) и заменить её на такой код:
private void SelectBank(int bank)
{
// 365-in-1
var r0 = (byte)(
0xC0
| 0x10 // ?
| ((bank >> 3) & 0x07)
);
var r1a = (byte)(
((bank >> 7) & 0x01)
| ((bank >> 5) & 0x78)
);
var r1b = (byte)(
0x90
| ((bank >> 3) & 0x08)
);
var r2 = (byte)0;
var r3 = (byte)(
0x10
| ((bank << 1) & 0x0E)
);
dumper.WriteCpu(0x5000, r0);
dumper.WriteCpu(0x5001, (byte)(r1a | 0x04));
dumper.WriteCpu(0x5001, (byte)(r1a | 0x06));
dumper.WriteCpu(0x5001, (byte)(r1a | 0x04));
dumper.WriteCpu(0x5001, (byte)(r1b | 0x04));
dumper.WriteCpu(0x5002, r2, r3);
}
ПКМ по FamicomDumper > Properties > Build > Events > Pre-build event убрать текст make -C .. commit buildtime (полностью, с переносом строки), создать в famicom-dumper-client-master\FamicomDumper\Resources пустые файлы buildtime.txt и commit.txt, выбрать Release вместо Debug наверху, нажать F7, в famicom-dumper-client-master\FamicomDumper\bin\Release\net6.0 будет программа. Продвинутые пользователи могут собрать в один EXE командной типа:
dotnet publish -c release -r win-x64 --no-self-contained
У меня заменяется код для других версий CoolBoy (submapper), поэтому --coolboy-submapper указывать при записи наверно не нужно.
Генерация нового рома многоигровкиПоследняя версия скрипта в
MultiRom2.rar, поэтому не нужны MultiRom.rar и Gen_MultiRom.rar. На основе рома с меню многоигровки появляется новый сборник. При сборке сообщение Skipped | Not Supported означает отсутствии поддержки маппера (поддержка 0, 4, 7, и 3, но с регистрами от CoolBoy), это касается и маленьких ромов с мапперами 4 и 7 (PRG или CHR меньше 128 КиБ), для расширения ромов прикладываю скрипт
expand_rom.py, нужно вызвать с аргументами указывающими на входной ром и выходной.
В этой версии скрипта есть предупреждение не о WRAM, а об адресе Reset (адрес с которого запускается код), для MMC3 он должен быть в пределах $E000-FFFF, но здесь $C000-DFFF сработает, а вот $8000-BFFF - нет, такое встречается в плохих хаках на MMC3 и работает в эмуляторах, которые инициализируют там PRG банки 0 и 1.
При желании можно для каждой игры добавить превью (изображение при выборе игры в меню), есть место на 768 игр, но у меня просто чёрное окно. Для этого нужно убрать строчки в скрипте:
# Одна палитра для превью
menu_rom[0x1FD131:0x1FD131+3] = b"\xEA\xEA\xEA"
menu_rom[0x1FD138:0x1FD138+3] = b"\xEA\xEA\xEA"
# Индекс банка графики превью теперь 00 с нулями
menu_rom[0x1FD2C4:0x1FD2C4+2] = b"\xA9\x00"
Графика превью в роме с 0x100000 (1024 байта на каждую игру), палитры с 0x1F0000.
Обновлённый скрипт извлечения ромов из дампа сборникаПрикладываю новую версию
extract_365_in_1.py для извлечения отдельных ромов из сборника, теперь поддерживаются сборки после моего скрипта.