У меня как-то так получилось:
58 тактов / байт
Код:
LD HL,#401F
DUP 32 ; SCROLL 3
LD C,(HL)
RL C
EX AF,AF'
RL C
EX AF,AF'
RLA
RL C
RRA
LD (HL),C
DEC L
EDUP
Стековый вариант 57,5 тактов на байт
Если использовать прямую адресацию LD HL,(nn) / LD (nn),HL — получим 56 тактов на байт.
Код:
LD (STACK+1),SP
LD HL,#401E
DUP 16 ; SCROLL 3
LD SP,HL
DEC L
DEC L
POP DE
RL D
EX AF,AF'
RL D
EX AF,AF'
RLA
RL D
RRA
RL E
EX AF,AF'
RL E
EX AF,AF'
RLA
RL E
RRA
PUSH DE
EDUP
STACK:
LD SP,#0000
Если пишем стеком LD HL,(nn) / PUSH HL немного быстрее будет — 53,5 такта на байт.
Код:
ADR=#401E
LD (STACK+1),SP
LD SP,#4020
DUP 16 ; SCROLL 3
LD HL,(ADR)
RL H
EX AF,AF'
RL H
EX AF,AF'
RLA
RL H
RRA
RL L
EX AF,AF'
RL L
EX AF,AF'
RLA
RL L
RRA
PUSH HL
ADR=ADR-2
EDUP
STACK
LD SP,#0000
Вариант без EX AF,AF', по скорости одинаково.
Код:
ADR=#401E
LD (STACK+1),SP
LD SP,#4020
DUP 16 ; SCROLL 3
LD HL,(ADR)
RL H
RLA
RL H
RLA
RL H
RRA
RRA
RL L
RLA
RL L
RLA
RL L
RRA
RRA
PUSH HL
ADR=ADR-2
EDUP
STACK
LD SP,#0000