Приставки > Картриджи / диски

Конструктор многоигровых ROM'ов для картриджей COOLBOY

<< < (39/45) > >>

Cluster:
Обновление тут.

Наконец-то я довёл до ума и выложил в паблик свой конструктор многоигровых ROM'ов для картриджей COOLBOY (и клонов):

Исходники: https://github.com/ClusterM/coolboy-multirom-builder
Вот тут можно скачать релизы: https://github.com/ClusterM/coolboy-multirom-builder/releases

Пожалуйста, поправьте там мой корявый английский в документации, если кому не сложно.

Возможности:

* Умеет собирать ROM'ы-многоигровки вмещающие до 768 игр, которые потом можно записать на дешёвые китайские картриджи COOLBOY
* Автоматически создаёт меню для выбора игр
* Может автоматически сортировать игры в меню по алфавиту, если нужно
* Позволяет использовать свою собственную картинку в меню сверху
* На новых картриджах, которые перезаписываются без пайки, меню сохраняет последнюю выбранную игру и до 15 отдельных батареечных сохранений
* Поддерживается много разных версий картриджей
* Меню имеет встроенные аппаратные тесты
* Меню может показывать информацию о сборке и железе, если при включении зажать SELECT
* Позволяет добавлять несколько скрытых ROM'ов для запуска комбинациями кнопок или через Konami Code
Принцип работы:

* Создаём текстовый файл с именами файлов и/или директориями, содержащими ROM'ы. При желании можно указать там же, как игры будут называться в меню.
* Запускаем утилиту CoolboyCombiner.exe с опцией "prepare", она автоматически распределит данные игр наилучшим способом и создаст файлы "games.asm" и "offsets.xml" (имена могут отличаться). Первый содержит данные для запуска игр, а второй адреса этих игр в итоговом ROM'е.
* Компилируем "menu.asm", используя nesasm. Я использую свою собственную модификацию nesasm: https://github.com/ClusterM/nesasm. Он создаст .nes файл с меню для выбора игр.
* После этого нужно совместить меню и сами игры на основе данных из XML файла сгенерированного выше, для этого запускаем "CoolboyCombiner.exe" уже с опцией "combine".
* Всё.
Рядовому пользователю не нужно сильно в это всё вникать, т.к. набор сопровождается файлом Makefile для утилиты Make и файлом "!build_rom.bat", они автоматизируют процесс. Просто отредактируйте файл "games.list" и запустите "!build_rom.bat" (для пользователей Windows).

Подробнее можно почитать на английском по ссылке выше.

Если кому не жалко, можете поддержать меня донатом: http://clusterrr.com/donation/
А то я кучу времени на всё это убил.

PS А заливать в CoolBoy можно вот этим дампером.

moonbeast:
Тест ChrRamTest.cs не использует маппер, и он так же не работает на карике 150 in 1, на котором идёт например Kirby.

Кто-нибудь может поправить его, что бы заработал для SMD133/AA6023B sub3 ?

Линии A10-A12 на которые ругается тест идут в маппер на CA10-12, и потом от маппера идут с соответствующих VA10-12 линий на PPU A10-A12 разъёма карика.

А вот CHR RAM A17 (pin 9) у меня каким то фигом замкнут на VCC, это я проглядел, конечно. (Но в маппер он приходит корректно, на CA17(pin 12)). Это конечно странно, визуально всё норм, наверное, под микрухой сопля. Спасибо, разберусь с этим. У меня появился 150 in 1, в котором всё нормально. Продолжу эксперименты на нём.

Прилагаю картинку, в скобках номер пина.
UPDATE: да, проблема похоже в CHR RAM A17 замкнутом на VCC. на 150 in 1 всё работает корректно, Контра, Kira Kira DX, и другие, требующие 256K CHR. Тест в картридже показывает корректно 256К CHR; а SRAM тест, кстати FAILED.

mutabor:
А есть фото без CHR RAM?
Посмотрел что за ChrRamTest.cs, да он вообще про мапперы не знает и естественно будет фейлиться так как на неинициализированном MMC3 все страницы CHR нулевые, т.е. дублируются в адресном пространстве.
CA17 с маппера идет через переходку под буквой A.
Есть SMD168L6, разводка похожа, если не идентична:

