Медитирую, но не могу разобрать магию с регистром А.
Так понимаю, в IX окажется адрес со смещением на 12 минус удвоенная ширина спрайта?
Как оно работает? Не понятна часть где sbc.
Код:
....
ld bc, (SAV_SPR_HEIGHT) ; B = cellwidth, C = pixheight
ld a, b ; A = cellwidth
dec a
add a, a ; A = (cellwidth - 1) * 2
sub #0A ; #0A = (6-1)*2 ; 6 = max cellwidth of sprite
ld e, a
ld a, 0
sbc a, 0
ld d, a
add ix, de ; ix=destination adr
....
- - - Добавлено - - -
Написал, и похоже, сам уже понял
sbc учитывает CY, который получен в sub #0A. Если ширина спрайта меньше 6, то sbc a, 0 даёт в результате FF, и в de у нас будет отрицательное число. А если ширина равна 6, то CY сброшен, и в de получится ноль.