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

ZXDOS+: BIOS и прошивка новых «ядер»

ZXDOS+: вид сзади
ZXDOS+: вид сзади

В предыдущей части мы кратко ознакомились для чего нужно устройство типа ZXDOS+ и поняли, что в чистом виде после покупки оно представляет из себя ZX Spectrum 48 с возможностью писать программы на BASIC, загружать и сохранять данные с помощью аудиовыхода (например, подключая его к магнитофону, чтобы грузить оригинальные кассеты с играми для ZX Spectrum). Но этого явно недостаточно, чтобы оправдать цену в 130 евро: проще было бы на барахолке купить любой из отечественных аналогов-раритетов, доживших до наших дней (от 2 до 5 тысяч рублей в зависимости от состояния).

Данное же устройство обладает гораздо большими возможностями, чем это можно было бы подумать, и способно полноценно «эмулировать» не только ZX Spectrum (причём с добавочными возможностями), но и другие 8-битные ПК. Кавычки здесь не просто так, а потому что как таковой эмуляции (т.е. когда на одной аппаратной платформе запускают программы другой аппаратной платформы) нет. Потому что «внутре у неё неонка», а точнее FPGA (ПЛИС), т.е. перепрограммируемый чип, который с нужной прошивкой обретает все черты оригинальной платы и, по сути, ничем от неё (с точки зрения схемотехники) не отличается (всякие там нюансы конкретных реализации и токи утечки опустим, как незначительную величину). То есть то, ради чего раньше приходилось разводить и паять отдельную плату, теперь можно просто заменить программной реализацией схемы, закачав потом её в кристалл FPGA. Ну и понятно, что записать можно туда не одну-единственную схему, а множество, лишь бы железо выдержало. Поэтому и ZXDOS+ можно использовать не только как ZX Spectrum, но и как Amstrad CPC, MSX, Nindendo NES и всякое другое… Лишь бы были созданы специальные прошивки для этих устройств. Ну и, по умолчанию, ZXDOS+ идёт сразу с несколькими этими «ядрами» (cores): ZX Spectrum, ZX Spectrum Next, MSX, Amstrad CPC, Acorn Atom. При этом другие ядра можно тоже скачать с сайта и установить.

Кстати, тем, кто утверждает что данный продукт слишком дорогой и гораздо дешевле заказать плату Xilinx SPARTAN-6 в Китае, добавить комплектуху, всё это спаять, закачать туда через Raspberry Pi нужную прошивку и наслаждаться тем же самым, но в два раза дешевле… я могу сказать, что лично они молодцы, но у меня такой вариант не вызывает интереса. Потому что тут надо хотя бы быть знакомым с паяльником, да ещё и иметь Raspberry Pi на руках (у специалистов-то она есть, наверное, но откуда она у обычного человека?). Точно такая же штука с отечественным проектом ZX Evolution — ну не готов я заказывать отдельную собранную плату, морочится с её монтажом в некий корпус, подключением, прошивкой… и при всём при том с крайне скудной информацией обо всё об этом. Путь энтузиаста и всё такое.

А вот в ZXDOS+ для удобства управления им и его прошивки, как и в серьёзных системах, есть BIOS.

BIOS

Вызывается он по кнопке F2 при загрузке и выглядит вполне традиционно:

-2

Если экран ничего не отображает или пишет, что режим не поддерживается, нажимаем на клавиатуре Scroll Lock для переключения видеорежима с композитного на VGA. Это можно прочитать в мануале где-то на 18 странице :) Так что без чтения инструкций тут не обойдёшься. А поскольку инструкция достаточно краткая, да ещё и на английском языке, а в интернете информации крайне мало (да ещё, в основном, на испанском), я буду описывать то, что я считаю необходимым для использования данного прибора. Совсем явные вещи (или что практически не влияет на результат) я не буду затрагивать, но постараюсь довести до вас информацию о том, как получить от этого устройства максимум на данный момент.

