Adventurer #07
31 января 1998

Обмен опытом - Быстрые процедуры линии.

<b>Обмен опытом</b> - Быстрые процедуры линии.
     (C) Веселов Евгений (VEKA/CPU)
     (C) Музыка ALOS jnr./Spark


        Быстрые процедуры линии.

     Представляю  вам две программы рисо-
вания линии, работающие быстрее, чем рас-
положенная в ПЗУ.
     Первая из них - для установки точки,
вызывает внешнюю подпрограмму, что позво-
ляет использовать ее для вывода любых об-
ъектов.
     Координаты  концов  линии задаются в
регистрах HL и DE (E и L - x, D и H - y).

LINE    LD     A,H    ;расчет смещений
        SUB    D
        JR     NC,LINE1
        EX     DE,HL    ;линия рисуется снизу вверх
        NEG           ;смена знака смещения
LINE1   LD     H,A    ;H=dy=│y2-y1│
        LD     A,L
        SUB    E
        LD     BC,#141C ;INC D [#14], INC E [#1C]
        JR     NC,LINE2
        INC    C       ;если x1<x2 то DEC E [#1D]
        NEG             ;смена знака смещения
LINE2   CP     H
        LD     L,A     ;L=dx=│x2-x1│
        JR     C,LINE3 ;если dx<dy то продолжение
        LD     L,H     ;замена dx<->dy
        LD     H,A
        LD     A,B    ;замена INC D <-> INC/DEC E
        LD     B,C
        LD     C,A
LINE3   LD     A,B     ;модификация кода
        LD     (LINE5),A
        LD     A,C
        LD     (LINE6),A
        LD     B,H     ;кол-во точек в линии
        LD     A,H
        INC    L
        INC    B
LINE4   CALL   PLOT    ;установка точки
LINE5   NOP
;изменение координаты с большим смещением
;направление зависит от знака смещения
        SUB    L
        JR     NC,LINE7
LINE6   NOP
;изменение координаты с меньшим смещением
        ADD    A,H
LINE7   DJNZ   LINE4
        RET

     В  PLOT должны сохраняться следующие
регистры:  HL,DE,B,A. Координаты задаются
в регистре DE (E=x, D=y).

     Следующая  программа аналогична пре-
дыдущей,  но  работает  непосредственно с
адресом  в  экранном  файле. Также вместо
самомодифицируещегося  кода  используются
отдельные  части программы для каждого из
четырех направлений. За счет этого значи-
тельно  возрастает  скорость и еще больше
длина ;-).
     А  откуда берутся че-
тыре  направления?  Посмо- 
трите  строчку  после пер- 
вого JR.  Видите EX DE,HL? 
Теперь  посмотрите  на ри- 
сунок.  Если  D(y1)>H(y2), 
то  линия должна рисовать- 
ся   сверху   вниз  (линии 
5..8  на  рисунке), но вы- 
полняется  EX  DE,HL и все 
линии рисуются снизу вверх 
(как  линии 1..4).
     Все  это относится и к первой проце-
дуре  линии. Если необходимо, чтобы линия
всегда шла в заданном направлении, то вам
придется  переделать начальный блок прог-
раммы  (расчет  смещений)  или напишите в
редакцию журнала, и будет опубликован из-
мененный вариант.
     Еще  один  важный  момент: во второй
процедуре  экранный  адрес  расчитывается
один раз перед выводом линии (см. в четы-
рех  местах CALL GET_ADR). Координаты за-
даются в регистре DE,а результаты расчета
заносятся в регистр HL(адрес) и C(маска),
при этом можно использовать все регистры.
Самое  главное,  что начало координат при
этом  должно находиться внизу экрана (об-
ратите внимание на вторую и третью строч-
ки в процедуре GET_ADR).

LINE    LD      A,H
        SUB     D
        JR      NC,LINE1
        EX      DE,HL
        NEG
LINE1   LD      H,A
        LD      A,L
        SUB     E
        JR      NC,LINER

        NEG
        CP      H
        LD      L,A
        JR      C,LINELU

        PUSH    HL
        CALL    GET_ADR
        POP     DE
        LD      B,E
        LD      A,E
        INC     D
        INC     B
        EX      AF,AF'

LINELD1 LD      A,(HL)
        OR      C
        LD      (HL),A
        RLC     C
        JP      NC,LINELD2
        DEC     L
LINELD2 EX      AF,AF'
        SUB     D
        JR      NC,LINELD4
        ADD     A,E
        EX      AF,AF'
        LD      A,H
        DEC     H
        AND     7
        JP      NZ,LINELD3
        LD      A,L
        SUB     #20
        LD      L,A
        JR      C,LINELD3
        LD      A,H
        ADD     A,8
        LD      H,A
LINELD3 DJNZ    LINELD1
        RET
LINELD4 EX      AF,AF'
        DJNZ    LINELD1
        RET

LINELU  PUSH    HL
        CALL    GET_ADR
        POP     DE
        LD      B,D
        LD      A,D
        INC     E
        INC     B
        EX      AF,AF'

