(c) Кобяков М.В., г.Находка
Эта процедура была вытащена
мной из игры "SPACE CRUSADE" и
немного доработана (программа
зажигания спрайта).
140.
ORG 50000
ENT
LD HL,16384
LD DE,BUFF+3
LD BC,32
;координаты верхнего левого угла
;спрайта в дисплейном файле
;и высота спрайта в пикселах
L1 PUSH BC
PUSH HL
LD B,32 ;ширина
;спрайта
LDIR
POP HL
140. CALL DLINE
POP BC
DJNZ L1
PUSH IY
AGAIN CALL FIRE
LD A,#7F
IN A,(254)
RRA
JR C,AGAIN
POP IY
RET
FIRE CALL RND
AND 31
LD D,A
CALL RND
LD E,A
PUSH DE
POP IY
LD IX,BUFF+3
LD C,32
LD HL,16384
;высота спрайта в пикселах и
;координаты верхнего левого
;угла спрайта, выводимого на
;экран
LD E,L
LD D,H
OH2 PUSH HL
LD B,32
OH1 XOR (IY+0)
OR (IY+1)
AND (HL)
OR (IX+0)
LD (DE),A
INC L
INC E
INC IX
INC IY
DJNZ OH1
POP HL
LD E,L
LD D,H
CALL DLINE
DEC C
LD A,B
OR C
JR NZ,OH2
RET
RND PUSH DE
PUSH HL
LD A,R
LD L,A
LD A,(BUFF)
ADD A,L
XOR 7
RLCA
ADD A,31
LD (BUFF),A
LD HL,(BUFF+1)
LD DE,29711
ADD HL,DE
RLC L
LD (BUFF+1),HL
XOR L
XOR H
POP HL
POP DE
RET
DLINE INC H
LD A,H
AND 7
RET NZ
LD A,L
ADD A,32
LD L,A
RET C
LD A,H
SUB 8
LD H,A
RET
BUFF DEFB 0
START: 50000
LEN: 145 байт
2
Теперь небольшой комментарий
к программе. Перво-наперво, на-
до поместить спрайт на экран и
запустить программу, которая тут
же начинает вводить его в па-
мять. Место под спрайт зарезер-
вировано под меткой BUFF + 3
байта смещения. Да, не забудьте
указать координаты левого вер-
хнего угла спрайта в дисплейном
файле и его высоту в пикселах и
ширину в знакоместах. В данном
примере заданы координаты само-
го верхнего левого угла экрана
(16384), высота равная 32 пиксе-
ла и ширина 32 знакоместа.
Под меткой RND вызывается ге-
нератор псевдослучайных чисел.
Под меткой FIRE - собственно,
сама процедура "горения".
* * *