Есть у меня аналог Спекки — персональный компьютер «Мастер». Он прошел несколько модернизаций, так что сейчас работает от обычного USB и с любым телевизором по SCART.
Но вот с загрузкой программ есть небольшие сложности. Магнитофона у меня уже нет (зато кассеты остались и зачем храню?). Ноут для этих целей разворачивать лениво. Удобного софта для телефонов не нашел, да и по какой-то причине Мастер не воспринимает мой телефон и один из планшетов. Я склоняюсь к тому, что какие-то «улучшалки» звука сигнал портят. В общем, хочется чего-то серьезного. На века. Залить всю библиотеку софта и игр, положить на полочку и не бояться, что лет через 10 это дело протухнет.
На просторах интернета ходит такой проект как TZXDuino, в самых разнообразных вариациях. Но суть у него одна: к ардуинке подключается дисплей, кард-ридер и несколько кнопок, а сигнал выводится с 9-го пина сразу в Спектрум или на простенький усилитель.
Прототип
Вот и я решил сварганить нечто подобное, но с преферансом и куртизанками. В качестве сердца выступает китайский аналог Arduino Nano. Дисплеем будет обычный LCD1602 без I2C модуля. Для карточки использовал MicroSD Card Adapter (на самом деле полный ноунейм) от товарищей из поднебесной. Плюс россыпь резюков и кнопок. Цена всего этого дела не превышает похода в шаурмячную.
Для начала подготовил схему в Easy IDA. Ничего экстраординарного: сверяемся с распиновкой элементов, смотрим кто и какой протокол использует, убеждаемся, что всем всего хватает. Для перестраховки перепроверил по отдельности каждый элемент на макетной плате (той которая без пайки). И начал разводить дорожки.
Пока нет отлаженного софта, решил ограничится макетной платой 8х5 сантиметров. На ней распаять все элементы и проводить тесты. Так как соединяем все проводами, то особого смысла в разводке на два слоя нет. Просто визуальное разграничение пересечений проводов. Ну и элементы постарался расположить так, чтобы не создавать себе лишних проблем при пайке. Результат получился страшненьким, но вполне реализуемым.
На удивление больше всего проблем при пайке создали кнопки. В первый раз я неправильно нарисовал схему. А во второй раз неправильно их распаял. Но ничего не спалил и не взорвал, так что работу можно считать выполненной на отлично. ????
Софт
Первым делом нужно было обновить ядро, так как на свои клоны Nano китайцы ставят старый загрузчик. Я протестировал этот процесс на «чистой» плате, все прошло успешно. Попробовал накатить на ардуинку из прототипа и... ничего не получилось. Домучал ее до такого состояния, что она на всё перестала реагировать.
Оказалось, что пины для подключения программатора (я обвел их оранжевым) дублируются и на основной гребенке. И так получилось, что на этих пинах висела и SD карточка. Пришлось отпаивать контакты обведенные красненьким, прошивать новое ядро и припаивать контакты заново. Урок мне на будущее: все программируемые части макетных плат должны быть в «кроватках», для удобного извлечения и замены.
Я было расстроился, что не смогу работать через программатор (это существенно ускоряет заливку скетчей в ардуинку), но, как оказалось, VSCode тоже не умеет с ним работать (никак баг не починят). Так что по итогу, я не так много и потерял.
Теперь о софте. План был простой и приятный: ищу прошивку, правлю в ней пару моментов под себя, прошиваю и радуюсь жизни. А теперь о том, как все получилось в реальности.
Прошивок для подобных проектов несколько: классический TZXDuino, MAXDuino, ArduiTape, CASDuino и т.п. Вот тут человек посвятил им целый блог:
http://arduitape.blogspot.com/
Я решил остановиться на классическом варианте. Очевидно, что без исправлений не обойдется: у меня четыре кнопки, у них пятикнопочное управление. Но я же у мамы программист, что может пойти не так? ????
Беспокоиться я начал, когда увидел, что об обновлениях ребята пишут на фейсбуке, а скачивать исходники предлагают с mega.nz. А когда открыл архив, передо мной разверзлась настоящая бездна ада и я понял, что застрял всерьез и надолго. Просто для примера, кнопка Stop умеет переходить в родительскую папку (правда, максимальный уровень вложенности равен трем) и выглядит этот код так:
fileName[0]='\0';
prevSubDir[subdir-1][0]='\0';
subdir--;
switch(subdir){
case 1:
//sprintf(fileName,"%s%s",prevSubDir[0],prevSubDir[1]);
sd.chdir(strcat(strcat(fileName,"/"),prevSubDir[0]),true);
break;
case 2:
//sprintf(fileName,"%s%s/%s",prevSubDir[0],prevSubDir[1],prevSubDir[2]);
sd.chdir(strcat(strcat(strcat(strcat(fileName,"/"),prevSubDir[0]),"/"),prevSubDir[1]),true);
break;
case 3:
//sprintf(fileName,"%s%s/%s/%s",prevSubDir[0],prevSubDir[1],prevSubDir[2],prevSubDir[3]);
sd.chdir(strcat(strcat(strcat(strcat(strcat(strcat(fileName,"/"),prevSubDir[0]),"/"),prevSubDir[1]),"/"),prevSubDir[2]),true);
break;
default:
//sprintf(fileName,"%s",prevSubDir[0]);
sd.chdir("/",true);
}
Кстати, пятая кнопка Root была введена именно из-за того, что ранее этого кода не было.
В итоге, я вычистил все, что хардварно не поддерживается: кнопку Root и пару видов дисплеев. Язык программирования у Arduino — это С++, но система сборки своя, избавляющая новичков от некоторых “неприятных” особенностей языка. Я все перевел на нормальный С++, структурировал и разбил код на логические блоки. Переписал всю логику меню, работу с дисплеем, с SD картой и т.п. Обработчик кнопок взял у AlexGyver Technologies, кстати настоятельно рекомендую ознакомиться с его творчеством на YouTube.
На текущий момент, по софту осталась мелочевка. Я решил, что код для работы с форматом TZX исправлять не буду, так как нет ни желания, ни железа, ни тестовых данных, чтобы все нормально написать и протестить. Поэтому, из глобального остались только настройки для проигрывателя и немного рефакторинга/чистки.
Релиз
Плату для финального варианта я начал разводить в KiCad, так как он мне показался удобнее, чем онлайн программа Easy IDA. Что изменилось по сравнению со старой макетной платой? Во-первых, я сделал два выхода: один на компьютер, а другой, опциональный, на спикер. Во-вторых, перешел от PULL DOWN подтяжки кнопок, к PULL UP подтяжке, встроенной в ардуинку. Тем самым избавился от четырех резюков. Ну и в-третьих, изменилась распиновка, хотя это произошло уже в момент разводки дорожек платы.
Скажу честно, несмотря на минимум различий, работа заняла много времени. Причем я в основном боролся с редактором. Ну да не будем жаловаться на бесплатные программы. ????
Так как от лазерно-утюжной технологии решил сразу отказаться и делать заказ у тов. из поднебесной, то плату проектировал двухслойной. На верхнем слое все дорожки для "перегонки данных" — они красного цвета. Нижняя часть отвечает за "питание" — зеленые дорожки +5V, а вся остальная поверхность залита землей.
Модули ардуинки и LCD1602 были в библиотеке KiCad, со всеми размерами, распиновкой и т.п. Модуль механической кнопки пришлось искать на просторах интернета. А вот модулей SD-карточки и 3,5 мм джека я не нашел и пришлось разводить их самостоятельно. Ничего сложного, просто, очень много работы с линейкой.
По мелочам естественно перерабатывал все и не раз. Но глобальных изменений в плате практически не было. Из самого интересного могу отметить разве что «систему питания», да вспомнил про перепрошивку ардуинки и добавил на плату перемычки (MISO, MOSI и SCK).
Итоговый вариант получился таким. И опять, для оценки размеров компонентов пришлось поскрести по сусекам интернетов, а часть замоделить самому. Когда убедился, что все компоненты не мешают друг другу, то распечатал плату на твердой бумаге и натыкал в нее модули.
Все подошло идеально и я отправил заказ в JLCPCB. Размеры моей платы меньше 10х10 сантиметров и она в два слоя. Попал по всем параметрам в их акцию — заказ на 5 штук мне обошелся в джва бакса! Правда, доставка вышла в семь с мелочью, но кто это считает? ???? А через месяц пришла посылка с платками в коммунистической раскраске:
Пайка никаких проблем не доставила, сплошное удовольствие. Отмыл, залил прошивку, вставил флешку, включил и все завелось с первого раза! С одной стороны было очень приятно, а с другой грустновато — все самое интересное закончилось.
Ссылки
Ссылка на «железную» часть проекта для программы KiCad. Если не хотите париться с этим софтом, то в Release'ах репозитория лежит готовый к отправке архив с gerber-файлами. Он точно подходит для JLCPCB, но скорее всего подойдет и для других производителей. Чуть позднее приведу описание репозитория в порядок: дам ссылки на необходимые модули, рекомендации и т.п.
https://github.com/maltsevda/TZXDuino_HFHW
А это ссылка на мою прошивку. Так как заливать ее надо через IDE от Arduino, то поставляется только в виде исходных кодов. Зависимости: TimerOne (версия 1.1.0 или новее) и SdFat (версия 1.1.4, версия 2.Х.Х не поддерживается!).
https://github.com/maltsevda/TZXDuino_HF
Финал
Каких-то доработок в железной части я не планирую. Была мысль прикрутить усилитель, по рекомендациям от официального проекта TZXDuino. Но, ни спикеру/наушникам, ни моему «Мастеру» это оказалось не нужно. Все работает хорошо и без дополнительных костылей.
Ну и пора перетаскивать весь мой запас кассет на флешку. ???? Самая тяжелая часть. Оцифровывать их я, конечно, не буду. Но, даже каталогизация и поиск нужных файлов, чувствую, займет порядочно времени…
На этом все. Надеюсь, что-нибудь из статьи вам будет полезно. И спасибо за внимание!
Комментарии (54)
k12th
26.11.2021 15:35+1Следующий шаг — встроить это все в корпус собственно компьютера. Или питания не хватит?
maltsevda Автор
26.11.2021 16:00+1Места в корпусе не хватит, да и портить я его не хочу. Конечно можно сделать компактное устройство (у меня даже прототип был меньше), но мне очень нравятся эти большие кликающие кнопки и здоровенный дисплей. :) В выключенном виде - это отличная антистресс игрушка.
vesper-bot
26.11.2021 15:45+1Отдельный плюс за вывод на скрипер. Некоторые треки имели любопытно звучащие сегменты.
amarao
26.11.2021 16:20Хардкорная версия должна включать в себя микрофон с усилителем. Тогда его можно будет грузить просто включив на телефоне воспроизведение ZX-трека. Хардкор, фан, шипение и пилот-тоны в наших сердцах!
HardWrMan
26.11.2021 18:10Есть один нюанс: это плеер а не магнитофон. :) А ведь существуют именно магнитофоны.
da-nie
26.11.2021 19:54+4Интересную тенденцию с некоторых пор замечаю: «Я нашёл проект, развёл свою плату (а не ту, что была) и поменял какую-то ерунду. И всё, я сделал устройство.» Но нет ни слова о том, как именно работает это устройство. Эта магия осталась у того, кто сделал оригинальный проект. :)
maltsevda Автор
26.11.2021 20:08-1Магия соединить ардуину, ридер, дисплей и пару кнопок? Хм... Ну а если про софт, то всегда можно сравнить с оригиналом и на сколько изменения пошли ему на пользу или вред.
da-nie
26.11.2021 20:26+6Вы поняли, как генерируется сигнал для ZX? Что там вообще за сигнал? Как сделано чтение с SD-карты, чтобы не происходило задержек? :) Ничего этого нет.
maltsevda Автор
26.11.2021 20:41-4Загляните в исходники, изучите код. И напишите мне, понял ли я как генерируется сигнал, что это вообще за сигнал и как я переписал код для SD карты, чтобы не происходило задержек. И все это будет.
da-nie
26.11.2021 20:56+8Это вы читателям статьи предлагаете проделать? Оригинально. Пусть читатели читают, как вы разводили плату, зашивали загрузчик и прочее подобное, а вот самое главное, как генерировался сигнал, формат файлов и тонкости работы устройства пусть не читают (не сахарные, пусть код автора изначальной прошивки изучают).
maltsevda Автор
26.11.2021 21:07-5Почему вы к себе в множественном числе обращаетесь? :) Оригинально. Все эти действия я предложил сделать вам и только вам.
da-nie
26.11.2021 21:27+2Ну, если вам больше нечего сказать, то да, такой ваш комментарий выглядит уместным.
Sdima1357
27.11.2021 00:03+8Картинки с платками вызывают на Хабре больше интереса чем длинное описание возни со спецификациями форматов. Поэтому действительно красивые проекты с Хабра исчезают вместе с их авторами :(. Остаются светодиодики на ардуине с небольшими вариациями. Так что на общем фоне это ещё достойная статья. Человек хоть что то сделал сам.
ZaitsXL
28.11.2021 10:37+2Автор разобрался в проекте настолько насколько ему это было нужно в рамках его задачи, это не хорошо и не плохо. Станет ли эта статья статьей года? Не станет. Соответствует ли заголовок содержанию? Соответствует. Чего доколупались?
da-nie
28.11.2021 11:43+1Автор в данном случае банальный посредник, не потрудившийся даже познакомить читателей с техническим ядром взятого им не своего устройства, но расписавшим свои приключения на ниве внесения косметических изменений. И именно отсутствие самого главного в статье и вызывает удивление её поверхностностью — читатель ничего действительно интересного не узнает из статьи. Нет ядра. Нет сущности. Нет идеи. Остался лишь фасад.
ZaitsXL
28.11.2021 12:16Это статья-руководство как изготовить конечное устройство на базе существующего проекта. И я не вижу смысла в каждой статье скажем про Ардуино подробно описывать архитектуру оного, если это не связано непосредственно с темой статьи, это ненужная "вода" которая отвлекает от сути
da-nie
28.11.2021 12:42Это статья лишь бы что-то написать с низким техническим уровнем. Потому что вся статья не о том, как изготовить (берём 1, соединяем с 2 и т.д.), а поток сознания, как автор героически преодолевал свои проблемы. Чтобы изготовить такую штуку достаточно взять оригинальный проект и всё.
leonidy85
29.11.2021 00:51Не смог пройти мимо, с ардуино знаком достаточно средненько, не совсем мой профиль, но глядя на фото готового устройства могу с точностью от 80 процентов сказать что там в софте, набор готовых библиотек, точнее драйвер fat, драйвер экрана, простенькая менюшка с парой if и что то типо плеера через встроенный цап.
da-nie
29.11.2021 14:21что то типо плеера через встроенный цап.
В том-то и дело, что нет там плейера с ЦАП. :) Там довольно простая штука, но сделано это должно быть совершенно не так (говорю как автор, наверное, одной из первых, если вообще не первой подобной игрушки года эдак 2012-2013 (я уже сам забыл, когда)). И одной библиотекой fat там не обойдёшься — там требуется обеспечивать чтение без задержек (у меня для резерва повышения скорости до 4x, 16x и так далее, а так же чтобы проще всего написать ПО использовалась микросхема памяти на 64 К).
axe_chita
26.11.2021 20:32Астрологи объявили на Хабре неделю DIY, и это хорошо.
Кстати, а функционал записи программ/данных с компьютера на убер-девайс не планировали сделать?maltsevda Автор
26.11.2021 20:57Нет, в оригинальной версии прошивки такого функционала не было. А мне лезть внутрь TZX формата очень не хочется. Я и саму прошивку изначально не планировал править.
Ну а если понадобится что-то сохранить с ZX, то для такого дела не грех развернуть и ноутбук.
da-nie
26.11.2021 21:01+1А как он сделает? Автор-то исходной прошивки такого не сделал. :)
Но если вам интересно, есть вариант полноценного магнитофона.vitsam
01.12.2021 00:55Пользуюсь этим магнитофоном с МикроПрофессором MPF-II (клон Apple-II) - пишет с компа на карточку и обратно очень надежно.
vvbob
26.11.2021 21:48У меня был магнитофон Союз, там была функция поиска следующей песни, нажимаешь и он ищет следующий фрагмент без записи, после чего включалось проигрывание. Искал в обе стороны. И вот я тогда мечтал по аналогии сделать убердевайс, в котором выбираешь номер программки на кассете, а он бы сам подматывал пленку в нужное место и включал проигрывание. Еще больше мечтал о дисководе, но денег у меня было мало, и купить его в нашем городе было сложно. Впрочем и этот супермагнитофон я не сделал, как-то быстро закончилась школа и началась армия, стало немного не до Спектрума. А когда вернулся, уже были другие игрушки.
А сейчас вот пилят похожие по функционалу устройства, с процессором мощнее чем весь этот Спектрум :)
maltsevda Автор
26.11.2021 22:03+1Я впервые увидел такое устройство на этом канале и очень был удивлен:
А когда Мастер был моим основным компьютером, то даже представить не мог существование такой техники. :)
vvbob
27.11.2021 01:05Круто, прямо то о чем я тогда мечтал! Тоже не слышал даже о таком компьютере, интересная штука!
Хотя, конечно, дисковод все равно был удобнее.
После армии получил доступ к 486-му и тут уж Спектрум как-то совсем перестал привлекать, хотя до сих пор вспоминаю с ностальгией.
tsvetkovpa
26.11.2021 23:03А нельзя ли подпаяться к RAM и грузить код прямо в память, минуя аудио модуляцию?
vvbob
27.11.2021 01:16+3Так смысл то тут не в удобстве, а в теплоте и ламповости.
Если нужно удобство, то проще в эмуляторе играться.
endrx
27.11.2021 15:05Ещё "мягкий" вариант: Андроид приложение, генерирующее нужные звуки по файлам TZX, TAP, ...
alextrof94
28.11.2021 05:59Эммм. Зачем писать комментарий под статьёй, которую не прочитал? Не работают у автора приложухи.
jogick
28.11.2021 00:18Я было расстроился, что не смогу работать через программатор (это существенно ускоряет заливку скетчей в ардуинку), но, как оказалось, VSCode тоже не умеет с ним работать (никак баг не починят). Так что по итогу, я не так много и потерял.
Сам по себе VSCode почти ничего не умеет, но настроить его на программирование Arduino - несложная задача.
Язык программирования у Arduino — это С++, но система сборки своя, избавляющая новичков от некоторых “неприятных” особенностей языка.
По факту там avr-gcc, из особенностей, только свой дополнительный набор библиотек. Makefile, похоже, генерится автоматом, но это не точно. Всё это, при минимальном желании, можно подключить и писать программы хоть vi, хоть в sublime, хоть ещё в чём.
alextrof94
28.11.2021 06:05Думаю, автор работает под плагином PlatformIO IDE (или хуже - arduino IDE), и разбираться, что там как, не будет.
Я и сам под платформио работаю, в миллион раз удобнее, чем под оригинальным блокнотом работать, который они гордо называют Arduino IDE.
alextrof94
28.11.2021 05:46Цена всего этого дела уже полгода точно дороже шаурмы, не надо обманывать.
Да и загрузчик китайцы новый юзают на нанках.
maltsevda Автор
28.11.2021 10:42Да, вы правы. Закупался я года полтора назад, и с учётом текущей ситуации с полупроводниками цены могли неприятно измениться.
MexVitas
28.11.2021 18:27А вместо перемычек (MISO, MOSI и SCK) поставить резисторы 10к не судьба?
Sdima1357
28.11.2021 19:24+1Не надо. Там на адапторе карточки стоит микросхема согласования уровней. Впрочем я бы там одну stm-ку поставил бы вместо ардуины и согласователя уровней . И дисплей другой. И вообще бы весь спектрум на одной STM-ке. Вместе с магнитофоном :)
ChinChilla
30.11.2021 15:10+3Нет, серьезно? Вы сделали плату для впаивания платы?
Но зачем впаивать плату в плату (я имею в виду нано - хоть и нано, но это таки прототипка!) Почему не развелись просто атмегой? Зачем эти куски текстолита на текстолите?...
Ну ладно.... Но, тысяча чертей, где обещанные преферанс и куртизанки???
Tuvic
01.12.2021 15:34А где-то есть оригинальная схема, которая с 5-ю кнопками, что то не могу найти
maltsevda Автор
01.12.2021 15:36Например, в описании репозитория в разделе Wiring:
https://github.com/sadken/TZXDuino
Можно попросить схему у них на FB:
Soorin
Когда мне было нужно грузить программы в "Спектрум", я записал нужные программы в mp3, слил в телефон и пользовался плеером...
maltsevda Автор
У меня Мастер не понимает мой телефон и один из планшетов. Неважно, использую я программу для чтения TZX или воспроизвожу как обычный WAV. Причем другой планшет, который на фотографии выше, работает без проблем. Я отключал все улучшалки звука, эвалайзеры и т.п. Ничего не помогло.
Ну и скажу честно, я не искал простых путей. Просто хотелось попаять. :)
blackdiamondj
А может быть такое, что телефоны/планшеты не хочет понимать по причине их усилков Д-класса с несущей в сигнале на 40кГц или как-то так?
YMA
Теоретически, да. Хотя в моем экземпляре спектрума на входе стоял LC-фильтр, как я понял - режущий всё выше 3 кГц. Из-за этого имел проблемы с "ускоренными" способами загрузки :(
drWhy
Или дело в разделительном конденсаторе, теряющем постоянную составляющую.
iliasam
"я не искал простых путей"
В таком случае можно было бы сделать нечто вроде usb-осциллографа, захватить звук с телефона и компаратора Спектрума, и сравнить данные с тем, что записано в файле.
Таким образом, можно было бы выяснить причину проблемы, и сделать либо промежуточное устройство для коррекции звука, либо написать программу для обработки звука, которая бы меняла бы его так, чтобы на выходе телефона звук был подходящий.
Самый красноглазый путь - скорректировать программу в ПЗУ Спектрума, чтобы она адекватно возпринимала сигнал с телефона)
VelocidadAbsurda
А как быть кастомными загрузчиками?
mistergrim
Я сварщик ненастоящий, маску нашёл. Но, насколько я помню, советские спектрумы очень нервно относились к высокой мощности сигнала (с импортных магнитофонов крайне сложно было их загружать, с выхода на наушники). Так что то, что вы усилитель не прикрутили, возможно, очень правильно.
maltsevda Автор
Да, вполне возможно. Так как для тестирования у меня только одна железка, то и ориентировался я только на нее.
taras-spb
Сейчас уже есть решения, позволяющие вообще не тратить время на загрузку программ на Спектрум. Поищите по слову divmmc - можно самому спаять или купить готовый через известные "барахольные" площадки. Но если цель ностальгировать на полоски на бордюре, или погрузиться в звуки шума и каждый раз на 3-7 минут слушать пилот-тоны и весь этот цифровой поток сознания, то конечно же tzx-druino вам лучший помощник. :)