LINELU1 LD      A,(HL)
        OR      C
        LD      (HL),A
        LD      A,H
        DEC     H
        AND     7
        JP      NZ,LINELU2
        LD      A,L
        SUB     #20
        LD      L,A
        JR      C,LINELU2
        LD      A,H
        ADD     A,8
        LD      H,A
LINELU2 EX      AF,AF'
        SUB     E
        JR      NC,LINELU3
        ADD     A,D
        RLC     C
        JP      NC,LINELU3
        DEC     L
LINELU3 EX      AF,AF'
        DJNZ    LINELU1
        RET

LINER   CP      H
        LD      L,A
        JR      C,LINERU

        PUSH    HL
        CALL    GET_ADR
        POP     DE
        LD      B,E
        LD      A,E
        INC     D
        INC     B
        EX      AF,AF'

LINERD1 LD      A,(HL)
        OR      C
        LD      (HL),A
        RRC     C
        JP      NC,LINERD2
        INC     L
LINERD2 EX      AF,AF'
        SUB     D
        JR      NC,LINERD4
        ADD     A,E
        EX      AF,AF'
        LD      A,H
        DEC     H
        AND     7
        JP      NZ,LINERD3
        LD      A,L
        SUB     #20
        LD      L,A
        JR      C,LINERD3
        LD      A,H
        ADD     A,8
        LD      H,A
LINERD3 DJNZ    LINERD1
        RET
LINERD4 EX      AF,AF'
        DJNZ    LINERD1
        RET

LINERU  PUSH    HL
        CALL    GET_ADR
        POP     DE
        LD      B,D
        LD      A,D
        INC     E
        INC     B
        EX      AF,AF'

LINERU1 LD      A,(HL)
        OR      C
        LD      (HL),A
        LD      A,H
        DEC     H
        AND     7
        JP      NZ,LINERU2
        LD      A,L
        SUB     #20
        LD      L,A
        JR      C,LINERU2
        LD      A,H
        ADD     A,8
        LD      H,A
LINERU2 EX      AF,AF'
        SUB     E
        JR      NC,LINERU3
        ADD     A,D
        RRC     C
        JP      NC,LINERU3
        INC     L
LINERU3 EX      AF,AF'
        DJNZ    LINERU1
        RET

     Далее приведены подпрограммы расчета
адреса  в  экране  и установки точки, ис-
пользуемые при рисовании линий (установка
точки нужна только для первой процедуры).


PLOT    PUSH    HL      ;установка точки
        PUSH    DE
        EX      AF,AF'
        CALL    GET_ADR
        OR      (HL)
        LD      (HL),A
        EX      AF,AF'
        POP     DE
        POP     HL
        RET

GET_ADR LD      A,#BF   ;расчет адреса в экране
        SUB     D
        LD      D,A
        SRL     A
        SCF
        RRA
        SRL     A
        XOR     D
        AND     #F8
        XOR     D
        LD      H,A
        LD      A,E
        RLCA
        RLCA
        RLCA
        XOR     D
        AND     #C7
        XOR     D
        RLCA
        RLCA
        LD      L,A
        LD      A,E
        AND     7
        INC     A
        LD      C,B     ;сохранение B
        LD      B,A
        LD      A,1
GETADR1 RRCA
        DJNZ    GETADR1
        LD      B,C     ;восстановление B
        LD      C,A     ;маска в c
        RET

     Эти  подпрограммы  приведены  только
для  примера.  На практике лучше вставить
вычисление  адреса  и установку точки не-
посредственно  в  программу  линии  и ис-
пользовать   для   расчета  таблицы  (см.
ZX-Format N7 , "Кодинг для начинающих" ).

     В приложении  вы  найдете  исходники
этих процедур (LINE1 и LINE2).



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

От авторов - Особенности новой оболочки.

От авторов - Вступительное слово.

От авторов - Киберпанки - кто это ?

От авторов - Что такое киберпанк?

Авторы - список авторов журнала и адрес редакции.

Презентация - Авторские программы: Inter Mode Player v1.1

Презентация - Авторские программы: SPRITES GENERATOR v. 4. 7

Презентация - Авторские программы: Real COMMANDER v 1. 4

Презентация - Авторские программы: ЛАБИРИНТЫ СМЕРТИ

Презентация - Авторские программы: Кубик Рубика (DEMO)

Презентация - Авторские программы: ОСЕЛ

Презентация - Авторские программы: Крестики-Нолики

Презентация - Авторские программы: SQUARDS

Презентация - Авторские программы: ISLAND OF DARKNESS

Презентация - Авторские программы: SpectrumGuide v1. 0

Презентация - Авторские программы: TOP COPY

Презентация - Авторские программы: Что может FORTH?

Презентация - Авторские программы: ПОСЛЕДНИЙ КУРЬЕР

Презентация - Авторские программы: Орагон

Новелла - КОМПЬЮТЕРНАЯ НОВЕЛЛА.

Письма - письма читателей.

Интерфейс - компьютерные интерфейсы.

Интерфейс - О кнопках, мышах и многом другом.

Интерфейс - Немного о DOMEN OS.

