/famicom-dumper-writer

Device for dumping and writing Famicom cardridges (DIY-friendly Edition)

Primary LanguageCGNU General Public License v3.0GPL-3.0

FamicomDumper - DIY-friendly Edition.

Понимание необходимости сборки этого дампера пришло, когда в моей коллекции приставок появились новодельные однокристаллки с трехвольтовым ядром, на которых Эвердрайвы не стартуют. И хоть капризы эвердрайвов видимо вытекают из-за недостаточности уровня напряжения на сигнальных линиях (в цепях которых все эвердрайвы, даже клоны, содержат резисторы в виде сборок), а не по причине общей заниженности питания на слоте картриджа (чем, с учетом вторичных стабилизаторов в эвердрайвах, т.е. недостающими до пяти вольт долями и полувольтами питания - можно пренебречь). Но перепаивать эвердрайв (даже клон) не сильно хочется ... А так как такие "новодельные" приставки это не просто копия оригинального железа, но и расширенный функционал (серия камней VTxx от V.R.Technology) который хочется проверить и потестить - обратился к поиску иных решений в части реализации перезаписываемого картриджа, например через слот (а-ля как решение FlashKit для Мегадрайва). И такое решение, оказалось, что уже существует! Да и паять фактически ничего не нужно - можно купить готовый картридж, т.н. «CoolBoy» (лайк кластера на алишнике под подобным товаром оказался лучшей рекламой). Чем зашивать такой картридж? И тут я вспомнил что достаточно давно от простоты реализации и наличия свободной ардуины-мега скинул на завод герберы и сделал себе щит, превращающий ардуину в интерфейс работы с дендевыми картриджами. На то время у меня уже был дампер Каццо и еще один дампер был не так чтобы нужен, просто примитивность конструкции и спортивный интерес сделали свое дело (собрал, проверил, убрал за ненадобностью). Кстати, по причине что ардуина тогда под эту задачу была красного цвета - щит с дендевым слотом тоже заказал красным. А после того, как еще и клон фамикома подвернулось собрать на красной плате - то уже решил оставить этот цвет плат для всей своей денди-тематики (настоящий проект тому подтверждение).

Так вот, лишь теперь из практики пришло понимание что ардуино-«клон» кластеровского дампера первого поколения - так-себе штукенция. Ретро-картриджи им можно сдампить, зачастую адекватно – а вот с кулбоями/кулгёрлами он общаться не хочет наотрез – да собственно Кластер этого и не обещал и не тестировал такой вариант на совместимость и т.д. Вобщем ардуино-щит, превращающей ее в дампер а-ля совместимый с кластеровским софтом по факту оказался … лажей полной?! Да он как бы работает, но годится только для чтения картриджей из 90-х. Всё! Кулбои от MindKids’а он даже не читает! Как и кулгёрл-подобный картридж тоже игнорит полностью (PRG-ROM читает нулями, хотя это не так, проверку CHR-RAM проваливает)!

Вобщем оригинальный кластеровский дампер «второго поколения» (на STM-ке) получается единственный фактически маст-хэв инструмент для работы с кулбоями, без него тема застопорились - денди в очередной раз можно откладывать в полку в сторонку.

Ок. Купить готовые платы или отправить герберы на завод? Или вообще купить уже собранный дампер кластера? Собранный чтоб вот «взять и купить здесь и сейчас» - вариантов не нашлось, а в процессе поиска стало понятно что если такие варианты и есть, то это чья-то кустарно-рукопашная сборка, причем «под заказ»: что в моем случае «не спортивно», да и с учетом ожидания - неприемлемо вовсе. Стал внимательнее разглядывать проект, готовиться собирать к нему детали.