moonbeast:

--- Цитата: mutabor от 30 Март 2023, 20:24:23 ---А есть фото без CHR RAM?

--- Конец цитаты ---
Есть, но я не снял каптоновую ленту, при фотографировании. Когда буду снимать микросхему, сделаю обязательно получше.

Похоже пора делать отдельную тему по этим SMD168L карикам, а то не совсем по теме трэда получается.
За фотки спасибо, отличное качество, у меня как раз был интерес посмотреть другие ревизии. Уже видел L5, L6, у меня L7. Но самый интересный, например для попытки репродукции SMD173 - у него все микрухи на одной стороне и батарейка сразу разведена.

mutabor:

--- Цитата: moonbeast от 31 Март 2023, 06:44:23 ---Есть, но я не снял каптоновую ленту, при фотографировании. Когда буду снимать микросхему, сделаю обязательно получше.

--- Конец цитаты ---
Да норм, место под микросхемой открыто, а остальное мне не интересно - есть свое. Интересно было бы еще фото разводки под флешкой.
Сравнил разводки - они идентичны. CA17 разведен как надо и должен работать. Если нет залипов или еще каких косяков - возможно косячный маппер. У меня есть один с отгоревшим одним адресом. В принципе если есть большое желание - можно содрать каплю и заменить маппер - эти мапперы продаются отдельно на алике.

--- Цитата: moonbeast от 31 Март 2023, 06:44:23 ---Похоже пора делать отдельную тему по этим SMD168L карикам, а то не совсем по теме трэда получается.

--- Конец цитаты ---
Тоже об этом думаю, хотелось бы как-то упорядочить инфу по этим новоделам. У меня есть еще несколько типов, и не только SMD. Думаю как лучше организовать инфу чтобы не было свалки.

gegmaster:
По поводу теста памяти через дампер, тоже столкнулся с такой проблемой. Пришлось обратиться к Кластеру. Вот что он сказал:
--- Цитата ---TestChrRam.cs только для простых мапперов типа UNROM

Просто никому вроде не надо было COOLBOY проверять, я не заморачивался :)

--- Конец цитаты ---

И по просьбе написал тест для кулбоев.

 CoolboyTests.zip (2.12 КБ - загружено 149 раз.)

mutabor:
Вскрыл новодельный маппер TEC9719 (точнее даже 2, но во 2й китайцы забыли положить чип :lol:). Это не SMD133, но во многом схож (распиновка и регистры частично совпадают), хотя и имеет существенные отличия: поддержка MMC3+UxROM+AxROM, поддерживает меньший объем флеша - до 4МБ с CHR 256К либо 8МБ с CHR 128К, а также особенность записи - в прошивке дампера нужно отключать M2, иначе будет постоянно ресетаться.

KykyPyky:
mutabor, маркировка TEC3719 была на пластике корпуса или на самом кристале?

mutabor:

--- Цитата: KykyPyky от 15 Апрель 2023, 18:30:44 ---mutabor, маркировка TEC3719 была на пластике корпуса или на самом кристале?

--- Конец цитаты ---
На кристалле же, смотрите 2ю картинку. Маркировки на корпусе там нет - капля же.
Мне этот маппер встречался на платах AS-Z-19 (кстати весьма годные платы - со стабилизатором 3.3v, возможностью добавить PRG RAM, которая работает лучше чем с SMD133, шьются без пайки), которые в свою очередь в картриджах ГеймКард AA-2489, AA-2513.
Также весьма вероятно он на этой плате https://www.emu-land.net/forum/index.php/topic,85984.msg1543711.html#msg1543711 в паре с регистром для старших адресов.

Dianismult:
Приветствую господа форумчане. Приобрел я один из самых дешевых картриджей недавно, 600 в 1, маппер скрыт под каплей. Плата вроде и похожа на Mindkinds, но это не она. Не могу его сдампить дампером Кластера, прога пишет что не может определить версию coolboy. Судя по дорожкам распиновка отличается от стандартной smd133. Пробовал отключать проверку в скрипте дампера, тогда дампит одни FF. Снял образ с флешки программатором, отыскал в дампе код меню, судя по коду запуска игр используются регистры $4800-$4803. Подскажите может кому попадался такой картридж, реально ли его сдампить дампером и перезаписать.  WRAM допаял самостоятельно, в надежде на удачный эксперимент...