Поэтому на данном экране единственное на что стоит обратить внимание — это пункт «Timing». В нём можно выбрать настройки отечественного клона ZX Spectrum — Pentagon (Пентагон). Это может пригодиться для некоторых игр, разработанных в России и для многих демок (программ для демонстрации возможностей графики Спектрума). Мне лично тема демосцены с разработкой этих самых демок не близка ни разу, игры интереснее. Но я столкнулся в том же «Чёрном вороне» с помехами на экране, которые после выбора таймингов Пентагона пропали, так что это может быть полезным (Auto, видимо, не всегда помогает, а может рассчитано на выбор Pentagon ROM).

-3

На втором экране пользователь может выбрать нужный ROM (кусок памяти, необходимый оригинальному Спектруму или его клону для работы). Тут представлены и разные варианты Спектрума и отдельные игры, которые стартуют сразу после запуска. На мой взгляд, польза от этих игр сомнительна, чисто посмотреть: вряд ли кто будет постоянно загружать одну и ту же игру и только в неё играть. Из вариантов же ZX Spectrum фактически полезен только первый — Rooted ZX Spectrum 48, поскольку именно для него разрешено использование DivMMC и настроено срабатывание прерывания NMI для загрузки меню ESXDOS (об этом будет дальше).

В этом меню можно ещё поменять местами эти ROMы, переименовать их и удалить, но закачать новый нельзя. На самом-то деле можно, но этого в BIOS не предусмотрено и для этого необходима отдельная программа под Windows под названием ZX-UNO RomPack Tool (которую можно взять по этому адресу):

-4

Сами отдельные ROMы можно найти в репозитории GitHub данного проекта, в папке modflash\roms (полный список с описанием тут). Используя вышеприведённую программу можно открыть исходный файл-сборник (размер 1052737 байт), добавить туда разных скачанных файлов ROM, задать для них нужные параметры и сохранить итоговый ROMPack (с названием ROMS.ZX1). А вот чтобы закачать его в устройство потребуется записать его в корень SD-карты, загрузить рутованый Спектрум с зажатой клавишей / и потом воспользоваться специальной dot-командой («командой с точкой» ESXDOS) в BASIC: .romsupgr — которая должна прошить этот список в устройство. Но для этого нам нужно иметь установленный ESXDOS на ту же SD-карту. Также можно и выгрузить из устройства в файл ROMS.ZX1 с помощью команды .romsback (рекомендовал бы сразу это сделать, чтобы можно было вернуть всё назад).

Я всё это попробовал, всё работает, но и смысла особого я в этом не вижу. Добавлять в прошивку отдельные отлаженные для такого способа загрузки игры — а для чего? Добавлять в прошивку какие-то специфические версии ZX Spectrum (испанские, например)? Опять же не вижу смысла, да и не все из них будут работать с ESXDOS, а некоторые у меня вообще не загружались. Ну и налажать можно теоретически, залив в устройство такой список, который не содержит хотя бы одного ROM с поддержкой ESXDOS — откатиться обратно тогда уже не получится.

-5

А вот эта страница уже поинтереснее. Во-первых, тут можно проапгрейдить версию этого самого BIOS с помощью опции Upgrade BIOS from ZX (почему ZX, а не SD?) Сам файл, содержащий прошивку находится тоже в репозитории GitHub в каталоге по ссылке. Название у файла FIRMWARE, расширение ZXD. Скачав этот файл (сначала щёлкнув по нему, а на новой странице уже по кнопке Download) и положив его в корень вашей SD-карты, можно запустить процесс обновления (тут самое главное — надёжность питания). На купленном устройстве момент написания статьи была доступна версия 0.82, при покупке же была 0.78. Ещё в каталоге лежит какой-то FIRMWARE_vertical.ZXD с описанием «Actualizo firmware verticales y jamma.rom«, но что это такое и чем отличается — понять я не смог, а экспериментировать было как-то стрёмно: не хотелось вдруг получить кирпич.

Вот такие вот проблемы могут возникнуть при покупке устройств у разных мелких производителей, тем более за рубежом. И информации с гулькин… нос и спросить особо не у кого. Я, конечно, попытался зарегистрироваться на испаноязычном форуме, который указан у них в мануале, и даже пробился через вопрос (в стиле, а понимает ли желающий что-нибудь вообще в FPGA: спрашивают либо про Xilinx, либо про Altera), но ссылка на подтверждение почты так и не пришла, а при входе пишут про не активированный аккаунт… Вот так-то.

