Код:
; подпрограмма вывода спрайта
; входные параметры: HL=адрес спрайта, DE=координаты знакоместа для вывода на экране (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 = свободно
PUSH BC ; BC = реальные координаты спрайта на экране
LD A,B ; расчет адреса атрибутов знакоместа в HL
RRCA
RRCA
RRCA
LD L,A
AND 31
OR 88
LD H,A
LD A,L
AND 252
OR C
LD L,A
POP BC ; BC = реальные координаты спрайта на экране
LD A,(DE) ; читаем байт атрибутов знакоместа в спрайте
LD (HL),A ; заносим атрибуты знакоместа на экран
INC DE
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
SPRITE1 ; метка-адрес спрайта
DEFB 24 ; количество знакомест
DEFB 1,5,1, 0,7,125,0,15,12,8,8 ; знакоместо 1: вертик.координата, гориз.координата, байт атрибутов, 8 байт изображения
DEFB 1,6,1, 0,0,0,0,255,255,13,0 ; знакоместо 2
... ; остальные 22 знакоместа