Buzz #11
22 октября 1997

Ассемблер - Эффект "пламени".

<b>Ассемблер</b> - Эффект
                          ___     _          --/
       · - = Ё  │<A│< Р\/ЛИ│Ь  8  ╫((ЕМБЛЕРЕ  /80  Ё = - ·
                       /                     /--
                    ▓▓░ ▓▓▓▓▓▓▓▓▓▓▓▓▓ ░▓▓
                   ▓▓▓▓░ ▓▓░         ░▓▓ ░▓▓
                  ▓▓░ ▓▓░ ▓▓▓▓▓▓▓▓▓ ░▓▓ ░▓▓▓▓
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▓▓░   ▓▓░     ░▓▓ ░▓▓ ░▓▓ ░▓▓ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▓▓▓▓▓▓░ ▓▓░   ░▓▓ ░▓▓▓▓▓▓   ░▓▓ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀           ▓▓░ ░▓▓ ░▓▓ ░▓▓     ░▓▓ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
              ▓▓░         ▓▓░▓▓ ░▓▓   ░▓▓     ░▓▓
             ▓▓░  RULEZ!   ▓▓▓ ░▓▓     ░▓▓     ░▓▓

(C) SYRUS & SENAT

   Привет всем ! Сегодня с вами в рубрике "АССЕМБЛЕР"  мы,  т.е.
SYRUS & SENAT надеемся,что все,что мы тут понаписали не окажется
для Вас безинтересным.
   Безмерно порадовавшись созданию этой рубрики,  мы  с живейшим
интересом откликнулись на предложение написать  несколько  чего-
нибудь. И сегодня,мы предлагаем Вам поджечь экран вашего устрой-
ства видеовывода. Для этого Вам не понадобятся спички,зажигалки,
горюче-смазочные материалы и прочие хорошо воспламеняющиеся пре-
дметы, а всего лишь:

           а) голова, чтобы думать;
           б) руки, чтобы писать то, что надумаете;
           в) хороший ассемблер для объединения усилий
              предыдущих членов, с целью осуществления
              поджога вышеназванного устройства видео-
              вывода без вывода оного из строя.

   Ну вот вроде-бы и все, что Вам сегодня понадобится. Итак нач-
нем ...
   Сразу хочется отметить, что FLAME здорово смотрится на  более
"крутых" тачках нежли SPECTRUM (например на AMIGA (просто  улет)
или pC (фу, какая гадость)). На SPECCY же, в  силу того,  что  у
него бедные цветовые возможности и в силу довольно солидной  ре-
сурсоемкости самого эффекта, результат конечно-же похуже,но все-
равно впечатляющий.
   Итак начнем с палитры цветов. Расширить ее можно  с  примене-
нием сетки на графическом экране  (пиксели в шахматном порядке).
Хотя конечно это не заменит "чистый" цвет, но все-таки. Получить
"новый" цвет можно  комбинированием  цветов INK  и PAPER.  Здесь
возможны два варианта:

           а) плавный переход от красного до белого
              (через оттенки красного и желтого);
           б) просто много цветов.

   На каком варианте Вы остановитесь - это дело вашего вкуса.
   Итак, палитра у Вас  готова,  теперь  следует  продублировать
(утроить ..., или ничего не делать - это подбираете опытным  пу-
тем) каждый элемент палитры, и палитра готова.
   Теперь, обсчет. Для начала,Вам потребуется два предварительно
очищенных буфера размером (SIZE_X+2)*(SIZE_Y+2)  каждый  (откуда
берется +2 Вам станет ясно позже), где:

     SIZE_X - размер области по горизонтали;
     SIZE_Y - размер по вертикали.

   Наконец, мы вплотную приблизились к самой  процедуре  обсчета
точки. Вот ее текст:

        LD    A,(HL)       ;Регистр HL указывает на BUFFER1.
        INC   HL           ;Регистр DE - на BUFFER2+1.
        ADD   A,(HL)
        INC   HL
        ADD   A,(HL)
        ADD   HL,BC        ;Регистр BC=SIZE_X+2.
        ADD   A,(HL)
        DEC   HL
        DEC   HL
        ADD   A,HL
        ADD   HL,BC
        ADD   A,(HL)
        INC   HL
        ADD   A,(HL)
        INC   HL
        ADD   A,(HL)
        OR    A
        RRA
        RRA
        RRA
        AND   INT          ;INT - интенсивность горения (не со-
        LD    (DE),A       ;ветуем брать больше, чем число цве-
                           ;тов в палитре).

   Теперь, когда Вы примерно поняли суть работы процедуры,  сле-
