Эмулятор FDD ZX Spectrum по проекту EvgenRU

Когда к «Спектруму» есть возможность подключить дисковод — это, несомненно, круто! У одной из моих Дельт есть возможность подключить контроллер дисковода (вторая не принимает контроллер), дисководы 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, и для его подключения использовал следующую схему:

Схема подключения SD карты к ардуиноВот так это выглядело на этапе тестирования:

SD карта припаяна проводамиА так выглядит тестовая сборка схемы эмулятора на макетке, пока без подключенного шлейфа FDD, проверяю вывод файлов на экран:

Схема на макетке. Тест SD карты

Выглядит страшновато, но всё работает. Теперь настала очередь шлейфа и проба загрузки в компьютер. И вот на этом этапе произошел сбой. Эмулятор вроде бы принимает команды с компьютера, но ничего в компьютер не отдаёт, выдаёт ошибку:

Ошибка чтения

Проверил схему, норм. Менял местами диски А: и В:, результата нет. Достал осциллограф и решил посмотреть, есть ли что-нибудь на 30-м пине (с него идет передача данных). И тут происходит чудо, при подключенном осциллографе дисковод ожил и довольно шустро всё прочитал! Измерил параметры осциллографа (у меня китайский Fnirsi 1C15), и получилось следующее: сопротивление — 1 МОм, ёмкость — 10 нФ. Сначала повесил на 30-й пин сопротивление, результата нет. Потом поставил конденсатор, и всё стало работать. Если честно, так и не понял, в чём проблема, то ли в контроллере дисковода, то ли в применяемом аналоге ВГ93, то ли в чём ещё, но факт в том, что без этого конденсатора у меня не работает!

Конденсатор на 30м пине шлейфа

Что ж, эмулятор вроде заработал, настала пора собрать всё как положено. Не стал заниматься разводкой, травлением либо заказом у китайцев, а просто собрал, как и программатор, на макетке 5х7 см.

Сначала использовал большой LCD-экран, а переходник для карты памяти поставил гнездом вбок. Потом отказался от LCD в пользу OLED-дисплея, благо на 45-й странице обсуждения эмулятора пользователь «djspawn» прикрутил такой дисплей. Короче, немного переделал свой эмуль, добавил OLED, а переходник SD попытался выпаять и поставить прямо. Но при выпаивании переходник развалился и восстановлению больше не подлежал. Пришлось порыться в своих запасах и найти слот для SD-карт от неисправного ноутбука. Также изначально для интерфейсного шлейфа использовал 2 ряда обычных PLS-пинов, но решил переделать на разъём от дисковода, причём спаренный с разъёмом питания. Вот что получилось:

Переделано на OLED дисплей

Еще к эмулятору прикрутил светодиод активности, как у обычного дисковода. Дело в том, что если использовать LCD-дисплей, то эту роль выполняет светодиод подсветки этого дисплея. У OLED нет подсветки, а переделать код для гашения дисплея и зажигания при активности у меня не получилось. Алгоритм здесь такой: пока не выбран образ, подсветка горит постоянно, после выбора образа подсветка гаснет, при активации дисковода (передача данных) она зажигается и гаснет при неактивности. При выходе из образа загорается и светится, пока не будет выбран следующий образ. У OLED-дисплея есть спецкоманды для отключения и включения дисплея, и они срабатывали у меня при заходе и выходе из образа. А вот при активности дисковода экран не зажигался… Также пытался управлять яркостью по вышеприведённому алгоритму, но OLED меняет яркость настолько незначительно, что эффекта никакого нет. По итогу экран оставил светиться постоянно (но яркость снизил до минимума), а активность сделана на зажигании светодиода. Теперь это выглядит как натуральный дисковод)). Я как бы заморочился и задействовал последний оставшийся 9-й пин Ардуины на этот светодиод, хотя, наверно, можно было просто припаяться к пину MOTOR ON, но я об этом подумал уже потом и не стал экспериментировать.

Что ж, эмулятор собран, проверен в работе, немного доработан (я имею в виду светодиод ))) и решил я проверить его в паре с обычным дисководом, то есть считать с эмулятора и записать на дискету. Но опять проблема. Так как на эмуляторе на 30-м пине висит конденсатор, то обычный дисковод с таким не согласился и читать дискеты отказался. Убираю конденсатор, дисковод работает, эмулятор нет. Бррр, непорядок. Стал подбирать другой конденсатор, меньшей ёмкости, и с конденсатором на 47 пФ всё заработало. Но эмулятор с таким конденсатором читал о-очень медленно, по нескольку раз перечитывая один и тот же сектор. В общем, решения этой проблемы пока не нашел, так и пользуюсь. Поставил на плату перемычку для переключения конденсаторов, больше ничего не придумал.

Также сделал корпус для этого эмулятора, рисовал в Tinkercad, печатал на 3D-принтере. Не особо какой, но всё лучше, чем вообще без корпуса.

Собранный эмулятор в корпусе

Да, ещё важное замечание. На фото видно (если приглядеться), что на экране 5 строк для вывода файлов. Изначально в коде у EvgenRU поддержка только 2-х строк (для LCD 1602). Я, как ничего не понимающий в программировании Ардуино, не смог с этим справиться, но мне помог Evgeny Ugryumov, в моём телеграм-канале он поделился своим кодом, в котором можно настроить любое количество строк. Только у Евгения микроконтроллер не Ардуино, а его клон — LGT8F, но адаптировать код для Ардуино было несложно. В общем, применил его код к своему эмулятору — работает. Дополнительно сделал поддержку для OLED-дисплеев 128х32, а также добавил настройку для разворота экрана на 180 градусов. Что ж, на этом всё.

Код и файлы для печати корпуса:

ZX_FDD_Emulator_2.zip (обновлено 10.03.24)
ZX_FDD_Emulator(stl_files).zip

Так же смотрите видео обзор данного эмулятора:


Благодарность EvgenRu за эмулятор, Evgeniy Ugryumov за код на расширение строк, и всем кто дочитал эту статью до конца))


Продолжение с избавлением от конденсатора читайте в статье:

Эмулятор ZX-FDD. Дополнение.


Один комментарий к “Эмулятор FDD ZX Spectrum по проекту EvgenRU”

  1. Уведомление: 3D модель OLED 1.3 дисплея для KiCad > Rahost Studio

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *