Да, ivagor сделал это! Теперь на Специалисте есть Exolon - скачать
Монохромная версия:
![]()
4-х цветная версия:
![]()
4-х цветная версия, запущенная на 8-ми цветном компьютере:
![]()
8-ми цветная версия:
![]()
16-ти цветная версия для ПК Специалист-MX:
![]()
Рассказ о процессе адаптации автора версии игры для Вектор-06Ц, которая легла в основу версии для ПК Специалист.
А вот с чего всё начиналось:
Посмотрите на эти скриншоты, снятые из эмулятора ПК Специалист Emu80 (ищите exolon.rks во вложении):
![]()
Нравится? Вот и мне тоже! А теперь чуть подробнее.
Специалист (в варианте ЛИК) был моим первым компьютером. Я и до сих пор бережно храню его. Недавно отдав дань памяти, я написал эмулятор Специалиста на языке Python. Но это лишь подстегнуло ещё больший интерес к платформе, вытащив наружу из памяти мои старые идеи. Когда я был владельцем только лишь Специалиста, я с завистью поглядывал на такие хиты ZX Spectrum’а, как Batty и Exolon. Совершенно не разбираясь в программировании, тогда мне казалось, что такие игры попросту не реальны на Специалисте. В итоге приходилось довольствоваться тем, что было. А было совсем не много, да и качество этого оставляло желать лучшего. Но спустя годы, стало понятно, что даже на Специалисте можно было воплотить многое из того, выходило на ZX Spectrum. Проблема была в том, что попросту некому было всё это писать.
Вообще, до сих пор моей заветной мечтой является возможность поиграть в Batty на Специалисте. Но наработок в этой области вообще нет. Видимо, не так много людей испытывают такие же чувства к этой игре. Зато с Exolon’ом всё в порядке. Благодаря благословению автора и упорству esl у нас имеются полные исходные тексты игры, готовые к портированию куда угодно. Помимо собственно наличия исходников Exolon’а, к портированию игры на Специалист предрасполагают следующие факторы:
- Игра не использует прерывания
- Игра не использует процедур ПЗУ
- Код написан так, что портирование на другую платформу не вызывает проблем. Автор в своё время переносил Exolon на Amstrad CPC и это заняло у него всего несколько дней вместе с рисованием новой графики.
Как я себе представляю этапы переноса Exolon’а на Специалист с учётом современных средств разработки:
- Переписываем процедуры вывода графики, опроса клавиатуры и вывода звука под Специалист. При этом отлаживаем всё под эмулятором Специалиста с процессором Z80.
- Избавляемся от специфических инструкций Z80, заменяя такие инструкции конструкциями, состоящими из инструкций Intel 8080, либо полностью переписывая процедуры.
Мне кажется, что серьёзных проблем возникнуть не должно. Возможно, может не хватить быстродействия. Однако порт Exolon’а для ПК Вектор-06Ц говорит о том, что КР580ВМ80А, работающий на частоте 2 MHz, вполне способен переварить это дело.
На моём Специалисте была лишь однобитная чёрно-белая графика и мне приходилось лишь облизываться на статьи в Моделисте-Конструкторе, где описывался контроллер цветности, вначале 4-х цветный, а потом 8-ми цветный. Поэтому я подумал, что Exolon на Специалисте вполне мог бы быть чёрно-белым. Но потом мне стало любопытно, а что же там с цветами на Специалисте? Для этого я решил написать загрузчик Спектрумовских картинок в Специалист. Но, во-первых, у меня не было средств разработки под Специалист. А, во-вторых, мнемоники i8080 мне сейчас уже почти ни о чём не говорят. Собственно, долго думать не пришлось. В качестве компилятора я задействовал привычный мне кросс-ассемблер Z80 SjASMPlus и настроил всё так, чтобы после компиляции я получал готовый к загрузке в эмулятор Специалиста файл c расширением RKS. Конечно, приходится быть предельно внимательным и чётко понимать какие инструкции есть у i8080, а каких нет. Так, можно совершенно машинально вместо JP LABEL написать JR LABEL, а потом долго искать почему правильно написанная программа благополучно скомпилировалась, но не работает на эмуляторе.
Спектрумовские картинки на экране Специалиста впечатлили. Несмотря на серьёзные ограничения в цветах и метод их отображения, многие картинки со Спектрума выглядят практически так же. Судите сами:
![]()
![]()
Даже чётырёх-цветная графика выглядит неплохо!
С графикой поэксперементировал. Дальше решил попробовать звук, а вместе с ним и адаптацию кода Z80 к i8080. Для экспериментов я выбрал sound_beeper_music.asm из пакета исходников Exolon.
И вот тут у меня случился затык. Я уткнулся в нехватку регистров, команд и быстродействия. В итоге мне всё-таки удалось заставить Специалист хоть как-то воспроизводить мелодию из Exolon’а, но происходит это ооооочень медленно. Чтобы услышать мелодию так, как она звучит на Спектруме, нужно включить в эмуляторе Специалиста режим максимальной скорости:
Это происходит, во-первых, из-за того, что сам процессор Специалиста работает почти вдвое медленнее Z80. А, во-вторых, я конвертировал процедуру, что называется «в лоб» с ужасно тормозной конструкцией заменяющей команду EX AF,AF’. Чтобы всё зазвучало как нужно, требуется переписать плеер с чистого листа. А то, что i8080 способен потянуть эту мелодию подтверждает порт Exolon’а на Вектор-06Ц (см. видео). Да, там мелодия играет чуть медленнее, но при этом она играет почти как же, как в оригинале.
Написание такого плеера может явиться интересной задачей для скучающих спектрумовских кодеров. Процедура проигрывания довольно короткая, но при этом очень критичная ко времени исполнения. Задача вполне себе тянет на, так любимый многими, этюд. К тому же всё написано в привычной для спектрумистов мнемонике Z80.
Всё необходимое для решения задачи (компилятор, настроенные файлы и исходники) приложено к этому сообщению. Вам остаётся лишь скачать и распаковать это, запустить exolon.bat и получить на выходе exolon.rks, который можно загрузить в эмулятор Специалиста. А самую свежую версию эмулятора Специалиста можно взять здесь.
Ещё на всякий случай упомяну, как формируется звук на Специалисте. Чтобы динамик зазвучал, необходимо с определённой частотой чередовать запись чисел #0A и #0B в ячейку по адресу #FF03 (на самом деле в любую ячейку по маске #F803). Вообще, за вывод звука отвечает только один нулевой бит, но системный загрузчик для вывода звука засылает в порт не #00 и #01, а именно #0A и #0B. Я не стал разбираться с чем это связано.
В приложении к этому сообщению вы найдёте демку exolon.rks, которая выводит две картинки из игры Exolon и воспроизводит две «мелодии» оттуда же. Смена картинки вместе мелодией осуществляется нажатием на любую кнопку.
Ну а для тех, кому интересно покопаться внутри, я прилагаю исходный текст с компилятором - exolon_src.zip. Не судите строго мой код - там оптимизировать и оптимизировать. Но зато всё работает так, как было задумано.
P.S. Заменил exolon.rks во вложении на вариант с плеером от ivagor - там музыка играет почти как в оригинале.