DOWN HL — различия между версиями
Материал из SpeccyWiki
Zxdn (обсуждение | вклад) |
|||
Строка 2: | Строка 2: | ||
Из названия процедуры следует, что адрес находится в регистровой паре HL. Также используются варианты этой процедуры для других регистровых пар. Существует несколько версий процедуры, отличающихся размером и быстродействием, а также оформлением в виде подпрограммы или макроса. Время выполнения процедуры зависит от адреса текущей пиксельной строки. | Из названия процедуры следует, что адрес находится в регистровой паре HL. Также используются варианты этой процедуры для других регистровых пар. Существует несколько версий процедуры, отличающихся размером и быстродействием, а также оформлением в виде подпрограммы или макроса. Время выполнения процедуры зависит от адреса текущей пиксельной строки. | ||
+ | В случае реализации функционала в виде отдельной процедуры, условные переходы необходимо заменить на условный возврат (JR Z,EXIT -> RET Z). | ||
<code><pre> | <code><pre> | ||
Строка 19: | Строка 20: | ||
ADD A,-8 | ADD A,-8 | ||
LD H,A ;CY=1 | LD H,A ;CY=1 | ||
+ | EXIT: | ||
+ | |||
+ | UP_HL: | ||
+ | LD A,H | ||
+ | DEC H | ||
+ | AND 7 | ||
+ | JR NZ,EXIT | ||
+ | LD A,L | ||
+ | SUB 32 | ||
+ | LD L,A | ||
+ | JR C,EXIT | ||
+ | LD A,H | ||
+ | ADD A,8 | ||
+ | LD H,A | ||
+ | EXIT: | ||
</pre></code> | </pre></code> | ||
[[Категория:Программирование]] | [[Категория:Программирование]] |
Версия 05:51, 31 июля 2012
DOWN HL, UP HL — широко используемые при программировании графики процедуры для перехода к следующей и предыдущей пиксельной строке экрана с учётом нелинейной раскладки видеопамяти, то есть с переходом между строками знакомест и третями экрана.
Из названия процедуры следует, что адрес находится в регистровой паре HL. Также используются варианты этой процедуры для других регистровых пар. Существует несколько версий процедуры, отличающихся размером и быстродействием, а также оформлением в виде подпрограммы или макроса. Время выполнения процедуры зависит от адреса текущей пиксельной строки. В случае реализации функционала в виде отдельной процедуры, условные переходы необходимо заменить на условный возврат (JR Z,EXIT -> RET Z).
;В этом варианте процедуры также используется флаг переноса.
;Он установлен, если был переход к следующей строке знакомест.
DOWN_HL:
INC H
LD A,H
AND 7
JR NZ,EXIT ;CY=0
LD A,L
ADD A,32
LD L,A
JR C,EXIT ;CY=1
LD A,H
ADD A,-8
LD H,A ;CY=1
EXIT:
UP_HL:
LD A,H
DEC H
AND 7
JR NZ,EXIT
LD A,L
SUB 32
LD L,A
JR C,EXIT
LD A,H
ADD A,8
LD H,A
EXIT: