846 байт интро "Christmas tree goes to a party" для компьютера Vectrex
После некоторого перерыва, решил вернуться к Vectrex. Аналоговость и ламповость (в буквальном смысле) манит. Поскольку Dihalt, на который планировалась работа, назначен на начало января, хотелось сделать что-то новогоднее. Снег, особенно много — не лучший выбор для векторных устройств, так что ёлка мне показалось лучшим вариантом. Рисовать её прямыми векторами не очень интересно, решил кривыми, тем более технология была более-менее отработана в предыдущих работах (Electric Force, Springs ). В данном случае, однако, трудность была в том, что кривые должны быть не какие-нибудь случайные, а вполне конкретные, причём разные.
Как я уже упоминал в прошлых статьях, для рисования кривой необходимо менять напряжение прямо в процессе перемещения луча. Но если мы рисуем конкретную кривую, значит должны иметь табличку с данными и, как минимум, цикл с выборкой из этой таблички и записью данных в ЦАП. Все эти действия отнимают время — за одну инструкцию процессора луч может пройти до сантиметра экрана и это надо учитывать.
Если бы в Вектрексе было побольше ОЗУ, наверное оптимальным был бы самомодифицирующийся код — т.е. одна часть кода генерировала бы код для отрисовки каждой кривой по данным из таблички. Но ОЗУ в нём мало. Как вариант, можно было бы заранее генерить этот код скриптом и иметь, соответственно, кучу подпрограмм в ПЗУ, каждая из которых рисовала бы свою кривую. Как-то это расточительно — в данном случае обошёлся и так, поскольку особой точности от кривых не требовалось.
Ёлка из голых кривых выглядела бы совсем тоскливо — чай не в лесу. Решил добавить гирлянду. Это как раз сделать было достаточно просто — стоит лишь задержать луч в начале и конце кривых на несколько тактов и сразу имеем яркие точки. Видео не очень передаёт, но вживую они прямо-таки сияют. На фото лучше видно.
Правда, учитывая количество огоньков, суммарная задержка получается немалая, из-за чего я быстро перестал укладываться в стандартные 30 тысяч тактов и изображение стало заметно мерцать (впрочем, в данном случае это непринципиально). Тем не менее, на отрисовку множества падающих снежинок тактов уже не хватило бы, так что я лишь их обозначил. Некоторая экономия тактов получилась за счёт того, что все кривые начинаются из верхушки ёлки. Но из-за этого ёлка не такая красивая, как могла бы быть.
В итоге, явно чего-то не хватало. По сути, получилась картинка. Я добавил пульсацию яркости огоньков (тоже на видео не очень заметно), но всё равно было как-то статично. Самым простым было сделать перемещение ёлки, но логически неясно, с чего это вдруг дерево ездит по поверхности. Вот тут-то и подумалось, что добавить «шагание» — забавный вариант. Особенно учитывая, что для этого достаточно просто двигать конечные точки, изгибаться «ноги» будут сами — аппаратно!
Музыка — одна из стандартных, встроенных в BIOS.
Исходник.
0 комментариев