Во-вторых, на этой странице можно восстановить сразу всю флэш-память устройства, использовав для этого функцию «Upgrade flash from SD«: для этого надо разместить на SD-карте файл FLASH.ZXD из архива, скачанного с GitHub и выбрать эту функцию. Это позволит вернуть все настройки устройства в изначальное состояние.

В-третьих, тут можно обновить ROM для esxDOS. Изначально, устройство идёт с версией 0.8.6, а последняя версия выложенная на официальном сайте — 0.8.8. И чтобы обновить версию на ZXDOS+ надо взять файл ESXMMC.BIN из поставки esxDOS, переименовать его в ESXDOS.ZXD, поместить его в корень SD-карты и запустить обновление. Как я понял (и проверил), если версия прошитая в ZXDOS+ и файлы esxDOS на SD-карте расходятся, то ничего работать не будет. Про установку esxDOS на SD-карту мы поговорим в следующей части, когда пойдёт речь про использование стандартного ядра ZX Spectrum.

И, в-четвёртых, самое интересное — установка новых «ядер» (CORE) в ZXDOS+. Как в начале уже было упомянуто, в данное устройство можно «загрузить» не одну конкретную электронную плату, а любую, которую данное железо способно воспринять. Поэтому и использовать это устройство можно и не только как ZX Spectrum (хотя оно именно для этого и заточено), но и как другие платформы. По умолчанию уже установлено ядро Amstrad CPC, MSX1 и Acorn Atom, но можно установить и любые другие, разработанные для ZXDOS+. Разработчик выкладывает готовые ядра в свой репозиторий GitHub в папку zxdos/cores. Но вот, к сожалению, поскольку устройство достаточно свежее (а в моём случае — ещё и на плате FPGA LX25 и для моего устройства подходят только файлы с расширением ZXD, размером 802816 байт), поэтому выбора-то фактически пока и нет. Есть только NES, Amstrad CPC и ZX Spectrum Next. А вот посмотрите, какое разнообразие есть для ZXUno: и Commodore, и Atari, и Apple 2, и даже PC XT. Но оно всё с расширением ZX1: размер 344064 байта. Или вот для ZXDOS+ на плате FPGA LX16, но оно тоже с неподходящим расширением ZX2 и размером 475136 байт. И BIOS при попытке добавить подобное ядро начинает ругаться про неверный размер файла (и это хорошо, кстати, нельзя прошить что-то явно нерабочее). Поэтому остаётся ждать, когда появятся новые доступные ядра.

Для добавления ядра надо определиться с позицией в списке (справа указан номер) и нужный файл переименовать в вид CORENN…..ZXD, где NN — это обязательно двузначный номер (если одна цифра — то добиваем впереди нулём), а после номера может идти всё что угодно. Например, на скриншоте выше, чтобы добавить новое ядро, файл должен называться CORE09.ZXD. Если же надо перепрошить уже имеющееся ядро (любым другим), то надо указать тот номер, под которым оно в списке. И, например, для перепрошивки Amstrad CPC файл будет называться CORE05.ZXD. А после успешной прошивки, BIOS вас спросит — с каким названием будет это ядро в списке (все символы не влезающие в экран всё равно будут обрезаны, так что длинные названия не нужны).

-6

На следующем окне мы можем только выбрать — с какого ядра будет стартовать устройство. По умолчанию, установлен ZX Spectrum и он будет использовать тот ROM, который выбран на странице ROMs.

-7

И опять очень интересный экран, который требует подробного рассмотрения. Keyb Layout (раскладка клавиатуры) — по умолчанию будет испанский вариант клавиатуры, но нам (из-за стандартной раскладки клавиатур поставляемых в Россию) лучше выбрать English, чтобы не путаться в размещении точек, запятых и прочих символов:

-8

