Faultless #08
29 ноября 1997

Ассемблер - демо эффект "летание сетки"

                             Предисловие
                             ───────────

 Во многих демухах , например , U.S.,ICE
CREAM; во многих  boot'ах  вы  наверняка
встречали  такой  эффект , как  "летание
сетки"  по  плавной траектории, попросту
говоря - "PUSH'евский EFFECT" , как  его
еще называют.
 Принцип его не очень сложен, как  может
показаться на первый раз , на самом деле
"фундаментом" в нем  является  все та же
команда PUSH,которая за один раз, как вы
знаете,могет копировать 2 байта.
 Так вот,в этом тексте я приведу  приме-
ры программ,которые вам помогут  сделать
такой эффект (PUSH'овский). Так  давайте
перейдем непосредственно к делу:
 Сначала  мы должны  построить табличку,
по  которой  будет  летать  ваш   спрайт
(слухайся  своеi  спрагы , пый  спрайт),
спрайт должен  быть  размером 2*16 ( по
X - 2,Y - 16 ).Табличка строится обыкно-
венной программкой на БЕЙСИК'е:

 10 LET adr1=30000:LET adr2=30500
 20 FOR n=0 TO 2*PI STEP PI/64
 30 POKE adr1,128+127*SIN n:POKE adr2,8
8+87*COS n
 40 PLOT PEEK adr1,PEEK adr2
 50 LET adr1=adr1+1:LET adr2=adr2+1:NEXT
n

 В результате  этого  примера  в  памяти
под  адресом 30000  будут  координаты  X
таблички , а под 30500 - соответственные
ей координаты Y. Более  понятливые могут
поэкспериментировать  с 30 - ой строкой,
меняя в ней значения SIN и COS  и добав-
ляя что-то свое. Теперь  спрайт  у   вас
есть,табличка есть,осталось самое  глав-
ное - коды; перейдем к ним....

 Для летания нам необходимо  256  спрай-
тов,сдвинутых циклически таким  образом:
сначала сдигается первоначальный  спрайт
16 раз вправо,затем на одну точку  ниже,
и опать 16 раз , если  вы  все проделали
правильно,то,выгрузив этот  блок  спрай-
тов у вас должно получится 256  спрайтов
общей длиной 8192  (длина спрайта * кол-
ичество = общая длина ). Кто  не  хочет,
либо не может  вручную  сдигать   этакую
армаду спрайтов,привожу программу, кото-
рая все сделает за вас , т.е.  правильно
сдвинет все спрайты:

 ORG 25000
 LD HL,адрес вашего спрайта
 LD DE,буфер размером 8192 для сдвину-
       того спрайта (допустим #C000)
 LD BC,длина спрайта (32)
 PUSH DE
 LDIR
 POP HL
 LD C,16
 CALL CRUNCH2 <--DEC1
 LD B,16
 CALL CRUNCH1 <--DEC2
 DJNZ DEC2
 DEC C
 JR NZ,DEC1
 RET
 PUSH BC      <--CRUNCH1
 LD BC,32
 LDIR
 PUSH HL
 LD B,16
 INC HL       <--CR1
 LD A,(HL)
 RRA
 DEC HL
 RR (HL)
 INC HL
 RR (HL)
 INC HL
 DJNZ CR1
 POP HL
 POP BC
 RET
 PUSH BC      <--CRUNCH2
 PUSH DE
 PUSH HL
 LD BC,#001E
 ADD HL,BC
 LD E,(HL)
 INC HL
 LD D,(HL)
 PUSH DE
 LD D,H
 LD E,L
 DEC HL
 DEC HL
 LDDR
 EX DE,HL
 POP DE
 LD (HL),D
 DEC HL
 LD (HL),E
 POP HL
 POP DE
 POP BC
 RET

 После выполнения этой программки ,у вас
под адресом 49152 будут расположены  эти
самые сдвинутые спрайты.Значит так, таб-
личка у вас есть,спрайты тоже есть , те-
перь процедура,которая рассчитывает  но-
мер спрайта и выводит его из буфера, ку-
да его предварительно копирует.

 ORG 30000
 LD HL,30000  <-- START1;адрес таблички
                         по X
 LD A,(HL)
 AND A
 JR NZ,LET1
 LD HL,30000
 LD (START1+1),HL
 JR START1
               <-- LET1
 LD (START1+1),HL
 AND #0F
 LD H,0
 LD L,A
 ADD HL,HL
 ADD HL,HL
 ADD HL,HL
 ADD HL,HL
 ADD HL,HL
 LD DE,#C000
 ADD HL,DE
 PUSH HL
 LD HL,30500   <-- START2;адрес таблички
                          по Y
 LD A,(HL)
 AND A
 JR NZ,LET2
 LD HL,30500
 LD (START2+1),HL
 JR START2
               <-- LET2
 LD (START2+1),HL
 AND #0F
 LD H,0
 LD L,A
 ADD HL,HL
 ADD HL,HL
 ADD HL,HL
 ADD HL,HL
 ADD HL,HL
 ADD HL,HL
 ADD HL,HL
 ADD HL,HL
 ADD HL,HL
 POP DE
 ADD HL,DE
 LD DE,#FFFF-32  ;адрес буфера одного
                  спрайта (32 байта)
 LDI             ;32 раза LDI
 LD (STACK+1),SP ;запоминаем STACK
 LD SP,#4000
 LD HL,(65503+00);адрес буфера +0
 PUSH HL         ;8 раз
 LD SP,#4100
 LD HL,(65503+02);адрес буфера +2
 PUSH HL         ;8 раз
 LD SP,#4200
 LD HL,(65503+04);адрес буфера +4
 PUSH HL         ;8 раз
 LD SP,#4300
 LD HL,(65503+06);адрес буфера +6
 PUSH HL         ;8 раз
 LD SP,#4400
 LD HL,(65503+08);адрес буфера +8
 PUSH HL         ;8 раз
 LD SP,#4500
 LD HL,(65503+10);адрес буфера +10
 PUSH HL         ;8 раз
 LD SP,#4600
 LD HL,(65503+12);адрес буфера +12
 PUSH HL         ;8 раз
 LD SP,#4700
 LD HL,(65503+14);адрес буфера +14
 PUSH HL         ;8 раз
 LD SP,#4020
 LD HL,(65503+16);адрес буфера +16
 PUSH HL         ;8 раз
 LD SP,#4120
 LD HL,(65503+18);адрес буфера +18
 PUSH HL         ;8 раз
 LD SP,#4220
 LD HL,(65503+20);адрес буфера +20
 PUSH HL         ;8 раз
 LD SP,#4320
 LD HL,(65503+22);адрес буфера +22
 PUSH HL         ;8 раз
 LD SP,#4420
 LD HL,(65503+24);адрес буфера +24
 PUSH HL         ;8 раз
 LD SP,#4520
 LD HL,(65503+26);адрес буфера +26
 PUSH HL         ;8 раз
 LD SP,#4620
 LD HL,(65503+28);адрес буфера +28
 PUSH HL         ;8 раз
 LD SP,#4720
 LD HL,(65503+30);адрес буфера +30
 PUSH HL         ;8 раз
 .......................................
 и так далее вы  можете  размножать  эту
 процедуру таким  образом  чтобы   адрес
 буфера был с периодом 0 - 30, после 30-
 опять 0 и т.д.
  В самом конце вы должны поставить  так

 LD SP,0        <-- STACK ; восстановле-
                             ние STACK'а
 RET

 Теперь если вы это запустите  в  цикле,
то у вас на экране будет  летать  весьма
красивая штучка,сотоящая из  вашего пер-
воначального спрайта.

                             Послесловие
                             ───────────

 Как вы могли заметить , в  меню журнала
летает сетка с красивого спрайтом , этот
эффект сделан  по точно такому-же  алго-
ритму как и этот,вышеприведенный  текст.
В приложении журнала есть все  необходи-
мые исходники для написания  такого  эф-
фекта,включая табличку,спрайт , програм-
му - сдвигалку и летание.Вам стоит толь-
ко запустить TASM4.0 (BY XLD) и дерзать!

────────────────────────────────────────

           С уважением Баженов Станислав

                       (AKA  ACTIVATOR).



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

Введение - пара слов о нашем харьковском радиорынке.

Папа Карло - Joker выдвинул идею встретиться и выпить шампанского с шоколадкой.

Дон-жуан - Из записок Дон-Жуана (и записок джентльмена).

Размышления - конкурс на лучшую графику, музыку и DEMO 1998 года. О наездах и сделанных программах за последнее время. Журналы сейчас размножаются,как китайцы.

Бугор - письмо из Литвы от FLP/World Eyes.

TR-DOS - Дисковой интерфейс.

Лобзикам - В сентябре 1997 года я заглянул в свой почтовый ящик и увидел письмо от Венгерских Спектрумистов!

Работа - что творится в городе Харькове,а именно о его частичной жизни некоторых приколов.

Рассказы - трагическая повесть; Сросшиеся слова; Творчество старшего поколения; Словарь малоупотреБЛЯемых и выРАЖЕНИЙ слов.

Обзор - Ненаучный обзор Зокололитературного явления.

Art Studio - проект нового графического редактора от группы Avalon.

Смысл - веченые жизни и Pokes: SexMine Sweper, Marrow in the world of wisdom.

Реклама - Наш журнал может приобрести каждый всего за 12$!

Новости - в Челябинске будет издаваться новый журнал "Miracle", Новости from Excess/Kazan, группа из Полтавы разработала плеер MIDI для спектрума.

Гае.куда - о тех людях,которые и делали-то журнал!

King's Bounty 3 - новелла по игре.

Ассемблер - демо эффект "летание сетки"

Кемпстон - кемпстон джойстик и eго применение.

Терминатор - ...И машины восстали из пепла ядерной войны. Шла война на уничтожение человечества.

Ресторня - основные моменты "ресторизации" взлома и адаптации программ.

Amiga - "AMIGA 600" по своей архитектуре отличается от PC.

Перспективы ПО - новая игрушка Citadel и навороты журнала.

Armada - Compaq Computer пополнила свой традиционный комплект портативных ПК Contura и LTE Elite принципиально новой серией Armada 4100.

Portege - Toshiba обновляет дизайн субноитбуков Portege.

Apple - Apple выпустила Internet-инструментарий для PDA.

Merlin - Волшебная Melin против NT.

Netware - Разработчики получили бета-версию следующей NetWare.

Fractal - Fractal Expression объединяет векторную графику с растровой.

SMP-сервер - SMP-сервер от "МДМ-сервис".

DVD - Новости о DVD слишком хороши,чтобы быть правдой.

Дополнение - В журнале есть такая статья,как интервью,которая оформлена в виде отдельной оболочки.

Вычисления - организация математических вычислений.

Презентация - Содержание приложения журнала.

ZX-News 3 - разборки с критиками журнала Faultless.

Таблички - справочные сведения по микросхемам и кодам команд микропроцессора К580ИК80.

Обявления - Продается компьютер PENTAGON-512 + 3.5 FDD + 5.25 FDD + LPT-COVOX + B/W MONITOR + 100 DISKS + SINCLAIR JOYSTICK.

Квадро - квадросиситема для ZX Spectrum на основе AY3-8910.

Железо - схема 4 мб "SPECTRUM"!! Модернизация компьютера "РОБИК".

Неизсвестность - Как вы думаете, сколько человек делают следующие журналы? Небольшая статистика.

Благодарности - благодарность выражается...

Заключение - Ну вот и закончена работа над восьмым проектом журнала FAULTLESS.


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

Похожие статьи:
CODING - Процедура управления верхней памятью на разных машинах.
Интервью - SERGEY STURM LGN.
Фантастика - Повесть Стругацких "Путь к Амальтею"(продолжение).

В этот день...   19 декабря