Магнитофон для ZX Spectrum. Софт
Продолжу свой рассказ о разработке магнитофона для моего персонального компьютера «Мастер», советского клона ZX Spectrum 48К. Для тех кто пропустил, вот ссылка на первую часть:
Мне пришел программатор и теперь я могу перепрошивать Arduino Nano, поэтому отговорок для откладывания работы у меня не осталось. Кстати, шел он ко мне долго, в два захода и, наверное, пешком. Почта РФ, как всегда, на высоте…
Первым делом нужно было обновить ядро, так как на свои клоны Nano китайцы ставят старый загрузчик. Протестировал на «чистой» плате, все прошло успешно. Попробовал накатить на ардуинку из магнитофона и... ничего не получилось. Домучал ее до такого состояния, что она на всё перестала реагировать. Кстати напомню как выглядит «магнитофон»:
Оказалось, что пины для подключения программатора (я обвел их оранжевым) дублируются и на основной гребенке. И так получилось, что на этих пинах висела и SD карточка. Пришлось отпаивать контакты обведенные красненьким, прошивать новое ядро и припаивать контакты заново. Урок мне на будущее: все программируемые части макетных плат должны быть в «кроватках», для удобного извлечения и замены.
Я было расстроился, что не смогу работать через программатор (это существенно ускоряет заливку скетчей в ардуинку), но, как оказалось, vscode тоже не умеет с ним работать (никак баг не починят). Так что по итогу, я не так много и потерял.
Для отладки пришлось спаять еще пару приблуд. Первая для человеков, а вторая для "Мастера". Вот и пригодились бесплатные затычки из Сапсана.
Теперь о софте. План был простой и приятный: ищу прошивку, правлю в ней пару моментов под себя, прошиваю и радуюсь жизни. А теперь о том, как все получилось в реальности.
Прошивок для подобных проектов несколько: классический TZXDuino, MAXDuino, ArduiTape, CASDuino и т.п. Вот тут человек посвятил им целый блог:
Я решил остановиться на классическом варианте. Очевидно, что без исправлений не обойдется: у меня четыре кнопки, у них пятикнопочное управление. Но я же у мамы программист, что может пойти не так? 😁
Беспокоиться я начал, когда увидел, что об обновлениях ребята пишут на фейсбуке, а скачивать исходники предлагают с mega.nz. А когда открыл архив, передо мной разверзлась настоящая бездна ада. Человеческое сознание не могло породить такого хаоса и ужаса. И я понял, что застрял всерьез и надолго.
Просто для примера: в проекте TZXDuino есть пятая кнопка, называемая Root. Более того, в ранних версиях в каждой папке должен был лежать пустой файл ROOT. Зачем? Очевидно, для перехода в корневую папку. Почему? Потому что они не смогли написать код для перехода в родительскую папку! Справедливости ради, в последних версиях кнопка Stop умеет переходить в родительскую папку (правда, максимальный уровень вложенности равен трем) и выглядит этот код так:
Мое чувство прекрасного не позволит такому работать с моим Cпекки и пришлось работать по настоящему. Я вычистил все, что я хардварно не поддерживаю: кнопку Root и пару видов дисплеев. Язык программирования у Arduino — это С++, но система сборки своя. Из-за этого можно использовать необъявленные переменные и т.п. Я все перевел на нормальный С++, структурировал и разбил код на логические блоки. Переписал всю логику меню, работу с дисплеем, с SD картой и т.п. За обработчик кнопок спасибо AlexGyver Technologies, кстати настоятельно рекомендую ознакомиться с его творчеством на YouTube.
В итоге, без изменений остался только код, отвечающий за чтение и воспроизведение файла. Над ним работает несколько команд и, пока, я не хочу его глобально переделывать. Свою версию TZXDuino, названную «TZXDuino с человеческим лицом», я разместил тут:
Она все еще в стадии интенсивной разработки, но результат мне уже нравится. Лицензия будет MIT’овской, так что пользуйтесь и изменяйте ее как хотите. Позднее я добавлю в репозиторий и хардварную документацию.
Что в планах на будущее? Финальный вариант плеера. Во-первых хочу белый экранчик, он выглядит аутентичнее и поддерживает русский язык. Во-вторых, думаю заказать себе коричневые свитчи Gateron. Блок из четырех таких кнопок займет на плате примерно 8х2 см, но я готов к таким тратам. И я все еще в поиске keycaps’ов для них, никак не могу найти с отпечатанными значками плеера.
Недавно мне пришли модули для SD карт, они стали гораздо меньше. Еще я обзавелся новой ардуинкой с Type-C разъемом, она уже прошита и ждет своего часа. И, конечно, когда определюсь и получу все компоненты, разведу и закажу финальный вариант платы, скорее всего у JLC PCB. С цветом платы, правда, не определился…
Спасибо за внимание!