Вопреки заявлению автора проект этого дампера вовсе не сложен, а скорее примитивен: как логически: с точки зрения схемотехники (прямое соединение цифровых компонентов), так и по количеству корпусов для его сборки. Но засада как известно «в мелочах». И дело даже не в заказе плат на заводе (нашел на алишнике точку, делают недорого и хорошо) – Кластер (опущу нецензурный опус в адрес этого поистине талантливого инженера) … но зачем он сделал проект трассировки словно под заводское изготовление устройства? В таком виде его врукопашку паять – проклянешь всё на свете! Резюки и кондеры, например, размера 1206 может и крупноваты, а вот 0805 – самое оно, потому что уже 0603 не то чтобы совсем не видно, но пинцетом их брать и держать уже не удобно … так он еще хлеще: натыкал туда 0402! И это еще не все!!! Изюминка – это обычный (пассивный) кварц, но в BGA корпусе! Т.е. только феном паять. При том что места свободного на плате навалом, да и размерами мы не лимитированы. Про бездарно выброшенное при этом место под дополнительный разъем NES 72-пина я уж молчу, можно тупо не паять. Вобщем нужно было рестайлить трассировку ... а попутно еще и осваивать ДипТрэйс, с которым я до сей поры почти не был знаком (больше в КиКаде колдую). Но не в исходном же виде паять - «врагу не пожелаешь», а тем более если все равно заказывать печатку на заводе (за готовые платы на авите ценник конский). А девайс то такой нужон!

...

Вобщем разобрался,

Зарестайлил кластеровский дампер

– теперь спаять реально будет: нужные детальки сделал под корпус 0805, а то что паять не планирую (куча шунтирующих емкостей по питанию) – в 0603 (на всякий, вдруг понадобиться), ну и самое главное - кварц в классическом корпусе (на не в BGA). А с ДипТрейсом оказалось все не так уж и сложно как предполагал – там пожалуй даже проще чем в КиКаде, автоматизация более продвинутая (оно и понятно, всеж платная софтина). Вобщем в 3D это выглядит так:

FamicomDumper-restyle

Красота, хоть навскидку отличий от авторской работы может сразу и не заметно. Кластеровская трассировка «на отвали» (а вернее явно для машинной сборки), где автор в два клика доверился автоматике … и ему там понарисовали такого! В моей же редакции не только замены корпуса деталей и оптимизировано их расположение с учетом и увеличившихся их габаритов и взаимного расположения, но и некоторые дорожки, не затронутые модификацией - также в ручную немного растащил … - короче почти «земля и небо» ;-)

И вот дампер собран!

FamicomDumper-restyle-express

Следующий блок повествования хочу посвятить нюансам, которые пришлось разрешать в процессе сборки-наладки. У Кластера в части данного дампера очень «водянистая» статья на хабре и просто нулёво-ниочёмное видео на ю-трубе ... Может хомячкам, которые даже не планируют собирать сей девайс всякие а-ля премудрости по тексту (хоть по факту бесполезные ибо в объеме «вилами по воде») добавляют шарма, и лицезрение ловких телодвижений заходят «на ура»? Практической пользы от представленного там материала ровным счетом твердый ноль. Я же, к своему сожалению, не нашел там инфы по нескольким важным практическим моментам. Дополню пробелы здесь.

Да, с STM-ками чтобы-таки плотно работать не приходилось, разве что моноколесо бэкапил/прошивал - но даже благодаря этой теме уже имею у себя определенный зоопарк программаторов для данного класса контроллеров и некоторый пользовательский опыт их прошивки. Все казалось бы легко? Щассс ...

Прошиваем STM-ку ... По опыту общения с Найнботами берем тотже J-Link-совместимый донгл, запускаем J-Flash ... Короче понимаем что вариант не рабочий. В итоге после гуглений, скачиваний, инсталляций и пр. (опустим подробности) - приходим к юзабельному варианту. Понадобится STM32CubeProgrammer (качаем, напр. свободно, с официального сайта, с регистрацией на мыло и через забугорную проксю). Из железа сгодиться и клон J-Link (только не совсем примитивный, а чуть по габаритнее). Но нюанс тут в том, что J-Link поддерживается софтиной версии не ниже 2.16 (последняя 2.17) - но эти версии не запускаются под Win7, типа не побеждаемый косяк с версиями Java и т.п. (с «десяткой» все Ок). Под «семерку» же остается юзать более древнюю версию STM32CubeProgrammer (2.5 напр.) но для этого нужно иметь донгл ST-Link (или совместимый). Тут у меня благо нашелся в запасах клон и такого девайса, причем официальная софтина вполне успешно обновила в нем прошивку признав за «родной» ;-)

