
Сообщение от
ALKO
Если в Бейсцык RETиться не собираюсь, то не страшно ведь?
Смотри, как было предложено выше, формат спрайта
Первый байт ширина
Второй байт высота
Дальше идут все байты спрайта.
При вызове процедуры печати берёшь первый байт, вносишь его значение в то место, где инициализируется цикл, отвечающий за проход по ширине.
Также вычисляешь смещение по горизонтали, вносишь туда, где идёт приращение адреса.
Берёшь второй байт, вносишь туда, где инициализируется цикл, отвечающий за кол-во строк по высоте.
Дальше используешь свою процедуру, которую ты приводил в начале.
P.S.
если спрайтов дофига, и нужно экономить память, то если размер не превышает 16х16, можно кодировать размер в один байт - ширина 4 бита, и высота 4 бита.
Скажем, так
Код:
sprite:
db %WWWWHHHH
db ..... ..... ; тут идут данные спрайта
ld hl, sprite
ld a,(hl)
and %00001111 ; получили высоту
ld (DRAW_SPRITE2-1), a
ld a,(hl)
rrca
rrca
rrca
rrca
and %00001111 ; получили ширину
ld (DRAW_SPRITE1-1), a
ld c, a
ld a, 64 ; buffer_width
sub c ; вычислили ширину приращения в буфере
ld (SCREEN_ADD-1), a
inc hl
и дальше отрисовка спрайта