?

Log in

No account? Create an account

Previous Entry | Next Entry

Написал 256 байт intro для древней консоли Philips Videopac (процессор i8048, около 160 байт RAM, 1кб ROM) 1978 года.



В интро используются три вида графических примитивов (из четырёх реализованных в видеоконтроллере i8245) - grid, sprites и chars. Не используется лишь quads (представляющий собой разновидность chars).

Падающие сверху вниз человечки - не спрайты, как это может показаться, а символы (chars) размером 8x8. Впрочем, в 8245 chars и sprites - родственные понятия. Используется максимально допустимое число одновременно отображаемых chars - 12 штук. Все они берутся из стандартного знакогенератора (там есть символы человечков), что экономит как минимум 24 байта. Это немаловажный момент, поскольку архитектура i8048 и формат картриджа Videopac совсем не способствуют компактности кода. В частности, несмотря на большое число регистров (a, r0-r7), в ряде случаев можно использовать лишь некоторые (a, r0, r1), поэтому образуется довольно много "лишних" инструкций, гоняющих данные из регистра в регистр.

Фон из меняющихся оранжевых квадратов реализован через grid. Это аппаратно генерируемая сетка 9x8 (в специальном режиме "шахматного" поля), в которой по некоему алгоритму включаются те или иные сегменты. Приоритет grid всегда наименьший, поэтому человечки летят поверх неё.

Невезучий, но неунывающий котик представляет собой два спрайта (8x8 каждый). При этом данные для спрайтов во время движения периодически меняются на другие (всего два кадра)), чтобы имитировать двигающиеся лапы.
Столкновение chars и sprites фиксируется видеоконтроллером, при этом по определённому алгоритму меняется цвет спрайтов котика, а также сбрасывается или устанавливается специальный бит, сдвигающий чётные строки спрайта на полпиксела относительно нечётных.

В качестве звука столкновения используется один из звуков доступных через BIOS (что экономит ещё несколько байт).

Исходники: https://github.com/petersobolev/rash
Pouet: http://www.pouet.net/prod.php?which=68024

Интро было представлено на Chaos Constructions'2016 и заняло 6 (из 9) место.