Подключаться к контроллеру донглом можно разным числом проводов - трехпроводного SWD-подключения более чем достаточно: GND, SWIO, SWCLK (распиновка шелкографией снизу печатной платы). Можно ресет «софтовый» заменить аппаратным - добавить четвертый провод NRST (а смысл?). Ну для полного, беспощадного (хоть и в нашем случае бессмысленного) фанатизма можно добавить и пятый провод SWO (на некоторых клонах его может не быть вовсе - это что-то типа для реал-тайм отладки, т.е. ни разу не для нашего случая «один раз записать»). А, и еще шестой провод - «питание» VCC: не менее пресловутая и бесполезная фишка. Через данную линию ни программатор не запитывает схему, ни схема не запитывает программатор, тогда зачем? ... а это линия мониторинга питания схемы (контроллера) программатором - без нее все более чем на ура, для нашей незамысловатой задачи обойтись можно вполне (хотя можно и все шесть подрубить). Вот.

Далее, у нас есть два скомпилированных бинарника (можно легко выполнить процесс компиляции в STM32CubeIDE, взятой там же у официалов): бутлоадер и основная программа. Для их записи в контроллер, после выбора программатора (который должен определиться) и нажатия кнопки «коннект» (должен определиться наш контроллер) - выбираем второю сверху кнопку из колонки пиктограммок слева «Erasing & Programming». Контроллер можно на всякий предварительно очистить полностью (в центральной части окна «Full Chip Erase»), а потом поочередно записать оба файлика, причем корректно и вручную указав адреса куда их пишем! Для FamicomDumper.bin - 0x08040000, для FamicomDumperBootloader.bin - 0x08000000.

Формально можно сразу с адреса 0x08000000 накатить основную программу и обойтись без бутлоадера вовсе! А все потому что юзать его (благо часто не нужно) - редкое черезпеньколодное извращение!!! Подходящим пинцетом замыкать пару контактов в слоте (не перепутать какие) при этом воткнуть усбишный шнурок и быстро-вовремя отпустить пинцет ... м-да, но иногда получается. Уж тогда под такой функционал нужно было просто кнопку на плате предусмотреть (нахудой конец от жадности - дырки под джампер). И все ради чего? Вместо того чтобы тутже программатором вместе с бутлоадером зашить прошивку еще и извращаться с пинцетом, диском, копи-пастом файла ...

Ах да, еще CPLD-альтеровскую зашить нужно ... Но искать обходные пути, зачем: от бедности? - или от ее первопричины: скупости? Да после такого колдовства с бутлоадером, драйверами (в случае «семерки») уповать что там конфиг корректно лег в CPLD? - ну его нах эти извращения. Альтеру нужно шить «родным» бластером! (т.е. клоном бластера) - благо хедер на плате есть, а штыри также лучше не припаивать - чтоб в последствии не мешали, а несколько секунд во время прошивки коннектор можно под углом пальцем надежно зафиксировать ;-) Скомпилировать исходник в любом Квартусе - пара кликов, им же и прошиваем. Для совсем ленивых (или если комп дюже слабенький - то для экономии времени) - берем сразу pof-файл и в разделе программирования выбираем и записываем его. Обновлять конфиг альтеры маловероятно что придется: функционал ее достаточно жестко определен схемотехникой устройства («ни дать ни взять» как говорится, да и места в ней больше нет совсем). Снимаем программаторы от девайсины, перетыкаем ее в порту (от которого она питалась во время наших ее «программирований»), радуемся ... в идеале. Для «семерки» вероятно придется еще дрова на ком-порт отдельно воткнуть (см. самопал во вложении), хоть это формально простое описалово с указанием использовать стандартный виндовый файл из комплекта системы но для устройства с неизвестным системе идентификатором. Без цифровой подписи такое не пройдет (хоть и драйвер нулевого кольца подписан априори, а юзать мы его собираемся стандартно) - придется либо отключать проверку подписей в системе (что не всегда удобно и не совсем правильно), либо добавлять сертификат с самоизданным ключом в реестр доверенных (или юзать «десятку»).

Теперь у нас в системе девайсина видится как обычный ком-порт ...

Ура оно работает, а иногда и безглючно!

Косяки и просчеты, которые остались.

Упс 1.

