Пока я ковырялся с темой реальных дисководов и дискет, а потом решал проблемы с купленным ZX Spectrum +2 (как-нибудь опишу), как-то я упустил момент выхода (17 мая 2021) финальной версии новой прошивки для ZXDOS+, хотя канал (@zxdosfpga) в Telegram я регулярно просматриваю (хоть он и на испанском) и был в курсе её разработки. Но тут я всё-таки её опробовал и продолжу серию статей про это устройство.
Эта прошивка не то чтобы представляет из себя что-то особенное, но в ней сведены воедино все последние доработанные ядра и ROM'ы ZX Spectrum. Теоретически их можно было бы и самостоятельно свести воедино с помощью утилиты zx123_tool, но она, во-первых, требует чёткого понимания, что вы делаете :-), а, во-вторых, чтобы получить нужные ядра - надо ещё побегать. Причина проста - репозиторий проекта ZXDOS+ представляет из себя полную мешанину данных и понять, что из этого работает и как именно работает - затруднительно. Информация вся перемешана по разным веткам и каталогам в них, так что разобраться можно только после пол-литра. Часть ядер вообще надо выискивать где-то на сторонних ресурсах, то есть в папке основного репозитория cores найти ядро IBM XT не получается, хотя где ему ещё бы быть?
Да и сама новая прошивка выложена в папке zxdos/zxuno/tree/master/SD, что отнюдь не добавляет простоты, тем более что "старая" прошивка никуда не делась и лежит совсем в другом месте репозитория: zxdos/zxdos-plus/tree/master/lx25, что выглядит более логичным и куда владелец девайса-то и пойдёт (да и мануал туда же отправит).
Выложены два варианта прошивки: FLASH.ZXD и FLASH_32.ZXD. Первая (размером в 16 Мб) прошивается, как и предыдущая версия через "BIOS", с помощью пункта "Upgrade flash from SD":
После прошивки (длительная операция) и перезагрузки мы получим следующие предустановленные ядра (плюс ядро собственно Спектрума):
Как говориться - всё на экране. Сразу видно, что BIOS версии 0.84, т.е. последний на данный момент (хотя его тоже можно отдельно обновить - он периодически обновляется по этому адресу).
Добавлены ядра Commodore 64, PC XT, Phoenix, Pong, Atari 2600, Camputer Lynx, ColecoVision, Videopac, Chip-8. Кроме PC XT всё это, по сути, либо 8-битные игровые приставки или отдельные игры. И добавлены дополнительные ядра ZX Spectrum: два от Kyp (48 Кб и 128 Кб версии), и одно ядро с поддержкой устройства I2S, которое можно воткнуть в порт расширения ZXDOS+ и которое позволяет выводить через него цифровой звук. Про остальные ядра я ещё постараюсь ещё написать в будущем, хотя интерес, пожалуй, тут представляет только ядро PC XT (надо бы попробовать в нём эмулятор ZX Spectrum от Лунтера, который на современных ПК уже не запускается).
Прошивка, кроме ядер содержит в себе ещё кучу разных ROM для ядра ZX Spectrum, что позволяет оценить тот "зоопарк" моделей, которые существовали в то время:
Всего для варианта прошивки в 16 Мб размером влезло 23 ROM. Тут и разные версии фирменных ZX Spectrum на разных языках, наш "православный" Пентагон 128, американские Timex 2048 и 2068, эмуляторы ZX80 и ZX81, плюс ещё пара игр. Опять же, понятно, что всё это можно добавить и самому, но тут уже поработали за нас, что приятно. Причём, приятно вдвойне, поскольку параметры для некоторых ROM приходилось подбирать опытным путём (если они не указаны в мануале) и это занимало кучу времени (создать файл, записать на карту, карту в устройство, прошить новый список ROM, запустить и понять, что не работает...).
Второй же вариант прошивки (размеров в 32 Мб) содержит те же ядра, что и обычная прошивка, зато обладает увеличенным количеством ROM'ов:
Всего 32. Стало ещё больше добавленных встроенных игр для Спектрума, несколько отдельных Бейсиков, ещё два эмулятора Z82 и Z85. Кроме 32 Кб версии Derby+ добавлена ещё и её 64 Кб версия Derby++. Также добавлено ядро Cargando Leches, позволяющее грузить магнитофонные варианты приложений в 15-20 раз быстрее. В общем, добавлены практически все интересные варианты. Когда я перебирал весь возможный список остановился на тех же самых. Так что опять за нас проделали всю работу, что не может не радовать.
Вот только для обновления этой прошивкой BIOS нам не помощник, на данный файл (если его переобозвать FLASH.ZXD) он будет ругаться. Обновление можно выполнить только через root'ованое ядро ZX Spectrum (или запущенное в режиме root) с помощью DOT-команды .UPGRZXD. Но сначала надо эту программу установить на SD-карту: взять её отсюда и положить в папку BIN на SD-карте. После этого всё проходит как по маслу.
Я быстренько пробежал все доступные ядра и часть ROM. Как ни странно (irony mode on), почти всё работает. А вот дальше начались нюансы:
1) Так и не заработало ядро NES (но никто и не обещал). Serg_ZP tank_uk (разработчик клона ZX Spectrum Next под названием Buryak Next) сделал его модификацию под мой вариант памяти (на моей версии ZXDOS+ установлено 4 Мб одним чипом). Этот вариант у меня уже загружал образы ROM-файлов от NES и они загружались и работали, но, к сожалению, управление в них не функционировало: не то что джойстик, но даже START и SELECT, которые по идее в меню нажимались обычной клавиатурой. Но если кто-то захочет протестировать — оставлю этот вариант ядра тут.
2) Ядра ZX Spectrum от Kyp вынесены отдельно и это очень хорошо что они не используют привязку к стандартному ядру, но заточены они исключительно под esxDOS 0.8.8. А уже вышел 0.8.9 со встроенной поддержкой образов дискет в формате SCL и который уже, собственно, и встроен в эту прошивку. Соответственно, если на SD-карте выполнить обновление esxDOS до новой версии эти ядра перестают работать вообще (а если не сделать - то встроенное ядро ZX Spectrum перестанет загружать esxDOS). Чтобы отключить для них DivMMC придётся пересобирать прошивку. Или, как вариант, иметь отдельную флешку с развернутым туда esxDOS 0.8.8.
А последние ядра, которые я брал в репозитории Github их автора (zx48, zx128) у меня почему-то вообще не запускались — черный экран и всё, и никакие попытки сменить видеовыход или частоты не меняли ситуацию. Потом я вспомнил, что в Telegram-канале ZXDOS FPGA Kyp показывал новое ядро (объединенное 48 и 128), где esxDOS уже версии 0.8.9 + поддержка i2s, MIDI, VGA. Но в репозитории на Github я не нашел собранного релиза для этого ядра и поэтому выкладываю скачанное из Telegram.
3) И ещё сразу после выхода прошивки начали выходить обновленные ядра с поддержкой MD-джойстика - придётся обновлять их вручную. А неплохо было бы вести общую прошивку и апдейтить её по мере выхода ядер. Я, конечно, обновил, попробовал, но разницы не заметил - у меня и до этого они неплохо работали. Долго читал их Telegram, уже начал понимать испанский, но всё равно не понял как это можно проверить. Опять минус в карму разработчикам за информирование.
4) Уже через некоторое время выяснил, что у меня перестало работать ядро MSX. Оно загружалось, но драйвер NEXTOR при старте писал про нехватку памяти:
Скорее всего, что у меня в устройстве распаяна специфическая память DDR3, из-за которой и ядро NES не работает. Мои подозрения подтвердил Serg_ZP tank_uk (разработчик клона ZX Spectrum Next под названием Buryak Next) и предложил протестировать доработанное ядро MSX 1.4.
Оно нормально запустилось и драйвер NEXTOR заработал, но в нём отсутствовала поддержка джойстиков. И я не понял, что собственно в этом ядре стало лучше, кроме исправления бага с файлами раскладки клавиатуры (по этому поводу я как раз писал в статье про ядро MSX1). После старта мне сразу выдало ошибку и пришлось менять эти файлы на корректные, ссылки на которые есть в мануале.
В итоге я решил откатиться на нормально работающее ядро MSX1. Вопрос был только в том, откуда его взять, ибо прошивку на устройстве я уже обновил, а в репозитории старое ядро то ли отсутствовало изначально, либо его удалили. Пришлось воспользоваться отличной утилитой zx123_tool, с помощью которой можно экспортировать ядра и ROM из прошивок для ZXDOS+. Для запуска утилиты потребуется Python 3, на котором она и написана. В Windows запуск производится с помощью команды py -3 zx123_tool.py, ну а в Linux я запускал с помощью команды python3 "./ZX123 Tool.py". Это позволит работать с файлом прошивки в окне GUI:
Можно обойтись и командной строкой, но в GUI всё наглядно и понятно. Можно и сам файл прошивки дорабатывать — меняя там ядра, банки ROM и их параметры, но меня это пока не интересовало. Зато я с лёгкостью выдернул ядро MSX1 из старого файла прошивки.
Ну и после заливки этого старого ядра я конечно вижу:
Что говорит о том, что я опять забыл подсунуть другой файл раскладки клавиатуры. Ну это дело поправимое и всё дальше загружается нормально:
Вывод
В целом, спасибо разработчикам за работу, а комьюнити за тестирование. Эта прошивка сбережёт кучу времени, нервов и «окирпиченных» девайсов. Ну а если надо что-то допилить — то с помощью утилиты zx123_tool это можно очень просто сделать.
P.S. Если понравилось - ставьте палец вверх, ну а не понравилось - ставьте палец вниз и пишите в комментарии, что именно. Если возникнут вопросы - тоже пишите в комментарии, обязательно постараюсь ответить. Ну и подписывайтесь, если эта тема вам интересна.