mutabor:
Dianismult, eсли прошивка сливалась программатором - есть фото со снятым флешем? Тогда можно определить пригоден ли он прошивке дампером. Да и в принципе желательно более качественные фото.
Попробуй сдампить как безмапперный и как MMC3. Если флеш жив - одни FF не должны дампиться.
Разводка в некоторых местах прям 1 в 1 как у SMD168L6 (фото выше в этой теме).

Dianismult:
mutabor, Спасибо за ответ. Флеш более чем жив, сам картридж работает. Не догадался сделать фото без флешки, пробовал дампить как ммс3 и как nrom, так же одни FF. Из дампа с программатора я вытащил код меню, и он показал что особо не отличается от кода coolboy, только регистры другие. Поэтому у меня подозрение что дампер с ним не справится без доработок, либо есть какие то еще параметры о которых я не знаю. А пиновка маппера не похожа на smd133 я визуально сравнивал.

mutabor:
А в приставке он работает? В дампе именно все FF или только почти все? Все FF в дампе - это очень странно - даже если маппер не управляется должна сдампиться стартовая страница, в которой есть стартап код. Если все FF - значит проблема не в мапперре, или не только в маппере.
Да маппер определенно не SMD133, но схожесть разводок указывает на то, что эта плата не с нуля сделана, и есть хорошие шансы что она прошивается, т.к. SMD168 прошивается.

Dianismult:
mutabor, ДА действительно по мимо FF присутствуют несколько байт порядка 30, и вектора находятся на своем месте, и как раз на эти данные ссылаются. Очень похоже на какую то инициализацию. Это дамп в режиме ммс3. Судя по дампу с флешки, данные сильно не полные. Все равно не понятно как же его сдампить.

mutabor:
Выложи дампы, гляну.

Dianismult:
В архиве дамп который пробовал считать дампером в режиме ммс3, и в режиме coolboy размером 1мб. Еще ссылка на полный дамп с флешки, код меню как я понял начинается с адреса 1f0000, могу ошибаться.
https://cloud.mail.ru/public/9qQV/MuTxg96yR

mutabor:
Практически разобрался с этим маппером. По сути это сильно модифицированный SMD133.

Registers:

Reg base = #4800

R0.0..2   P: PRG SIZE = 16k*2^P (P=0 size=16k, P=7 size=2m)
R0.5   0 - startup mode, PRG bank fixed to 0x3f; 1 - normal mode
R0.6   lock MMC3 registers
R0.7   0 - NROM8K mode; 1 - MMC3 mode

R1   PRG A13..20

R2.0..3   PRG A21..24

R3.0..4   CHR A13..A17 for NROM8K mode

MMC3 RA001.6   disable flash write

Видно что регистры теперь упорядочены, а не распиханы по всем щелям как у SMD133.

Для примера (4 байта - значения регистров, число - задаваемое смещение в дампе):
Menu (MMC3 2M):
PRG   А7 00 00 00   0000000

Contra konami (MMC3 128k):
CHR   a3 90 0a 00   1520000
PRG   a3 c0 02 80   0580000

ANTARCTIC ADVENTURE (NROM 16k)
CHR   a3 61 0f 00   1EC2000
PRG   a0 52 09 90   12A4000

1942 (NROM 32k)
CHR   a3 bf 0e 00   1d7e000
PRG   a1 f0 06 90   0de0000

В аттаче прошивка дампера, которая нормально работает с ним. Также прикладываю пропатченную менюху, которую можно запустить на эмуле.
P.S. А игр там 430 а не 600, потом начинают повторяться. И тут наипалово :lol:.
UPD: Выяснил, что ром называется 8B3179ic6023 без X, а X - это младший байт числа игр 600 = #0258, #58 = 'X'. Так что пока непонятно как называть этот новый маппер, пока будет зваться по имени платы KJ10A.