Не раз уже приходилось встречать и сталкиваться с неуемным фанатизмом радиолюбителей с постсоветского пространства в стремлении достижения феншуя: не иначе как от избытка академических знаний, желания отличится или пойти в обход подобно «нормальному герою» - при этом полностью пренебрегая разумной достаточностью и технической обоснованностью создаваемого «огорода» ... Или все просто от того что термин «толерантность» воспринимается как чуждый и неприемлемый духу наших соотечественников бывших и настоящих.

Да, зачастую при конструировании устройств, совместимых древними ретро-ЭВМ (игровыми приставками), с использованием более современной элементной базы в первую очередь как более доступной, а не исключительно как более функциональной и гибкой - стакиваешься с необходимостью принять правильное инженерное решение в части сопряжения древности и новодела по уровням сигналов. Т.е. к пятивольтовому ТТЛ приходится подключать трехвольтовый КМОП или также ТТЛ. И вот тут полет фантазий порой зашкаливает: от ограничивающих ток резисторов до полноценных шинных формирователей (двунаправленных драйверов-переключателей)! А ведь порой ничего подобного просто-напросто не требуется, ибо «толерантность». Более такого, применение подобных технических наворотов может сыграть «злую шутку» и вопреки ожиданиям чудо-инженера привести к неожиданным и нежелательным последствиям.

Многие схемотехнические компоненты начала 2000-х годов имеющих трехвольтовое питание (это и микроконтроллеры и память и логические матрицы) при этом полностью совместимы с древними ТТЛ компонентными, что в случае их КМОС исполнения вполне логично (а поддержка тех или иных стандартов уровней сигналов скорее носит уже декларативный характер, но это не столь важно). Получается китайцы преуспели не только в части экономии финансовой, но и разумной экономии – не обременяя конструкции своих поделок всяким лишним. Лично я также имел возможность не раз убедиться и воспользоваться возможностями такой непосредственной толерантной совместимости … о чем ни разу не пожалел.

Но в случае с данным «программатором» я поставил себе задачу оптимизации в первую очередь в части реализации именно процесса сборки, чтобы получить как есть в некоторой степени законченное решение зарелизенное автором (а не новую, иную версию). Задача решена успешно – но есть не приятный нюанс.

Бессмысленный и беспощадный преобразователь уровней. Причем бессмысленный в обе стороны! Если мы используем древний картридж – то разумеется питаем его от пяти вольт, но при этом уровни его сигналов, как по входу так и выходу, вполне будут укладываться в диапазон трехвольтового КМОП – даже без всяких заявлений о «толерантности», но в большинстве случаев нам это даже декларируют (как например в случае этого проекта в части примененного микроконтроллера). Подтверждением правильности такого подхода служит пример того, что все однокристаллки выпущенные в 21-веке и имеющие трехвольтовое питание ядра не имеют никаких промежуточных компонентов на сигнальных линиях связи с картриджем.

Верно и в другую сторону: современные китайские новодельные картриджи (причем неважно для Денди или Мегадрайва) имеющие на борту стабилизаторы обеспечивающие трехвольтовое питание, например микросхемам памяти – также не имеют никаких сопрягающих элементов в сигнальных линиях. При этом эти изделия надежно и стабильно работаю в древних приставках. Имел не раз возможность убедиться в этом и на примере собственных конструкций.

В случае с данным дампером засада проявляется в случае, когда фактически требуется «двойное» преобразование уровней: и происходит это, как ни странно, в случае применения дампера по формально прямому назначению – для прошивки кулбоя («только для чтения» ретро-картриджей есть уйма других дамперов). Только вот тут полного двойного преобразования не происходит! Т.к. кулбой рассчитывает на толерантность – а дампер шарашит ему «по-полной»! Если внимательно посмотреть доки на драйверы то в них указано что минимальный выдаваемый ими уровень логической единицы на стороне с «пятивольтовыми уровнями» - это 3.8В! В реале получается даже больше (порядка 4.2В) что превосходит напряжение питания микросхем картриджа даже при питании, максимально допустимым по документации напряжением, в 3.6В (вместо типовых 3.3В) даже чуть более чем на предельные 0.5В! Ситуация с кулбоем же, еще усугубляется и эффектом «паразитного питания» (видимо через ноги маппера SMD133). В итоге у нас (даже когда в цепи питания кулбоя поставлен предусмотренный терхвольтовый стабилизатор) «почти магическим» образом вся трехвольтовая схемотехника кулбоя (все микросхемы памяти) запитаны на 4.2В! Приехали, сушите весла … И это при том что в любой приставке (даже древней) с питанием того же самого кулбоя и стабилизацией (понижением) питания на нем все замечательно – т.е. в соответствии с номиналом примененного стабилизатора (хоть 3.3В, хоть 3.6В). Почему так? А все потому, что «единицы» там адекватные (в диапазоне от 2.5 до 3 вольт) и не превосходящие напряжение питания.