дует объяснить поподробнее, как же все-таки она работает. Итак:

   1) Берется точка в BUFFER1 (точнее, не берется ее значение, а
берется она за исходную)
   2) Суммируются восемь значений, распологающихся в BUFFER1 во-
круг исходной точки (см.рис. 1)

┌───┬───┬───┐
│ 1 │ 2 │ 3 │       0 - исходная точка.
├───┼───┼───┤
│ 5 │ 0 │ 4 │       1...8 - суммируемые точки.       
├───┼───┼───┤
│ 6 │ 7 │ 8 │       рис. 1
└───┴───┴───┘

   3) Полученный результат делится на 8 и помещается  в  BUFFER2
плюс смещение, равное смещению исходной точки в BUFFER1.
   4) Последовательно обсчитываются все  точки в  BUFFER1  (окно
обсчета равно SIZE_X*SIZE_Y)
   5) BUFFER2 выводится на экран. Порядок вывода следующий:

         а) берется байт из BUFFER2, его значение будет равно
            смещению в палитре;
         б) по этому смещению в палитре берется "цвет";
         в) цвет выводится на экран;
         г) Меняем местами BUFFER1 и BUFFER2, т.е. меняем в
            программе адреса BUFFER1 на BUFFER2 и наоборот.

   Да, чуть не забыли, перед началом всех  этих  действий  нужно
нижнюю строку буферов заполнить случайными числами(значение этих
чисел будет влиять на интенсивность огня).
   Хочется добавить, что  приведенная  здесь  процедура  обсчета
будет работать где-то  прерывания за 3 (весь  экран  атрибутов).
Гораздо приятнее эффект смотрится за два (в этой процедуре огро-
мный простор для оптимизации). Ну а уж, если кто-нибудь каким-то
чудом умудрится уложиться в одно, то это будет просто класс (мы,
как не пахали, быстрее 100000 тактов дело не пошло). Ну ладно,за
сим низко кланяемся и до новых встреч.

      Искренни ваши SYRUS & SENAT from ETERNITY INDUSTRY.

P.S. Специально для BUZZ'a.




Другие статьи номера:

Cheating - Немного об RPG - Bard'S Tales. Тайная часть в музыкалке : Trash'e Trackmo. Коды уровней в игре Magic Stripes. Как перейти на следующий уровень в игре King Valley. Навороты в головоломке Hexxagon. Cheat в SEX-minesweeper demo.

TOP TEN - Лучшая десятка игр,системных и музыкальных программ.

Авторы

Анекдоты - 10 анекдотов...

Ассемблер - Эффект "пламени".

Ликбез - Сетевые символы, созданные фирмой Mustang Software.

Наши новости - Почти готова мини-трекмочка Clibmatize.

Новелла - Компьютерная новелла "The Neverending Story" часть 2

Нововведения - Что же нового появилось в этом номере газеты.

Обзорчик SYS - Обзор системных программ: Alasm v3.8c, Tasm v4.12, XAS v9.06+, ZX-ASM v3.0.

Обзорчик - Обзор игровых программ: Moontorc, Klademiner, Dragonia, Choe Lee fut Kung Fu warrior, King Valley, Return to Home 4, Doom mania.

Объявления - Реклама и объявления...

От авторов

Событие - Две ведущие ковровские группы объединились в Enternity Industry.

Содержание


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
ZX-NET - О создании в Минске полноценной сети на SPECCY.
Local Newz - глазовские и пермские новости: CJ заканчивает игру "Кощеева Цепь", Dr.Disмаl учится, Sиrvivоr собирает архив ZX софта, Orc(k) доделывает игру.
Проекты - печатная брошюра "этюды в программировании на ассемблере z-80" (новый проект от создателе газеты Абзац)
Лоцман - Приключения Крузи (окончание новеллы).
Юмор - Анекдоты.

В этот день...   18 апреля