Amazing #02
14 июля 1998

Ассемблер - поговорим о такой необходимой процедуре как вывод спрайта.

<b>Ассемблер</b> - поговорим о такой необходимой процедуре как вывод спрайта.
(C) 1998 by Mr.Beeper

Music by Ironman

Мы продолжаем уже начатую в предыдущем но-
мере тему "Ассемблер", и на этот раз пого-
ворим  о  такой  необходимой процедуре как
вывод  спрайта.
  В журнале "Odyssey" есть где-то статья о
выводе спрайта размером 192*256 (полноцен-
ный  экран) за 1 прерывание !!! Мы же, бу-
дем  рассматривать  более меньшие размеры,
так что набирайтесь терпения и читайте.

Все  процедуры  вывода  спрайта делятся на
два вида.

1). Быстрота выполнения процедуры не очень
быстрая,  но размеры ее меньше чем во вто-
ром случае.

2).  Быстрота  выполнения гораздо быстрее,
хотя размеры ее немного стали больше.

Вот  по  этим пунктам вы должны ориентиро-
ваться, когда будете выбирать тип процеду-
ры,  которая больше подходит к вашей прог-
рамме. Ниже преведенная процедура работает
как написано в первом пункте (см. выше), а
переделать  ее под второй способ не соста-
вит сложности.

        ORG 25000
VIV.SPR LD HL,#8000 ;адрес спрайта
        LD DE,#4000 ;адрес
                    ;вывода на экран
        LD B,16     ;кол_во пикселей по y
VIV     PUSH BC
        PUSH DE
        LD BC,7     ;кол_во знакомест по x
        LDIR        ;<<< Warning !!!
        POP DE
        POP BC
        INC D
        LD A,D
        AND 7
        JR NZ,V1
        LD A,E
        ADD A,#20
        LD E,A
        JR C,V1
        LD A,D
        SUB 8
        LD D,A
V1      DJNZ VIV
        RET

Если  внимательно посмотреть на эту проце-
дуру  вывода спрайта, то можно увидеть та-
кую  команду как LDIR (Вы  ею наверное уже
когда-то пользовались,и знаете как она ра-
ботает). В данном примере эта команда слу-
жит  для пересылки группы байтов из памяти
на экран, а из этого следует, что быстрота
выполнения  этой  команды  практически яв-
ляется  основным действием всей процедуры.
Но  есть в этой команде и один недостаток,
скорость  ее быстродействия равна 22 такта
в  секунду !!! А это очень много. Если ко-
нечно  вам без разницы, за сколько времени
выполняется  эта  процедура,  тогда можете
смело  вставлять  ее  в свои программы, но
если  же вам дороже каждый такт, тогда да-
вайте  рассмотрим второй вариант. Если по-
думать логически, нам в этой процедуре на-
до  заменить  всего  навсего  одну команду
LDIR  на  какую-то другую команду, и сразу
же  возникает  вопрос, - А где взять такую
команду  и каким "Макаром" она будет рабо-
тать.  Для  начала  возьмите каккую-нубудь
книгу про Ассемблер и найдите там кодиров-
ку  всех  команд  (там  это толжно быть на
последних  страницах).  В одной из колонок
этой  таблицы  должно  быть написано время
выполнения  каждой  команды в отдельности.
Поищите  в  таблице  команду LDIR и LDI, и
посмотрите   на  скорость  их  выполнения.
Оказуется,  что LDI выполняется за меньшее
количество тактов чем LDIR. Ну вот, с пер-
вой  задачей  мы и справились, заменив ко-
манду  LDIR на LDI. Давайте теперь подроб-
ней  рассмотрим  команду LDI. Недостаток у
нее такой, LDI пересылает не группу байтов
как  LDIR,  а  всего лишь один! Попробуйте
сейчас  вместо LDIR поставить LDI и запус-
тив,  посмотрите что получится. Получилось
так,  как  я и говорил, вывелся всего один
байт из нашего спрайта. Чтобы спрайт выво-
дился  с размерами которые мы задали, пос-
мотрите  в начало процедуры на регистр BC,
в  нем задано количество байтов по ширине.
Вот возьмите теперь и поставте столько ко-
манд  LDI сколько написано в регистере BC.
Все должно отлично работать.

══════════════════════════════════════════



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

От автора - история создания 2го номера журнала.

Авторы - об авторах журнала.

Обозрение - обзор программ из приложения: STV v1.3, Sample Editor v2.1, TDU v1.0, Crasher, RBI, YES, RDG, MOdule Converter, RC v1.4, Dark Square, 12 Тайных Книг.

Софтятина - обзор новой прессы и игр: Odyssey #2, Oberon #4, Spectrofon 22-23, ZX-Format 7, Amiga #1, Faultless 8, ZX-РЕВЮ 5-6, Amazing 1, X-Reversy, The Last Curieur, Pro Trackerr 3.0.

User'am - Risc процессор - путь в будущее.

User'am - 64 Килобайта о FIDONet.

User'am - нло-2 "Дьяволы Бездны", На пути к совершенству.

User'am - курс полодого юзера.

Ассемблер - поговорим о такой необходимой процедуре как вывод спрайта.

Ассемблер - Контроль времени (работа с прерываниями).

Ассемблер - Совместное использование ZX ASM 3.0 и STS 5.1.

Ассемблер - ВГ-93: процедуры для прямой работы с контроллером дисковода.

Презент - описание Turbo Disk Utility v1.0.

Презент - описание Sample Editor v2.1 (beta).

Презент - описание Real Commander v1.4.

Презент - описание игры Dark Squares v1.98 (demo version).

На досуге - я видел Amiga и IBM в работе и не могу не высказать своих размышлений по этому поводу!

На досуге - ответы на самые часто задаваемые вопросы по компьютеру Amiga.

Разное - history: История Клайва Синклера.

Разное - модем: Как правильно использовать модем, реализующий протоколы коррекции/сжатия MNP4/MNP5, v.42/v.42bis.

Разное - lmg: история образования Last Masters Group.

Отдохни - штирлиц.

Отдохни - очепятки: очепятоки, допущенные в газетах и журналах.

Отдохни - ОРТ: РЕКЛАМА ДВИГАТЕЛЬ ТОРГОВЛИ!

Железо - подробное описание модемов.

На досуге - 10:2 Hacker eRRoR новый вирус от Митника.


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

Похожие статьи:
Post Box ][ - нам пишут.
DIY - Изготовление хвоста для мышки.
Лит. Страничка - Головная боль полковника хауэлла или "объвляю заседание открытым" (продолжение).

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