Joy Keypad и Joy DB9 — тут надо выбирать, что вам будет удобно в играх, особенно если вы будете использовать оба джойстика. Можно выбрать любые варианты: Kempston, Sinclair Joystick 1, Sinclair Joystick 2, Protek, Fuller или даже симулировать клавиши Q,A,O,P,Space,M (любимая всеми спектрумистами раскладка, позволяющая играть на клавиатуре обеими руками — мыши-то тогда ещё не было!).

Пункт Video — достаточно противоречивый. Для мониторов и телевизоров с VGA-входом явно подходит именно вариант VGA, а варианты PAL и NTSC нужны в случае ZXDOS+ (у нас всё равно только один выход — VGA) только при выводе через переходник на телевизор. Поскольку я не заказывал дополнительные переходники для вывода композитного сигнала, то и протестировать на телевизоре толком не смог. Единственное, что удалось проверить, что при выводе через PAL на монитор выдается вертикальная частота 50 Hz, а при NTSC — 60 Hz (и это логично), разрешение экрана — 1440×288 (для 25″ монитора форматом 16:10).

Scanlines — чисто для фанатов (чересполосное изображение).

Frequency — вертикальная частота развёртки. Кстати, очень важный пункт, поскольку не все мониторы поддерживают частоту в 50 Hz. Да и вообще, чем частота выше — тем, по идее, лучше для глаз. Доступные частоты: 50, 51, 53.5, 55.8, 57.4, 59.5, 61.8, 63.8. Работают эти частоты только в BIOS и для ядра ZX Spectrum (для других ядер, частота прописана в них самих). Я специально проверил на двух мониторах: современном (Iiyama, 25″, 16:10, 1920×1200) и устаревшем (Benq, 17″, 4:3, 1280×1024), получилась следующая картина:

-9

Разрешения отличаются только для 50 и 51 Гц (и при этом выезжают за границы мониторов). Для остальных частот — разрешение 800 на 600, вертикальные частоты на обоих мониторах одинаковые, горизонтальная развёртка тоже повышается с 31 до 38 по мере увеличения вертикальной. Поскольку разрешение 800 на 600 не родное для обоих мониторов, то границы букв и полос местами выглядят неровными («ущербными»), но, в принципе, выглядит приемлемо.

CPU Speed — тут можно задать частоту процессора Z80. Работает, понятное дело, только для ядра ZX Spectrum. 1X — это стандартные 3,5 МГц, далее 2X, 4X и 8X соответственно ускоряют в несколько раз работу Спектрума (до целых 27 MHz!). Однако, выбирать больше чем 1X можно только в том случае, если игра умеет отслеживать установленную частоту и свои тайминги подгоняет под неё (и благодаря этому работает более плавно, в том случае, если производительности 3,5 МГц для неё было в обрез), а иначе вы получите просто ускоренную в два, четыре или восемь раз игру, играть в которую будет невозможно. Минус в том, что для смены скорости процессора придётся каждый раз заходит в BIOS, хотя это и не долго.

А вот что такое и для чего нужен Csync и Color Burst — я не понял. Разницы между значениями заметить на глаз не смог (видимо, надо сразу два устройства и два идентичных монитора).

-10

Ну и собственно всё. Сохраняем настройки и выходим. Однако, и тут есть нюанс. Девайс с установленными настройками загрузится только после его перезапуска. То есть, если вы что-то поменяли, нажали «Save Changes & Exit» — да, оно запишется в BIOS, но после выхода из BIOS будет действовать будет предыдущая настройка, с которой мы в этот BIOS заходили. Так что придётся выключить и включить всё заново. Сейчас-то я уже привык, но поначалу здорово сбивало с толку.

В следующей части перейдём непосредственно к ядру ZX Spectrum и работе с esxDOS.

P.S. Я, конечно, сомневаюсь, что в Дзене много поклонников ZX Spectrum, но всё-таки если понравилось - ставьте палец вверх, ну а не понравилось - ставьте палец вниз и пишите в комментарии, что именно. Если возникнут вопросы - тоже пишите в комментарии, обязательно постараюсь ответить. Ну и подписывайтесь, если эта тема вам интересна.