было бы удобнее вот так примерно:
Код:
port_y equ 0x89
;в DE адрес = координата по X
;в HL адрес данных
ld b,8
in a,(port_y)
loop: ld a,(hl)
ld (de),a
inc hl
inc a
out (port_y),a
djnz loop
тут координатой Y управляем через порт. данные соответственно для стандартного экрана( пикселя, 1 бит на точку). тогда и думать не нужно о расчётах следующей строки. просто указали нужную строку в порт и кидаем данные от 0 до сколько-там максимум по X. если прикрутить сюда линейный акселератор, то ещё и скорости добавится.
Код:
port_y equ 0x89
;в DE адрес = координата по X
;в HL адрес данных
;данные расположены не "горизонтально", а "вертикально" (спрайт заранее развёрнут на 90гр).
ld d,d ; включить Аксель
ld a,8 ; задали размер данных (8 байт, т.е. строк)
ld b,b
ld a,a ;вертикальный перенос
ld a,(hl)
ld (de),a
ld b,b
inc hl
inc de
если ничего не напутал, тогда данные будут забивать 8 строк по 1 байту, при условии, что графика аля спектрум. при цветном выводе (цвет на точку) нужно добавить цикл. акселератор забивает видеопамять в разы быстрее проца. координатой Y рулить не требуется. после отработки акселя значение координаты Y будет увеличено на размер прокинутых данных акселем.