Код:
; подпрограма вывода спрайта
; входные параметры: HL=адрес спрайта, D=вертик.координата вывода на экране, E=гориз.координата вывода на экране
; выходных параметров нет
PUTSPR LD A,(HL)
AND A
RET Z ; выход, если пустой спрайт
LD B,A
PUTS1 PUSH BC ; B = количество знакомест в спрайте
INC HL
LD A,(HL)
ADD A,D
LD B,A
INC HL
LD A,(HL)
ADD A,E
LD C,A
INC HL
PUSH DE ; DE = координаты спрайта на экране
EX DE,HL ; DE = адрес нахождения в спрайте, HL = свободно
LD A,B ; расчет адреса первого байта знакоместа в HL
LD H,A
RRCA
RRCA
RRCA
AND A,224
ADD A,C
LD L,A
LD A,H
AND 24
OR 64
LD H,A ; HL = адрес вывода знакоместа на экране, DE = адрес изображения в спрайте
; вывод знакоместа (8 строк)
LD A,(DE)
LD (HL),A ; вывели байт спрайта
INC DE
INC H
LD A,(DE)
LD (HL),A ; вывели байт спрайта
INC DE
INC H
LD A,(DE)
LD (HL),A ; вывели байт спрайта
INC DE
INC H
LD A,(DE)
LD (HL),A ; вывели байт спрайта
INC DE
INC H
LD A,(DE)
LD (HL),A ; вывели байт спрайта
INC DE
INC H
LD A,(DE)
LD (HL),A ; вывели байт спрайта
INC DE
INC H
LD A,(DE)
LD (HL),A ; вывели байт спрайта
INC DE
INC H
LD A,(DE)
LD (HL),A ; вывели байт спрайта
EX DE,HL ; HL = адрес нахождения в спрайте
POP DE ; HL = адрес нахождения в спрайте, DE = координаты спрайта на экране
POP BC ; B = цикл по количеству знакомест в спрайте
DJNZ PUTS1
RET
; спрайты
SPRITE01
DEFB 14 ; количество знакомест в спрайте
DEFB 14,3, 0,0,0,0,0,0,255,255 ; знакоместо 1: координата y, координата x, 8 байтов изображения
DEFB 15,3, 0,23,20,243,0,0,0,0 ; знакоместо 2
... и так 14 знакомест ...
Код:
LD B,Y
LD C,X
LD A,B
LD H,A
RRCA
RRCA
RRCA
AND A,224
ADD A,C
LD L,A
LD A,H
AND 24
OR 64
LD H,A ; HL = адрес вывода знакоместа на экране