Много статей за два с лишним года я уже написал за про то, что представляет из себя такая штука как ZXDOS+ и даже небольшое обзорное видео заснял. А вот столкнуться с необходимостью восстановления этого устройства с помощью программатора пришлось впервые. Причём буквально недавно меня в комментариях спросили про то, как восстановить из состояния "кирпича" это устройство, а я толком и подсказать не мог, потому что знаю теоретически что такое возможно, а вот сам лично не пробовал. Ну не было случая проверить, а пытаться угробить своё устройство, чтоб попробовать - ну такое себе решение.
Для прошивки ZXDOS+ в целом, а также для обновления его по частям (esxDOS, ядро ZX Spectrum, ядра других систем), есть вполне себе удобный режим в стиле BIOS для обычных ПК (а также и набор дополнительных команд esxDOS). Кроме того, для подготовки готовых прошивок из разных версий ядер существует удобный инструмент с GUI: ZX123 Tool (вот мануал). То есть сделано всё по максимуму, чтобы обычный пользователь даже не вспоминал, что для перепрограммирования FPGA-чипа нужен какой-то программатор и подключение его к плате устройства. Но, как говорится, shit happens и всё-таки хорошо, что в случае невозможности зайти в BIOS есть способ воскресить "кирпичик". Правда для этого понадобится программатор, драйвер для него, специально подготовленный провод и программа для доступа к хладному тельцу.
И вот внезапно мне всё это понадобилось потому, что после очередного обновления официальной прошивки я попытался заново залить нужный мне вариант ядра TS-Config, но он почему-то упорно не желал работать, хотя только что всё было нормально. И я решил залить прошивку заново и снова попробовать на чистую. И вот прошивка обновлена, надпись "Successfully burned" - нажимаю кнопку и экран покрывается какими-то "левыми" символами. Пытаюсь выключить и включить - горит только один светодиод на плате, экран не включается, на клавиши не реагирует... Хочешь, не хочешь, а надо включать режим "принудительного запуска".
На плате ZXDOS+ есть контакты для подключения программатора, они, правда, под верхней крышкой, но снять её дело 1 минуты:
Но чтобы подключиться к этому разъему нам нужен программатор, работающий по этому протоколу. И очень хорошо, что тут не надо какого-то супер-пупер агрегата со специфической программой: достаточно такого широко известного в узких кругах устройства как USB Blaster. Есть, конечно, фирменные программаторы, которые стоят прилично, но есть и китайские реплики. Как говорится, где брал я - там уже нет, но купить такую штуку на Aliexpress - раз плюнуть. Я брал вообще за 180 рублей, но тут как раз тот случай, когда даже повышение цены в 2 раза не разорит.
Устройство внешне тоже простое как 5 копеек - одной стороной втыкаем в ПК USB-кабель, а с другой стороны - соединяем с разъемом на плате устройства, которое собираемся прошивать. Одна только заминочка - кабель который идёт в комплекта отличается своим разъемом от разъема на ZXDOS+. В мануале этот вопрос рассмотрен и даже указано соответствие между стандартным присоединением (как на ZXUNO) и для ZXDOS+:
Но тут тоже не всё так просто - надо еще сообразить как подключается провод к USB Blaster и как переворачиваются контакты в противоположной его части. Дальше надо собрать переходник, чтобы подсоединится к 6-пиновой гребенке. У меня получилось вот такая штука:
Причём в мануале весьма грозно указано: "DO NOT connect the 3V linе", т.е. провод не должен быть подключен к пину 3V3. Ну и я так сначала и делал - и красный провод изначально не соединялся с разъемом.
Но вот дальше у меня начались приключения. Я пошел по инструкции в мануале в разделе "Recovery using Windows and USB-Blaster cable":
- Скачал официальную прошивку (уже устарела, но для гарантии), скопировал из её архива файл FLASH.ZXD в корень SD-карты.
- Скачал драйвер для USB Blaster, установил его (правый клик по файлу расширением INF и "Установить").
- Скачал программу JTAG, распаковал её, в тот же каталог положил файл recovery.zxd.bit из архива с прошивкой.
- Подключил USB Blaster к ПК и к ZXDOS+.
- Включил ZXDOS+.
- Запустил программу JTAG (не требуются права администратора) и попытался подключится к ZXDOS+ с помощью команд:
cable usbblaster
detect
pld load recovery.zxd.bit
Но если первая команда отработала ожидаемо, то вторая выдала нечто не то, на что я рассчитывал:
И вот тут я встрял. Сначала я подумал, что где-то налажал с подключением контактов и перепутал их. Перепроверил все возможные варианты - ничего. Начал уже прикидывать варианты с нерабочим USB Blaster'ом (и зачем я его купил так дешево!) и с совсем умершим ZXDOS+... Но беглое гугление привело меня на форум, в котором обсуждали как раз подключение к ZXUNO и подобную ошибку (тут на испанском, но с переводчиком всё понятно). И на 4 странице как раз и натыкаюсь на вывод, что не все USB Blaster'а одинаковые и чипы в них могут быть разные. И что USB Blaster'у на чипе LC244A зачем-то нужен всё-таки провод на 3 вольта. А у меня как раз такой чип (вот он над кварцем справа):
Ну и соединив теперь уже все 6 пинов с программатором я получил нужный результат - команда detect отработала как надо, а команда pld load recovery.zxd.bit успешно передала данные на устройство:
Устройство запустилось, правда пришлось ещё нажать клавишу Scroll Lock, чтобы монитор смог отобразить картинку с BIOS ZXDOS+. Ну и отключаем провод USB Blaster'а от пинов и запускаем процесс прошивки, в конце которого нас должна ждать вожделенная надпись "Successfully burned":
Перезагружаюсь - и опять ничего не мигает и не работает. Несколько раз пробовал закатывать разной свежести прошивки - никакого эффекта. Тут уж я начал подумывать по поводу сдохшей микросхемы флэш-памяти в ZXDOS+ и прикидывать - это вообще можно починить и как? Даже в телеграмм-канале ZXDOS FPGA начал интересоваться: что же это такое могло бы быть. Как вдруг решил в последний раз попробовать перепрошиться, но уже с другой SD-карты, потому что если устройство вроде бы работает, файл прошивки изначально нормальный, прошивка обновляется успешно, тогда остаётся только это звено проверить. И вот, вуаля, всё заработало! Ну надо же - проблема оказалась в SD-карте, причём на ПК я это не смог никак определить - там SD-карта безукоризненно читается и пишется. Поэтому и обновление ядра TS-config не срабатывало, так как с другой SD-карты оно встало как влитое и заработало без всяких дополнительных телодвижений.
Как оказалось, процесс восстановления (раскирпичивания) ZXDOS+ весьма простой. Но это когда уже всё попробовал сам, проверил и нашёл неточности в мануале и догадался про возможные проблемы с SD-картой. Тяжела и неказиста жизнь простого программиста...