ZX Fake! на Chaos Constructions 2025

Про идею

Идея «ZX Fake!» появилась спонтанно. Меня всегда привлекали советские компьютеры; ещё в детстве с интересом изучал дампы в приложении к «Юному технику», посвящённые ЮТ-88. Но в реальности и ЮТ-88, и Радио-86РК, и БК-0010-01 (последний — главным образом из-за палитры) производили отталкивающее впечатление.

Советские компьютеры можно разделить на три категории:

  • Имеющие исторический интерес доперестроечные;
  • Недоразвитые радиолюбительские;
  • Клоны «Спектрума», интересные коллекционерам и собирателям исторических курьёзов.

Но должно же было быть что-то чисто советское и не уступавшее распространившемуся в перестройку «Спектруму»?

К своему удивлению, я обнаружил экземпляр, на котором «сошлись все звёзды», — и это был «Вектор-06Ц».

Палитра Вектор-06Ц
1) Характеристики. Ближе к концу эпохи «Спектрума» была популярна идея «суперспектрума» с расширенным экраном. Под эту идею проектировались или производились «Спринтер», «ATM», «Профи» и другие. Оказалось, что «Вектор-06Ц» обладал во многом сходными характеристиками уже в 1988 году — то есть через два года после выхода ZX Spectrum 128 и задолго до того, как это кому-либо в России понадобилось. Экраны 256×256 и 512×256 при палитре в 256 цветов на советском микрокомпьютере!

2) Сообщество. Существовало сообщество вектористов, жившее параллельно спектрумистам, которое мерялось со «Спектрумом» и создало массу весьма неплохого ПО. Это сообщество выручало Дейзи из замка волшебника Держихватайки в огромном и сложном «Dizzy S» на русском языке. Попутно читая электронные журналы и свою печатную литературу появившиеся за пару лет до «Спектрофона».

Журнал Rage#3 (1996)
3) CP/M-совместимость. То есть 80×24 знакомест (с чем у «Спектрума» были большие проблемы). Это в разы увеличивало количество серьёзных компиляторов — бери и пользуйся.

4) Бейсик. Даже родной Бейсик для «Вектор-06Ц» не только производительнее Sinclair Basic в 3–7 раз (чистая правда, тест Bench64 и др. не дадут соврать), но и развивается по сей день.

Из этих размышлений следовало, что перед нами — идеальный компьютер для демосцены, и эта ниша абсолютно свободна. Сложности, конечно, есть, но где их нет? На БК-0010-01? Три раза «ха!». Вот отсюда и появилась бредовая (на первый взгляд) идея писать демо на Бейсике под неизвестный советский компьютер.

CP/M-39 для Вектор-06Ц
В процессе написания выяснились и минусы. Операторы GET и PUT, предназначенные для манипуляций с графикой в Бейсике, съедают сразу всю доступную память. Звук, хоть и трёхканальный (как на AY-8910/12), но монофонический и, что ещё хуже, не имеет регулировки громкости каналов. Для музыканта это фиаско, потому что «тише/громче» — второй по значимости инструмент (после паузы) в музыке. Трекеров скорее нет, чем есть. То же самое и с графическими редакторами: они есть, но это вам не Art Studio.

Тем не менее, удалось подобрать мелодии, которые нормально звучали на трёхканальном КР580ВИ53: это «Позови меня с собой» (известная в исполнении А. Пугачёвой) и незабвенные «Розовые розы». Мелодию «Погоня» из к/ф «Неуловимые мстители» я взял из REKLAMA.BAS, которая шла на кассете П/О «СЧЁТМАШ» для «Вектор-06Ц», только понизил её на октаву.

По графике же у «Вектор-06Ц» есть несколько козырей:

1) Программируемая палитра. В «ZX Fake!» я использовал палитру из PAL-цветов, максимально близких к ZX Spectrum, но ничто не мешает подобрать 16 цветов из палитры в 256 цветов так, чтобы это выглядело не хуже, чем на младших «Амигах». Палитру можно быстро переключать, поэтому все эффекты в «ZX Fake!» — палитровые. Правда, это требует предварительной подготовки экрана (отсюда и надпись «Машина думает»).

Попиксельный вывод с масками в 06Ц Бейсик
2) Быстрый вывод символов. Можно достаточно быстро выводить символы любого размера (кратного 8 по ширине и высоте) в любую точку экрана с пиксельной точностью.

3) Работа с масками. Для всех операций заливок и вывода символов можно использовать маску 8×8, что даёт возможность выводить чересстрочно, по косым линиям и т.д.

4) Задники. Можно использовать фрагменты изображения, прозрачные для других фрагментов.

5) Аппаратная прокрутка. Можно прокручивать экран по вертикали аппаратными средствами.

И всё это — на Бейсике (я уже молчу о том, что речь об изделии из СССР образца 1988 года)!
Вот тут меня и понесло.

Про ZX Fake!
Сдвиг экрана в Цветомузыке
Пробным «шаром» стала «Цветомузыка». Я рисовал окружности оператором CIRCLE, и они мне не понравились. Но затем оказалось, что в CIRCLE можно задать своё число Пи — любое. Это странно, но это так. И это позволяет получить от оператора CIRCLE дуги.

Здесь же решалась проблема с отсутствием двух экранов, а мне очень хотелось вывести надпись и затем показать экран, подготовленный для палитрового эффекта. Вот как это сделано: надписи «Цветомузыка» и «Машина думает» выводились в нижнюю строку экрана, после чего экран прокручивался до середины. После окончания прорисовки базы для эффекта в невидимых цветах (где фон совпадал с тоном изображения), экран просто прокручивался обратно, и палитра «проявлялась».

Построение псевдо-3D сферы
В «Дискосфере» я поставил себе задачу реализовать вращение сферы (памятной по дискотекам). Для этого я нарисовал окружность, внутри неё расположил дуги (с помощью оператора CIRCLE и манипуляций с числом Пи), а затем задал шаг «недорисовки» этих дуг, отрисовывая их каждый раз следующим цветом (фон при этом совпадал с основным тоном).

Затем я убрал исходную окружность, которая служила для формирования «шара», оставив только полученную псевдо-3D сферу. После настройки палитры написал циклический сдвиг цветов палитры вперёд и назад, что и создало эффект «вращения» сферы. Та же «Цветомузыка» — вид сбоку. Параллельно с этим, аппаратной прокруткой я двигаю экран вверх и вниз, в результате чего сфера не только вращается, но и «подпрыгивает».

В «Алом стяге» — самый хитрый алгоритм, и в двух словах его описать не получится. Задача была пустить по прямоугольнику волну, в которой впадины и выступы использовали бы 3 элемента вместо обычных 2. Кроме того, они должны были быть симметричны сверху и снизу, чтобы флаг визуально «болтался» на краях. Этот эффект использует 8 цветов из 16.

Строение анимации флага и всадник
Оставшиеся 8 цветов мне были нужны для создания «спектрумоподобного» эффекта. Если бы я использовал все 16 цветов и не выводил на экран ничего другого, то глубину впадин и выступов можно было бы улучшить. Изначально хотел вывести внутри флага анимацию красноармейца на лошади (скачущего налево, флаг развевается — направо), но с подготовкой данных для такой анимации у меня не заладилось (память кончалась, пришлось бы делать дозагрузку). Ухищрения для палитровой анимации перекрывающихся изображений существуют, но это тема отдельного разговора.

Повторно я использовал этот флаг позже, в инвитро «RetroЗОВ» на конкурс «RETROГРАД 2025» показанном на венгерском фестивале T0AD. Там вывод текста сделан похоже на принцип подсмотренный в «Final Signal», где текст, написанный через пробел, моментально проявляется с помощью атрибутов. Я же использую для той же цели 8 оставшихся в палитре цветов.

В «ZX Fake!» выводилась только одна надпись: «Chaos Constructions 2025».

Оригинальная частота звуков писка в «Поверка ТВ» и при перемещении курсора по главному меню выяснялась при помощи тюнера и она соответствуют ZX Spectrum. Главное меню также работает через палитру. Только так можно было добиться скорости перемещения курсора аналогичной меню ZX Spectrum 128.
Палитровое меню раскрашенное условными цветами
При написании музыки проблемой стало ограничение длины строки в Бейсике, так как она не может быть длиннее 127 символов. Это значит, что существует ограничение на длину нотной информации, описываемой в так называемом «музыкальном макроязыке» (ММЯ), которую можно передать в канал ВИ53 за раз.

Пришлось организовать нечто вроде паттернов в трекере, но в 4–8 раз короче, а затем долго маскировать момент переключения между этими псевдо-паттернами. То есть для написанной музыки пришлось писать ещё и небольшой проигрыватель, на который также было возложено управление эффектом.
Руководство в ZX Fake!
Что касается текста в разделе «Руководство» — конечно, я шутил, используя язык советской передовицы (хотя содержательная часть там правдива). Эта идея появилась после того, как я услышал прошлогоднее выступление (инсайд) главы банка ВТБ Андрея Костина с ежегодным отчётом. Все слайды в нём были оформлены в духе газеты «Правда», а говорил он слогом, который мы когда-то слышали с трибун ЦК КПСС. Человек с его положением может себе позволить такие шутки, но после отчёта все говорили друг другу, что это был самый внятный доклад за все годы. Вот и думайте.

Инструментарий

  1. Эмулятор.
  2. Конвертор из текста в форматы CAS/BAS (аналог TAP на ZX Spectrum) и обратно.
  3. 06Ц Бейсик в формате ROM.
  4. Документация

p.S. Мои современники в советский период отличались от сегодняшних коллег в основном тем, что среди них было много людей, которые были готовы на «любой кипиш, кроме голодовки». Время, прошедшее с тех пор, отучило от излишней суеты. Поэтому я не сомневаюсь: если бы мы продолжали жить в едином государстве, то такое явление, как демосцена, в него обязательно бы проникло, просто приобретя свойственные этому государству черты. Именно эти черты я и попытался показать в «ZX Fake!». Черты, безусловно, гротескные и гипертрофированные, но по-своему симпатичные и несущие отпечаток собственной массовой Культуры — которой сегодня, на мой взгляд, попросту нет.

6 комментариев

avatar
Интересно. Но не дают покоя оговорки про сплайны. Огромное сомнение, что окружности и эллипсы в Вектор-06ц рисуются именно сплайнами, а не по каноническому уравнению, описывающему эллипс например: x²/a² + y²/b² = 1.
avatar
Согласен, но точный ответ на этот вопрос имеет только Иван Городецкий (м.б. прокомментирует), а с т.з. результата привык называть сплайнами любые кривые линии. Скорей всего это некорректно и правильней было бы писать про дуги.
avatar
Скорее, полуэллипсы :)
avatar
Если я правильно помню у Вектора нет разрешения 512х512 ) Из советских безусловно самый интересный, но в нём как-будто всё назло сделано чтобы не быть быстрым. Демка огонь, отличная идея и реализация!
avatar
Спасибо! Эта ошибка есть в демке и также на автомате она перетекла в статью. Второе разрешение 512x256)
avatar
концепт — огнище, на показе все ржали и восторгались одновременно :D вектору бы проц помощнее и памяти побольше (ну мб еще звук побогаче :), была бы отличная машина
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.