Softmaking - территория закона. О проблемах пиратства на Speccy.

Спектрум - Бред о SPECCY & PC. Размышления о будущем.

Рыбинские новости - проек WAR ROBOTS.

Система - Обзор системных программ.

Система - Обзор системных программ: архиваторы ZXZIP & ZXUNZIP v1.2

Система - Обзор системных программ: копировщик Turbo Copier v 2. 0

Система - Обзор системных программ: копировщик REAL COPY

Система - Обзор системных программ: копировщик SOFT COPY v 1.3

Система - Обзор системных программ: копировщик McDonald v 2. 7

Система - Обзор системных программ: ZX Tools DeLuxe v 2.0

Система - Обзор системных программ: ассемблер XAS v 7.432

Система - Обзор системных программ: ассемблер TASM v 4.12

Система - Обзор системных программ: редактор звука SOUND FX v 1. 0

Система - Обзор системных программ: SUPER CATALOG v 1. 22

Система - Обзор системных программ: Text-Designer v 2.0

Система - Обзор системных программ: Smart boot

Система - Обзор системных программ: Total Commander v 1.4

Система - Обзор системных программ: ART Studio v 2. 1

Система - Обзор системных программ: Advancer Text Editor v 1.24

Система - Обзор системных программ: звуковой редактор Digital Wave v 0. 2

Система - Обзор системных программ: ассемблер XAS v 9.06+

Система - Обзор системных программ: копировщик Faster DiskCopyer v 2.0

Система - Обзор системных программ: копировщик RCOPY v 4.1

Система - Обзор системных программ: копировщик Master Fast Track Copyer v 2. 2

Система - Обзор системных программ: Sample Compiler v 0.3

Система - Обзор системных программ: TEST RAMDOCTOR v 2. 0

Система - Обзор системных программ: ассемблер ZXASM v 3.10 demo

Система - ТЕСТОВАЯ ПАЛАТА: операционная система для спектрума PINK FLOYD v3 (2.31)

Система - ТЕСТОВАЯ ПАЛАТА: CONSUL COMMANDER v2.7

Гости - Презентация группы JURASSIC SOFT из г.Ульяновска.

Гости - О происхождении группы ACCEPT CORP из г. Армавира.

Раскрутка - Описание и рекомендации по прохождению игры MAGICIAN LAND.

Раскрутка - Советы для лентяев по выживанию в игре MURK 3320.

Обзор игрушек - Обзор новых игровых программ: ПОСЛЕДНЯЯ АВАНТЮРА.

Раскрутка - Описание и рекомендации по прохождению игры СРЕДНЕВЕКОВАЯ ИСТОРИЯ.

О вирусах - Virus 6.05b & Virus 7.06b.

Обмен опытом - Обработка ошибок TR DOS.

Обмен опытом - DIGITAL MUSEC + SCORPION - схемы подключения AY.

Обмен опытом - QUILL редактор адвентюр - достоинства и недостатки.

Обмен опытом - Быстрые процедуры линии.

Оттяг - вступление.

Оттяг - Что такое законченный урод.

Оттяг - Инструкция по знакомству с девушкой для чайников...

Оттяг - 20 вещей, которые девушка может запихнуть себе куда подальше.

Оттяг - Тест "Хорошо ли ты знаешь спектрумовскую сцену"?

Оттяг - Тест "На сколько ты любишь пиво".

Оттяг - Пивное ревю.

Оттяг - Винни - Пух и все - все - все.

Оттяг - Восточная баллада о доблестном менте.

Новелла - Новелла "МАРАФОН ЗОМБИ" (по мотивам игры "ZOMBI").

Обзор игрушек - Обзор новых игровых программ: TECHNODROM

Обзор игрушек - Обзор новых игровых программ: PRO GOLF SINULATOR

Обзор игрушек - Обзор новых игровых программ: ПОСЛЕДНЯЯ АВАНТЮРА

Обзор игрушек - Обзор новых игровых программ: ELOPEMENT

Обзор игрушек - Обзор новых игровых программ: CATCH 23

Обзор игрушек - Обзор новых игровых программ: ARENA

Обзор игрушек - Обзор новых игровых программ: VINDICATORS

Обзор игрушек - Обзор новых игровых программ: SWORD OF THE SAMURAI

Обзор игрушек - Обзор новых игровых программ: Q10 TANK BUSTER

Обзор игрушек - Обзор новых игровых программ: NINJA SPIRIT

Обзор игрушек - Обзор новых игровых программ: СТАЛКЕР

Конкурс - Итоги конкурса художников.

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


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

Похожие статьи:
Юмор - Правдивая история про день рождения JAKSH'а.
Assembly - отчет Петра Соболева с буржуйского пати Assembly 1999 (Часть 3).
Дебют - прохождение "ZZZZ" - оригинальная адвентюрная юмористическая игра.
Editorial - "кажется невероятной сама мысль, что, новому номеру genz'а быть".
Вступление - Итак, SEA QUEST... Эта игра была задумана нами с Тарасиком. К сожалению, вышло только играбельное дэмо, состоящее из одного уровня.

В этот день...   21 ноября