5 сентября 2016, 17:03 (3033 дня назад) № 10250
Пара слов про мою интру для Videopac:
Используются три вида графических примитивов (из четырёх реализованных в видеоконтроллере 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 (что экономит ещё несколько байт).
(возможно, в Facebook она не будет вам доступна - видимость ограничена)