PDA

Просмотр полной версии : Запутался в процедуре отрисовки спрайта



Bedazzle
04.09.2016, 13:09
Медитирую, но не могу разобрать магию с регистром А.
Так понимаю, в 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 получится ноль.

:)

Reobne
04.09.2016, 19:11
Обычно пишут
sbc a,a
тут тебе сразу и обнуление, и знак расширяется во все 8 бит.
Это, кстати, так и называется "расширение знака". :)

Bedazzle
04.09.2016, 20:31
Обычно пишут
sbc a,a
тут тебе сразу и обнуление, и знак расширяется во все 8 бит.
Это, кстати, так и называется "расширение знака". :)

Спасибо, поэкспериментирую!