Codemania #01
31 декабря 1999

  Специально   для   Хирурга   и
Бластера.

--------------------------------
================================
********************************
================================
--------------------------------

  Не  самая  медленная процедура
вывода  спрайтов 2*2 с точностью
до пиксела.

  Немного  теории.  Как наверное
уже  всем  ясно, что если спрайт
раскладывать на точки и выводить
по  точкам,  то  тормозить будет
страшно,   по   этому  применяют
всякие хитрости.

  Есть спрайт 2*2 знакоместа. По
вертикали его сдвинуть просто, а
вот по горизонтали...Значит так,
заготавливаем заранее 8 спрайтов
2*3  знакоместа, заранее сдвину-
тых  по горизонтали, а потом вы-
водим  нужный.  Но  это  годится
только  тогда, когда спрайтов не
очень  много.  А  если  их  50 ?
2*3*8 - размер одного спр.2*Ззн.
Их 8 - 2*3*8*8. А всего - 50 ...
2*3*8*8*50=6*64*50=64*300=19200.
Однако  для крупной проги 50 это
мало,  и  не одними же спрайтами
жив человек - музон, сама прога.
Вывод один - сдвигать спрайты во
время  вывода. В  конце  рубрики
можно найти и саму прогу вывода,
которая  выводит  спрайт  по OR.
Сама  прога  не  сильно  сложна,
главное понять идею. В проге три
основных процедурки:
 PTBL_S - сдвиг 2 байт из (hl) и
(hl+1) и рез.в B',C',D'.
 PTBL_O - вывод  3 байт на экран
с  учетом  того,  что  экран  не
бесконечен.
 PTBL_D - т.к.  в DE адр.в экр.,
то эта процедурка сдвигает DE на
один пиксель вниз.

HL-ADRESS SPRITE
B-COORD_Y (0..191)
C-COORD_X (0..255)

PTBL    CALL PTBL_A
        LD B,8*2
PTBLO   CALL PTBL_S
        CALL PTBL_O
        CALL PTBL_D
        LD A,D
        CP #58
        RET NC ;OUT OF SCR
        DJNZ PTBLO
        RET

PTBL_D  INC D ; DOWN_DE
        LD A,D
        AND 7
        RET NZ
        LD A,E
        ADD A,#20
        LD E,A
        RET C
        LD A,D
        SUB 8
        LD D,A
        RET

PTBL_O  PUSH DE
        EXX
        LD A,B
        EXX
        LD (DE),A
        INC E
        LD A,E
        AND 31
        JR Z,PTBL_O0 ;OUT OF SCR
        EXX
        LD A,C
        EXX
        LD (DE),A
        INC E
        LD A,E
        AND 31
        JR Z,PTBL_O0 ; -//-
        EXX
        LD A,D
        EXX
        LD (DE),A
PTBL_O0 POP DE
        RET

PTBL_S  LD A,(HL)
        INC HL
        EXX
        LD B,A
        EXX
        LD A,(HL)
        INC HL
        EXX
        LD C,A
        EXX
        LD A,C
        EXX
        LD D,0
PTBL_S0 AND A
        JR Z,PTBL_S1
        RR B
        RR C
        RR D
        DEC A
        JR PTBL_S0
PTBL_S1 EXX
        RET

PTLB_A  LD A,B
        RRCA
        RRCA
        RRCA
        AND #18
        OR #40
        LD D,A
        LD A,B
        AND 7
        ADD A,D
        LD D,A
        LD A,B
        RLCA
        RLCA
        AND #E0
        LD E,A
        LD A,C
        RRCA
        RRCA
        RRCA
        AND #1F
        ADD A,E
        LD E,A
        LD A,C
        AND 7
        LD C,A
        RET

--------------------------------
================================
********************************
================================
--------------------------------

  The end. Mad Z-Group (C)2000.
   Main  editor :  Slavik/ZGR.
    Music  made  by  uncnown.



Other articles:


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

Similar articles:
Advertising - Ppodam, buying, exchanging ppogpammy for the ZX Spectrum.
Interface - the story of creating a virtual party of Antique Toy.

В этот день...   21 November