Да вообще фиксированный размер очень удобен. Сначала я написал умный вывод спрайта, с циклами и подсчётом разной фигни, потом всё переделал в пользу скорости. У меня получился вывод спрайта 8х4 вот таким:
Код:
SPRITE_8X4_T:
PUSH H
PUSH D
LXI B, line - 7
CALL SPRITE_ROW_8
DAD B
CALL SPRITE_ROW_8
DAD B
CALL SPRITE_ROW_8
DAD B
CALL SPRITE_ROW_8
POP D
POP H
LXI B, 8
DAD B
RET
SPRITE_ROW_8:
LDAX D
MOV M, A
INX H
INX D
LDAX D
MOV M, A
INX H
INX D
LDAX D
MOV M, A
INX H
INX D
LDAX D
MOV M, A
INX H
INX D
LDAX D
MOV M, A
INX H
INX D
LDAX D
MOV M, A
INX H
INX D
LDAX D
MOV M, A
INX H
INX D
LDAX D
MOV M, A
INX D
RET
В HL кладём адрес знакоместа на экране, откуда начнётся прорисовка спрайта, в DE кладём адрес спрайта в памяти. После вывода спрайта вызываем подпрограмму ещё раз, и она заполняет следующий кусок экрана по горизонтали этим же спрайтом. Так можно шлёпать текстуры.
Код выглядит большим и колхозным, но работает быстрее. Видимо всю графику сведу к спрайтам 4х2, 4х4, 6х6 и 8х4.