
Сообщение от
izzx
Причём нули пропускаются, не выводятся. Поэтому не надо маски.
Но тогда получается, что затираем сразу два "пикселя" экрана (карты), даже если один из них пустой в спрайте. Или там у спрайтов все "пиксели" по два шириной?

Сообщение от
izzx
Вот переделывать формат спрайтов мне меньше всего охота было )
А надо бы =)) Ибо вертикальный вывод плюс еще пересчет адресов строк сжирают кучу времени.

Сообщение от
izzx
При быстром выводе через ld (NN),hl хитрый формат спрайта почти не влияет на скорость
Не, это другие команды. LD (NN),HL подходит для переброса карты через стек по 2 байта сразу, а вот спрайты без стека и побайтово, через LD (HL),N - стек не трогается.
То бишь каждый спрайт развертывается в кусок кода. Например, спрайт (условно) 4х4 пикселя, пустой байт - ноль, заполненный (1) - FF. Сам спрайт такой:
0110
1111
1001
0110
Код вывода для него развертывается вот в такой кусок:
Код:
INC L ;0
LD (HL),#FF ;1
INC L
LD (HL),#FF ;1
INC L ;0, INC для корректного пересчета HL
ADD HL,BC
LD (HL),#FF ;1
INC L
LD (HL),#FF ;1
INC L
LD (HL),#FF ;1
INC L
LD (HL),#FF ;1
ADD HL,BC
LD (HL),#FF ;1
INC L
INC L ;0
INC L ;0
LD (HL),#FF ;1
ADD HL,BC
INC L ;0
LD (HL),#FF ;1
INC L
LD (HL),#FF ;1
RET ; последний INC уже не нужен,
; если код развертки это обработает
Для перехода вниз на строку достаточно одной команды ADD HL,BC. Усеченные спрайты (по ширине) будут выводиться еще быстрее.
В данном конкретном примере #FF можно было бы заменить на регистр, но в реальности там будут разные значения, потому - числами.
Согласен, переделывать формат и вывод - занятие не на полчаса, но если уж делать, то делать =))