Решение простое – просто выкинуть из дампера лишние, вредные и не безопасные для жизни и здоровья компонентов современных картриджей: преобразователи уровней.

А пока получается что дампер, который как нельзя кстати создан для работы с современными картриджами (ведь для дампинга древних есть куча других, более простых и доступных к повторению конструкций) – фактически противопоказан для работы с ними … Из-за бездумного усложнения конструкции ее автором (ладно я проглядел этот нюанс на бумаге до сборки, но когда судя по инфе, это уже третья редакция … это ПОЗОР!!!). Велико желание модифицировать печатку еще раз - выкинуть лишнее, так сказать а заодно ... есть еще нара мыслей по оптимизациям. Ведь представленная в этой «вилке» версия печатной платы никоим образом не вносит изменений в авторскую схемотехнику, а всего лишь позволяет с меньшими трудами, временными затратами и навыками, а также с использованием (наверняка уже имеющихся в арсенале радиолюбителя касс резисторов и ёмкостей ходовых форм-факторов повторить сей незамысловатый по весьма полезный для ретрогейминга девайс ;-)

Упс 2.

Управляющая софтина к дамперу, последней в настоящий момент времени версии 3.4 (от 2023 года): фактически адекватно работает лишь с кулбоями максимального размера - 32 Мегабайта (MX29GL256). Т.е. с микросхемой у которой размеры секторов одинаковы. На более мелких (4 или 8 Мегабайт) запись «якобы» происходит корректно, а вот верификация - нет! Трабл видимо в том, что хоть софтина по профилю CFI и определяет наличие страниц разного объёма (типа бутблоки верху или внизу) - но при стирании/программировании не учитывает это корректно. Нужно править (а не удивляться «чудесам»).

Упс 3.

RGB-светодиод со встроенным контроллером это наверняка модно и молодёжно. Только вот по номиналу-маркировке указанному на схеме (WS2812D-F8) на алишнике продается вроде как такой же, и на фотке там к товару маркировка даже указана ... Подвох в том, что центральные ноги (питания) в теории и на практике зеркально перепутаны. Хуже того что светодиод не просто мирно выгорает от неправильной полярности питания, он смачно шипит-дымит и через секунду (если не отключить) разлетается в клочья! Травмироваться проще-простого. А потом думать что не так, когда все правильно выбрал и впаял. Или китайцы грешат и выдают одно за другое (но по цифрам и буквам все соответствует), или база в ДипТрейсе кривая ... Вобщем нах этот светодиод. Впрочем как и обычные, к которым ставить номинал резистора нужно минимум раз в 10 больше заявленного - и то светить и раздражать мерцанием будут хуже елочной гирлянды! Тут же - туева хуча шунтирующих питание емкостей - излишня. Стабильности не прибавляет ни на грош!

FamicomDumper-restyle-excess

Впаял, убедился - не повторяйте ошибок и не выполняйте лишний труд (на предыдущей версии кластеровской печатки их не было, оно и правильно, как не было и лишнего слота - жаль не нашел ту версию в исходниках).

Как итог.

Доволен? Вполне, хоть и есть поле для дальнейших легких доработок (по выкидыванию с платы лишнего). Но однозначно, пока нет другой версии - эта лучшая для повторения!

А пока с кулбоя стабилизатор нужно выкидывать вовсе, активируя вместе с этим узел стабилизации внутри микросхемы-маппера SMD133 замыканием тестпоинта FVL – с таким решением овервольт по питанию всего картриджа (паразитным способом через сигнальные ноги) снижается на пару десятых вольта что в сравнении намного лучше.

MiGeRA (июль – сентябрь 2024)