Недавно собрал CoolGirl от Кластера и дампер на atmega64.
Сначала спаял непосредственно дампер/записыватель, и сразу мне не понравилось, что скорость по которой он общается через виртуальный COM-порт равна всего-лишь 250000 бот. Это реально очень медленно для объемов типа 128 Мб - запись такого картриджа будет идти свыше 3-ех часов. Немного полистав даташит на atmega64 решил, что ничего не мешает увеличить скорость до 1 Мбот (1 000 000 бот), кроме как отсутствие внешнего кварца на 16МГц (по умолчанию atmega64 работает от внутреннего на 8 МГц и PLL в ней нет, чтобы удвоить частоту).
Поэтому засверлил с краю платы дампера где нет дорожек две дыры, вырезал ножем квадраты под контактные площадки для кварца и поставил туда кварц на 16 МГц. Проводочками МГТФ кинул кварц к ножкам atmega64. Получилось колхозно, но мне ехать, а не шашечки:
Конечно, после этого нужно поправить бутлоадер - там просто указываем что скорость CPU стала 16МГц, и саму прошивку дампера. Тут я столкнулся с проблемкой, что на такой скорости UART 1 Мбот начались потери пакетов. Немного прикинув, решил что проблема в том, что Кластер обрабатывает приходящие символы прямо в прерывании, там у него comm_proceed() вызывается, которая очень громадная. Короче, слишком долго сидим в прерывании, видимо не успеваем все обработать до прихода следующего символа, и он теряется.
Поэтому переделал по-быстрому работу с UART на FIFO, вынес обработку всех команд из прерываний, и даже исходящую очередь так же реализовал через FIFO, и прерывание как только появляется очередной символ в очереди на отправку. После этого дампер нормально полетел на скорости COM порта 1 мегабот, без сбоев передачи. А, ну и разумеется пришлось поставить Visual Studio коммунити 2019, чтоб пересобрать сам виндовый клиент со скоростью 1 Мбот, там просто одна константа меняется.
Вот, форкнул проект дампера с внесенными в прошивку и бутлоадер изменениями:
https://github.com/Tronix286/famicom-dumper , мало-ли... Но, ваще, конечно надо делать дампер на stm32 без всех этих виртуальных ком-портов и прочих FTDI, будь они трижды кляты. Просто чисто свой дескриптор в stm32, булк трансферы и libusb - залог вменяемой скорости обмена девайс-комп. Что в принципе Кластер и пытается сделать на stm32, но только опять с виртуальным UART'ом. Но, он хотя бы пытается, а мне, диванному эксперту, конечно виднее как ему
его дампер делать, ага. Поэтому не критикую, а просто размышляю. И так как плата была для atmega, и что немаловажно - сама atmega64 у меня тоже валялась лет 7 уже просто так без дела - собрал дампер на ней.
Но если с дампером все ясно и понятно как божий день, и к нему нет никаких претензий после небольших допиливаний, и с atmega64 большего, увы, не выжать, то вот непосредственно с самим картриджом у меня чего-то не заладилось. Точнее как - сначала я пробовал его настраивать и налаживать на старой денди на "рассыпухе", и собрал максимальное кол-во глюков - не запуски игр, зависания, битая графика и тд. А вот попробовав на примерно такой денди "на капле" все заработало идеально:
Единственное, была проблема в некоторых играх типа Felix The Cat, когда верхняя часть экрана рисуется снизу, да к тому же еще и задублирована. Решилось заменой конденсатора на линии PPU_A12 с 22пФ на 220пФ, что бы это не значило.
А плата с которой воюю уже третью неделю вот такая:
И вот с ней как раз есть проблемы. Некоторые игры по прежнему виснут, например, тот же Felix The Cat, некоторые сидят в бесконечном рестарте, например Чип и Дейл 2, некоторые совсем простенькие работают.
Потыкал немного осликом в катридж и разъем дендика, и мне не понравились какие-то иглы на шине данных CPU у клона на корпусных микросхемах. На "капле" такого нет, все сигналы ровные более-менее, а вот у корпусного - прям иголки, всплески какие-то по шине данных CPU, которые пролазят и через шифтеры в 3.3V часть карика и там такие-же. Наверное CPLD от такого расклада не очень хорошо.
Что интересно, с обычным не флеш катриджем у денди на рассыпухе похожие "иглы" по шине, хотя и не такие мощные, но они есть..
Вместо "КРЕНки" запитал всю плату от мощного DC/DC (2А), ну так, на всякий случай. Как говорицца, здоровое питание всему голова. Ну и дальше чуть-чуть снова потыкал в него овцелографом, мало что понятно, но картинки примерно такие: вот те самые "иглы" или "всплески" на шине данных при вставленном картридже CoolGirl, про которые я выше говорил:
А это тоже самое, только с самым обычным старым 5-вольтовым картриджом-каплей (не флеш):
Это вот, например, вторая и третья ножка 74LS373. Желтый вход со стороны PPU, красный выход на карик:
Припаял все блокировочные кондеры, и 0,1мкф, и 0,01мкф, где место было под них на плате. Разумеется, это не дало абсолютно ничего. А вот замена Goldstar 74LS373 на православную К555ИР22 внезапно дало результат - перестали виснуть игры типа Felix The Cat.
Но, так и не победил постоянный рестарт игры Chip and Dale 2, да хуже того, Super Mario блин запускается и виснет на заставке. Но все-таки понял что влияет на их запуск - как это ни странно, но когда держишь щуп осцыла на сигнале CPU_A4 - все прекрасно запускается и работает, и чип и дейл и марио. Как только щуп отпускаешь - все, зависон или глюк. Только CPU_A4, соседние CPU_A5, A6, A7 и другие сигналы никак не реагируют на щуп. Пробовал притянуть CPU_A4 к питанию, к земле - не помогает. Пробовал поставить кондер 30пф на землю - нет запуска вообще. В общем, очень странная глюка, природа этого явления мне не понятна.
А с денди на китайской капле превосходно все работает и в ус не дует.