Когда к спектруму есть возможность подключить дисковод — это несомненно круто! У одной из моих Дельт есть возможность подключить контроллер дисковода (вторая не принимает контроллер), дисководы 3,5 дюйма работают на ура. С 5ти дюймовыми дисководами какой то затык, оба моих дисковода не работают с тем контроллером, что у меня есть (это копия оригинального контроллера, который производился специально для Дельта-С). Один дисковод Teac, вообще никак не работает (вроде всё по инструкции делал), второй — это Электроника МС5311, вроде работает, откликается на команды, но перед работой нужно было форматнуть дискеты, так вот форматирование шло около получаса. В общем очень долго работает с дискетой (может дискеты такие плохие или неподходящие, хотя использовал ГМД-130 и на ПЦ они работают норм).
Что бы записывать дискеты для ZX есть хорошая программа ZXStudio, позволяет записывать не только готовые образы TRD, но и формировать эти образы самостоятельно. Единственная проблема — данной программе требуется натуральный дисковод для записи, USB дисковод не подойдёт, а так как на моём компе нет разъема для дисковода, то для записи дискет пришлось достать старенький комп с WIN XP. Не совсем удобно, но если хочется аутентичности, то другого пути нет.
Что бы упростить загрузку программ в спектрум, решил поискать эмуляторы FDD. Эмуляторы есть на разных платформах и даже нашёлся на Arduino, его то и решил сделать, как самый простой, да и посмотрев схему понял, что все комплектующие у меня есть в наличии!. Этот проект от EvgenRU, вот ссылка на тему zx-pk.ru, а так же ссылка на Github, где можно скачать файлы для прошивки. Данный эмулятор работает только с файлами образов TRD и только в режиме чтения, запись в образ не предусмотрена, но это расплата за простоту (если кому нужен полный функционал, то ищите эмулятор Gotek). Ниже опишу этапы своей сборки эмулятора от EvgenRU.
Итак, для сборки эмулятора потребуется Arduino, можно UNO, можно NANO. Например для тестовой сборки я использовал UNO, а для окончательной NANO. Собирал по приведённой ниже схеме автора:
Только изначально у меня вместо SD модуля был обычный переходник для MicroSD и для его подключения использовал следующую схему:
Вот так это выглядело на этапе тестирования:
А так выглядит тестовая сборка схемы эмулятора на макетке, пока без подключенного шлейфа FDD, проверяю вывод файлов на экран:
Выглядит страшновато, но всё работает. Теперь настала очередь шлейфа и проба загрузки в компьютер. И вот на этом этапе произошел сбой. Эмулятор вроде бы принимает команды с компьютера, но ничего в компьютер не отдаёт, выдаёт ошибку:
Проверил схему, норм. Менял местами диски А: В:, результата нет. Достал осциллограф и решил посмотреть, есть ли что нибудь на 30м пине (с него идет передача данных). И тут происходит чудо, при подключенном осциллографе дисковод ожил, и довольно шустро всё прочитал! Измерил параметры осциллографа (у меня китайский Fnirsi 1C15) и получилось следующее: сопротивление — 1 МОм, ёмкость 10 нФ. Сначала повесил на 30й пин сопротивление, результата нет. Потом поставил конденсатор и всё стало работать. Если честно, так и не понял в чём проблема, то ли в контроллере дисковода, то ли в применяемом аналоге ВГ93, то ли в чём ещё, но факт в том, что без этого конденсатора у меня не работает!
Что ж, эмулятор вроде заработал, настала пора собрать всё как положено. Не стал заниматься разводкой, травлением либо заказом у китайцев, а просто собрал, как и программатор, на макетке 5х7 см.
Сначала использовал большой LCD экран, а переходник для карты памяти поставил гнездом вбок. Потом отказался от LCD в пользу OLED дисплея, благо на 45 странице обсуждения эмулятора пользователь «djspawn» прикрутил такой дисплей. Короче немного переделал свой эмуль, добавил OLED, а переходник SD попытался выпаять и поставить прямо. Но при выпаивании, переходник развалился и восстановлению больше не подлежал. Пришлось порыться в своих запасах и найти слот для SD карт от неисправного ноутбука. Так же изначально для интерфейсного шлейфа использовал 2 ряда обычных PLS пинов, но решил переделать на разъём от дисковода, причём спаренный с разъёмом питания. Вот что получилось:
Еще к эмулятору прикрутил светодиод активности, как у обычного дисковода. Дело в том, что если использовать LCD дисплей, то эту роль выполняет светодиод подсветки этого дисплея. У OLED нет подсветки, а переделать код для гашения дисплея и зажигания при активности у меня не получилось. Алгоритм здесь такой: пока не выбран образ подсветка горит постоянно, после выбора образа подсветка гаснет, при активации дисковода (передача данных) она зажигается и гаснет при неактивности. При выходе из образа загорается и светится, пока не будет выбран следующий образ. У OLED дисплея есть спец команды для отключения и включения дисплея, и они срабатывали у меня при заходе и выходе из образа. А вот при активности дисковода экран не зажигался.. Так же пытался управлять яркостью по вышеприведённому алгоритму, но OLED меняет яркость настолько незначительно, что эффекта никого нет. По итогу экран оставил светиться постоянно (но яркость снизил до минимума), а активность сделал на зажигании светодиода. Теперь это выглядит как натуральный дисковод)). Я как бы заморочился и задействовал последний оставшийся 9й пин Ардуины на этот светодиод, хотя наверно можно было просто припаяться к пину MOTOR ON, но я об этом подумал уже потом и не стал экспериментировать.
Что ж, эмулятор собран, проверен в работе, немного доработан (я имею ввиду светодиод ))) и решил я проверить его в паре с обычным дисководом, то есть считать с эмулятора и записать на дискету. Но, опять проблема. Так как на эмуляторе, на 30 пине, висит конденсатор, то обычный дисковод с таким не согласился и читать дискеты отказался. Убираю конденсатор, дисковод работает, эмулятор нет. Бррр, непорядок. Стал подбирать другой конденсатор, меньшей ёмкости и с конденсатором на 47 пФ всё заработало. Но эмулятор с таким конденсатором читал оочень медленно, по нескольку раз перечитывая один и тот же сектор. В общем, решения этой проблемы пока не нашел, так и пользуюсь. Поставил на плату перемычку для переключения конденсаторов, больше ничего не придумал.
Так же сделал корпус для этого эмулятора, рисовал в Tinkercad, печатал на 3D принтере. Не особо какой, но всё лучше, чем вообще без корпуса.
Да, ещё важное замечание. На фото видно (если приглядеться), что на экране 5 строк для вывода файлов. Изначально в коде у EvgenRU поддержка только 2х строк (для LCD 1602). Я, как ничего не понимающий в программировании Ардуино, не смог с этим справиться, но мне помог Evgeny Ugryumov, в моём телеграмм канале он поделился своим кодом в котором можно настроить любое количество строк. Только у Евгения микроконтроллер не Ардуино, а его клон - LGT8F, но адаптировать код для Ардуино было не сложно. В общем, применил его код к своему эмулятору - работает. Дополнительно сделал поддержку для OLED дисплеев 128х32, а так же добавил настройку для разворота экрана на 180 градусов. Что ж, на этом всё.
Так же смотрите видео обзор данного эмулятора:
Благодарность EvgenRu за эмулятор, Evgeniy Ugryumov за код на расширение строк, и всем кто дочитал эту статью до конца))
Скачать обновленную прошивку для Ардуино можно скачать на моём сайте:
Читайте продолжение по теме эмулятора в следующих статьях: