Найти тему
Дюк Юсупов

«Дельта-С» и divMMC: запускаем игры с SD-карты на отечественном клоне ZX Spectrum

После подключения отечественного клона ZX Spectrum под названием "Дельта-С" (вариант на 48 Кб с 52 микросхемами) ко всему чему только можно (в том числе и к дисководу), мою голову стала занимать уже следующая идея - получить возможность загружать игры с карты памяти через интерфейс divIDE или divMMC с esxDOS (если кому интересно - можете почитать про историю esxDOS). Конечно, по сравнению с загрузкой с ленты, возможность запускать программы с дисковода - это уже очень приятно (хотя нужно покупать дискеты, записывать их и т.п.), но вот загружать игры с карты памяти, на которой можно сложить всю библиотеку игр для ZX Spectrum - это ещё лучше и удобнее.

Тем более, что после изготовления переходника с системного разъема Дельта-С на стандартный спектрумовский ZX BUS ничто уже казалось бы не преграждает путь к реализации данной идеи. Достаточно просто купить один из вариантов divMMC, которые вовсю продаются на том же Авито, воткнуть его в переходник и наслаждаться. Однако, как всегда, гладко было только на бумаге. Проблемы вылезали упорно и последовательно и буквально по всем фронтам...

Началось, как и планировалось, с покупки. Долго искал по интернету сведения о том, кто и какие устройства подключал и работает ли оно вообще. Смог найти только пару мутных фоток с уверением, что якобы работает. Но понять, что именно и как - было невозможно. На форуме ZX-PK.ru набрёл на несколько тем, посвященных подключению подобных устройств к российским клонам Спектрума, но и из них мало что вынес для себя полезного. Опять же - типа возможно, но могут быть проблемы, надо для каждого конкретного клона проверять. Поэтому всё пришлось проверять самому и за свой счёт.

Устройства продающиеся в Европе (например, тут) - сразу отпали, купить их с этими санкциями стало если не невозможно, но, как минимум, заметно дороже. Переплачивать два ценника не хотелось. Пришлось рыскать на локальных ресурсах, типа Авито и прочих барахолок. Сначала нашёл и купил вариант на чипе Xilinx (у него кроме поддержки SD-карт есть ещё Kempston-джойстик). И вот он заработал на ZX Spectrum +2... и не заработал на Дельте-С. В момент запуска вообще не виделась SD-карта. Хотя продавец об этом заранее предупреждал - респект таким людям.

Да, на плате есть выбор режима CLOCK (непонятно какая логика тут заложена, на плате кварца-то вроде нет, то есть не с чего брать частоту), но она у меня он работал только в одном положении для ZX Spectrum +2 и не работала ни в одном для Дельты... Также на плате есть переключалка режимов для перепрошивки - и оно мне, кстати, пригодилось: видимо, микросхема памяти тут попалась не очень и после долгого не использования она как-то портилась, но зато хотя бы прошивка тут быстрая - через магнитофонный вход Спектрума загружается файл ESXMMC.TAP из поставки esxDOS. Несмотря на то, что эта плата для Дельты-С не подошла, я всё-таки оставил её для ZX Spectrum +2 - она, кроме esxDOS, добавляла ещё Kempston-джойстик.

Пришлось искать другой вариант - и я купил уже вариант на чипе Altera:

Ну и тоже самое - на ZX Spectrum +2 оно работало, а на Дельте-С нет. Но тут продавец решил помочь и начал предлагать разные варианты решения проблемы, за что ему огромное спасибо - без него бы просто ничего не получилось бы.

Сначала он обратил внимание на то, что его divMMC нужен сигнал CLOCK для нормальной работы с картами памяти. А этого сигнала на разъеме расширения Дельты просто не было предусмотрено и на переходник для ZX BUS он был, естественно, не выведен. Но откуда я бы его не брал (процессор, линия H1 и все прочие) ничего не получалось. Я даже пробовал его пропускать через микросхему ЛН1, но результата это не приносило. Я даже попробовал кварцевый генератор на 4 МГц, как рекомендовали на форуме. Однако, с другим блоком питания (взял импульсный, который выдавал больше 5,5В вместо 5,0В у штатного) ситуация немного улучшилась: esxDOS стал иногда загружаться!

Дальше, правда, начались опять приключения. Во-первых, кнопка NMI никак не хотела вызывать меню esxDOS. Во-вторых, попытки что-то изобразить с помощью dot-команд esxDOS приводили чаще к сбросу или ошибке, нежели чем к положительному результату. Вот пример загрузки esxDOS, отображения каталога карточки и зависание:

Даже если удавалось что-то смонтировать dot-командами (TAP-файл, например, или TRD), то загрузка всё равно прерывалась с ошибкой. Стало понятно, что что-то в БПК упорно мешает и активно вмешивается в работу divMMC. Но вот что? Тут я вспомнил, что мне при подключении дисковода к Дельте-С активно "гадил" Kempston-джойстик - будь он неладен (и кому он только нравится при наличии двух Sinclair-джойстиков с теми же 4 направлениями и огнём?). Но для дисковода я отрезал резистором линию IORQ от процессора и подавал туда сигнал от контроллера дисковода, а тут-то что делать? Я перебрал все сигналы, которые выходят с divMMC вовне, пытаясь реализовать такой же фокус, как с контроллером дисковода, но, как говорится, "фигвам" - национальное индейское жилище.

На этом месте я расстроился и внезапно для себя прикупил Дельту-С на 75 микросхемах: во-первых, было интересно познакомится с оригинальной клавиатурой и схемой, а, во-вторых, я знал что в этой схеме Кемпстон не реализован и было интересно попробовать divMMC на этом варианте Спектрума.

И вы знаете что? Да, мне пришлось добавить один единственный проводок с 6 ноги процессора (CLOCK) на внешнюю шину (как я уже говорил - на внешнем разъеме нет этого сигнала по умолчанию), но оно сразу заработало без каких-либо проблем:

Кстати, первый купленный мною вариант divMMC на Xilinx тут всё равно не заработал - видимо там какая-то конкретная завязка под фирменные ZX Spectrum и их тайминги и параметры сигналов.

Тут я всё-таки допёр, что источником всех проблем был таки Кемпстон. Поэтому я полез "курить" схему подключения Кемпстона в Дельте-С, но и так и не смог разобраться - а как там вообще реализована дешифрация портов. В итоге у меня сложилось впечатление, что никакой дешифрации там вообще нет, а работает всё это каким-то чудом через селекторы КП11 (то клавиатуру пропуская, то джойстик). Дешифрация Кемпстона по идее должна быть через линию A0, но вот куда это всё запихнуть - я так и не понял. В результате мне подсказал решение продавец divMMC для "отрезания" этого самого Kempston'а:

А потом в телеграмм-канале подсказали, что нужен ещё туда же добавить сигнал A5 через диоды - и тогда заработает и Кемпстон (так и получилось). В итоге я убрал то, что нагенерил по отрезанию IORQ и сделал по этому варианту:

И divMMC стал нормально загружать esxDOS и монтировать файлы через dot-команды. А вот кнопка NMI так и не заработала. Хорошо, что я нашел dot-программу .browse - она позволяла выходить в меню esxDOS также как при нажатии кнопки NMI на устройстве.

Схема получилась простая и дешевая - всего на паре диодов и одном резисторе. Однако, опять встал вопрос о подключении дисковода - старую-то схему я убрал и надо было думать как заставить работать дисковод. Проблему опять решил диод - я его присоединил к тем, которые шли на A0 и A5. Вроде дисковод заработал, правда не всегда. Подумав, допаял ещё пару мелких резисторов к диодам на A0 и A5 - теперь сигнал от них гарантировано перебивался сигналом с дисковода и всё заработало отлично. Даже пропала мелкая недоделка - в первом варианте отрезания IORQ при сбросе с переходом в TR-DOS оставался чёрным бордюр, а теперь он стал, как положено, белым. Лепота, в общем, окромя засады с кнопкой NMI.

Однако, это было не всё. Случайно натолкнулся на видео, а затем и на сайт Константина Айги CXEMATEKA.RU. Шикарная статья "ZX Spectrum «Ленинград 48к» - сборка, наладка, увеличение памяти, доработки, схемы, видео" содержала схемы доработок такого клона ZX Spectrum как Ленинград. В одной из них я увидел доработку как раз в части дешифрации портов:

Оценив схему Дельты-С я понял, что первая часть, касающиеся сигнала IOWR - она не нужна: на схеме всё это уже есть:

А вот вторая часть, про IORD, она актуальна. Напаяв дополнительную микросхему вторым этажом и выпаяв ту, с которой уходит сигнал IORD на селекторы клавиатуры, я получил работающий вариант - divMMC заработал сразу. Конечно, в отличие от предыдущей схемы эта требует целой микросхемы (свободные контакты ЛЛ1 можно найти на плате Дельты-С), но даёт более логичную и корректную работу, чем те "костыли", которые я городил до этого.

 Верхняя часть платы
Верхняя часть платы
 Нижняя часть платы
Нижняя часть платы

А для дисковода сигнал его работоспособности направил на внешний вход IOUT.

И дисковод тоже заработал.

Однако, по-прежнему не работала кнопка NMI на divMMC. Да, в меню esxDOS можно войти с помощью dot-команды .browse, но вот во время игры выйти в него и снять снэпшот - уже не получится. Т.е. дисковод-то заменили, но расширенный функционал сохранений/загрузок не получили. Обидно. Я, наверное, пару месяцев убил в попытках поиска причины такого поведения, но так и не смог победить. Симптомы были похожие на неработоспособность divMMC до доработки дешифрации портов, т.е. часто нажатие NMI вообще не приводило ни к каким результатам, иногда был сброс, но были случаи когда я входил в меню esxDOS и даже мог там что-то сохранить, но результат был битым. То есть явно проблемы схожие, но вот как их порешать я так и не понял. Пытаться полностью "выгрызти" Кемпстон из платы и убрать вообще селекторы КП11 я не стал. В итоге, так и сижу с возможностью читать через esxDOS что угодно, но записать вот не могу. Надеюсь, что те, кто это прочитает - подскажет мне какие-нибудь идеи, которые можно попробовать.

В следующей части про Дельта-С02 я расскажу о том, как добавить к нему музыкальный сопроцессор AY и расширить его память до 128 Кб (и получить, наконец-то, полноценный Спектрум).