Dianismult:
mutabor, СПАСИБО за проделанную работу, и такой развернутый ответ. Мозгов конечно у меня не хватит все это осознать, но думаю покопаю дальше.

mutabor:
Ну допустим кластеровский дампер поправить совсем просто:
UInt16 coolboyReg = 0x4800; //or make detect & switch

var r0 = (byte)0xa0; // 16k PRG page
var r1 = (byte)((bank << 1) & 0xff);
var r2 = (byte)(bank >> 7);
var r3 = (byte)0x10; // NROM mode

Оцените, насколько сократился код по сравнению с тем, что было :). Надеюсь куда и вместо чего это надо вписать - понятно.
Также обновил фото маппера TEC9719 в посте выше (да, название теперь верное). Интересно, 1998 это реально год его разработки? Тогда возможно он стоял даже в стародельных кариках, а SMD133 видимо делался по его образу и подобию.

mutabor:
Завершил исследования маппера KJ10A, обновил инфу выше. Он таки нормально шьется дампером, нужно только активировать прошивку через регистр (см. пост выше).
По итогу к сожалению ничего кроме MMC3 он не может, по сути просто аналог SMD133. Свободной PRG RAM у меня нет чтоб проверить нормально она работает или глючит как с SMD133.
В отличие от SMD133, который стартует в MMC3 режиме, этот стартует в своем NROM8K, по этому нормально не дампился как MMC3. Также у него нет поддержки NROM16K/NROM32K, но их можно сделать конфигурацией регистров MMC3. Также нельзя залочить запись в регистры маппера, одна надежда что игры не будут туда ничего писать. По прошивке видно, что китайцы типа пытались его лочить и включать NROM как в SMD133 записью 0x80/0x90 в R3, но по факту это бесполезно, в MMC3 режиме R3 вообще не используется, а режим устанавливается в R0.

Add: Закончил с тулзами, прошивается и работает

Изменения кода дампера:

        const ushort RegBaseV1 = 0x4800;

        public void DumpPrg(IFamicomDumperConnection dumper, List<byte> data, int size)
        {
            dumper.Reset();
            version = DetectVersion(dumper);
            UInt16 baseReg = (UInt16)(version == 2 ? 0x5000 : RegBaseV1);
            int banks = size / 0x4000;

            dumper.WriteCpu(baseReg, 0xa0);
            dumper.WriteCpu(0x8000, 0x06, 0);
            dumper.WriteCpu(0x8000, 0x07, 1);
            for (var bank = 0; bank < banks; bank++)
            {
                var r0 = (byte)0xa0; // 16k PRG page
                var r1 = (byte)((bank << 1) & 0xff);
                var r2 = (byte)(bank >> 7);
                var r3 = (byte)0;
                dumper.WriteCpu(baseReg, r0, r1, r2, r3);

                Console.Write("Reading PRG bank #" + bank + "/" + banks + "... ");
                data.AddRange(dumper.ReadCpu(0x8000, 0x4000));
                Console.WriteLine("OK");
            }
        }


И прошивальщика:

        public static void SetCoolboyBank(IFamicomDumperConnectionExt dumper, int bank, ushort coolboyReg)
        {
            dumper.WriteCpu(coolboyReg, 0xA0); //enable MMC3 access
            dumper.WriteCpu(0xA001, 0x00); //enable write signal
            dumper.WriteCpu(0x8000, 0x06, 0);
            dumper.WriteCpu(0x8000, 0x07, 1);
            var r0 = (byte)0xE0; // 16k PRG page, block MMC3 access
            var r1 = (byte)((bank << 1) & 0xff);
            var r2 = (byte)(bank >> 7);
            var r3 = (byte)0x0;
            dumper.WriteCpu(coolboyReg, r0, r1, r2, r3);
        }

Сборщик ромов в аттаче, иструкция в readme.txt
Upd: багфикс.

Retrobit:
Здравствуйте!
Подскажите, пожалуйста. Данный картридж можно перепрошить?

Навигация

[0] Главная страница сообщений

[#] Следующая страница

[*] Предыдущая страница

Перейти к полной версии