Благодарю, что зашли к нам на огонёк,
Black Cat. Желаю вашему проекту успехов. Давно пора привести всё это наследие в порядок. Грустно только, что разработка для ZX становится занятием всё более раритетным, как ретрогейминг.
Я не согласен, что виной отсутствие на Спектруме среды. Ранее тоже можно было объединиться вокруг TR-DOS или асм-кодинга в целом. И искать единомышленников в
сети ZXNet или
фидо-конференции ZX.SPECTRUM. Сейчас — можно вокруг
SjASMPlus или
SDCC, чего почти никто не делает, потому что, похоже, люди делятся на две категории — 100%-занятых и бездарей. Шучу. Мало энтузиастов стало. Не только на Спектрум-платформе. Мэйнстрим приучил к потребительскому отношению и к платформам, и к средствам разработки. Ускорился темп жизни и тех, и других. Моментально обживаются, поднятые на рекламные щиты, быстро устаревают и отмирают. Попытка лучших из мэйнстримистов робко поменять что-либо обычно пресекается директивно: “делай вот это на вот этом, мы тебе платим”.
Хочу подчеркнуть важное отличие проекта ZXDev от других проектов, ориентированных на разработку для Спектрума (таких как
Open Source ZX, например). Цель проекта ZXDev — несколько шире, чем просто разработка для ZX. Это исследовательский проект, изучающий потенциал программирования для ZX (в перспективе и для других платформ) на языках высокого уровня, потому что потенциально высокоуровневый подход может дать результаты гораздо качественнее, чем низкоуровневый ручной кодинг, в плане переносимости, скорости разработки и надёжности полученных результатов. Заложенные в компиляторы ЯВУ алгоритмы оптимизации способны находить оптимальные решения не хуже, чем асм-кодер. Но направление нужно исследовать и развивать, а эта работа для ZX ещё никем толком не проводилась. Упор был сделан только на ассемблерное кодирование, что было естественно для 80-х и 90-х. Сейчас же, благодаря стараниям энтузиаста Филиппа Краузе, SDCC умеет генерировать великолепный машинный код для Z80, конечно похуже закодированного человеком вручную на асме, но всё больше приближается к этому уровню.
Кроме того, для XDev платформа ZX Spectrum — это одна из платформ, в ряду тех, которые нужно исследовать и выкристаллизовать те моменты, которые являются общими для всех компьютеров, и сделать их концептуальной базой для будущих переносимых между платформами библиотек. Хочу проиллюстрировать сказанное примером. Есть интересный для меня проект
http://www.boulder-dash.narod.ru. (Отдельная благодарность его автору Юрию Калмыкову, низкий поклон). Однако вы загляните в исходники. Это же полная завязка на Windows, в большом и малом! То же самое я могу сказать про
порт этой игры с БК-0010 на MS-DOS/CGA, сделанный Владимиром Мутелем. Полная завязка не только на DOS, но и на нестандартные расширения ТурбоСи. Да, Си позволяет строить переносимые программы. Но коммерческим программированием очень поощряется сильная привязка разработки к особенностям платформы. Теперь чтобы перенести эту игру, скажем, под Linux, ещё неизвестно чего проще — портировать её или переписать заново. Поэтому задача проекта ZXDev — быть показательным примером как нужно делать программы на ЯВУ с самого начала, чтобы чётко отделить мух от котлет — платформенные особенности от базовых алгоритмов, изолируя чётко первые от вторых, и ставя вторые во главу угла. Думаете эта идея фантастична? Да ничуть. Вот вам примеры, иллюстрирующие возможность этого подхода на практике.
Supertripper (Indescomp 1985) — AMSTRAD, MSXColumns (CEZ GS 2004) — AMSTRAD, SPECTRUMPhantomas Saga Infinity (CEZ GS 2006) — SPECTRUM, AMSTRAD, MSXNanako - in Classic Japanese Monster Castle (CEZ Silver 2007) — SPECTRUM, AMSTRAD, C64BeTiled! (CEZ Silver 2007) — SPECTRUM, AMSTRAD, MSXAfter the War (Dinamic 1989) — SPECTRUM, AMSTRAD, C64, ATARI ST, AMIGA, PC DOSAngel Nieto Pole 500 (Opera Sport 1990) — SPECTRUM, AMSTRAD, MSX, PCW, ATARI ST, AMIGA, PC DOSArmy Moves (Dinamic 1986) — SPECTRUM, AMSTRAD, C64, MSX, ATARI ST, AMIGA, PC DOSAspar Grand Prix Master (Dinamic 1988) — SPECTRUM, AMSTRAD, C64, MSX, ATARI ST, AMIGA, PC DOSAstro Marine Corps (Dinamic 1989) — SPECTRUM, AMSTRAD, C64, MSX, ATARI ST, AMIGA(Эти игры — кроссплатформенные. И такая кроссплатформенность больше похожа на настоящую, чем “MS-совместимая”).
Были и другие игры, которые делались сразу для ряда платформ: Elite, Lode Runner, Tower Toppler (
Nebulus), Hobbit, Exolon, Dizzy, Rockford, Down to Earth и т.д. Представляя собою проекции на различные процессоры и аппаратные (в частности, графические) возможности, они, тем не менее, очень часто по внешнему виду отличались минимально. Думаю, общие моменты в них могли бы быть закодированы эффективно на чём-то вроде SDCC или ZXDev.
Научиться делать игры такого класса, но кроссплатформенные (включая Спектрум) на языках высокого уровня, предоставить программистам базу для такой разработки — вот цели проекта ZXDev. Я не хватаю с неба звёзд и понимаю, что в подобных проектах полностью избавиться от низкоуровневого кодирования не удастся. Но ЯВУ-средства помогут сконструировать чёткий проектный каркас программы, что поможет снизить сложность разработки и повысить её шансы на переносимость на другие платформы. А уже насколько повысить — это другой вопрос.
И взгляните на страничку
https://zx.oberon.org/dash.htm. Это та же игра, но чтобы перенести её под Линукс нужно просто переписать несколько процедур: вывод спрайтов, текстов и т.д. Сделать врапперы к существующим библиотекам, да и всё. Занятие на пару вечеров. Вот тут кроется преимущество в переводе игр под ZXDev. Это пересмотр внутренней структуры игры, чтобы выявить общие для платформ вещи и те, которые будут различаться, и отделить логику игры от набора низкоуровневых возможностей, реализующих нужные фишки. Разумеется, это дополнительная кропотливая работа. Гораздо легче не заморачиваться и закодить только под одну платформу. Но появляется нужда в других платформах, А раз делают
рекомпиляцию игр с MSX под MS-DOS, значит такая работа кому-то интересна. (Там, правда, больше в лоб, на замену инструкций Z80 на прямые аналоги i86, но часть кода конечно переписывается полностью. Хотя и нет особой разницы — запустить на современном железе эмулятор MSX или эмулятор MS-DOS'а). Эта деятельность хоть и является интересным упражнением для ума, но никак не решает проблему переноса игры на более другие платформы.
Вместе с тем, для целей проекта ZXDev совершенно невозможно использовать современные мэйнстрим-средства разработки — они настолько распухли, что для ZX стали практически безполезны. (Я знаю о проекте Игоря Мазницы “Java для ZX”, но, кажется, дальше helloworld’а там дело не продвинулось). Поэтому Спектрум является тем мерилом, высветляющим явные недостатки “кроссплатформенных” технологий .NET и Java, скриптовых языков и т.п. То узкоспециализированные средства. (На них невозможно разработать ОС, например). Оберон же —
универсальный язык программирования, хоть и простой, но вполне пригодный для очень широкого класса задач, включая разработку ОС.
Си тоже остаётся в нише средств, которые рано списывать. Хоть язык и имеет много недостатков, но я выбрал его из-за кроссплатформенности и хорошей кодогенерации в SDCC. Рассматривались и другие варианты, например,
z88dk (особенно из-за библиотеки
Sprite Pack), но SDCC показался более проработанным в самом важном — кодогенерации. С большим интересом также посматриваю в сторону Модулы-2, и, возможно, со временем в ZXDev появится поддержка и этого языка.