А знает кто-нибудь быстрый способ поскроллить строчку на экране на 2 пиксела в одном цикле перебора байтов? Ну, вернее, есть ли способ быстрее, чем 2 раза подряд на 1 пиксел?
Вид для печати
А знает кто-нибудь быстрый способ поскроллить строчку на экране на 2 пиксела в одном цикле перебора байтов? Ну, вернее, есть ли способ быстрее, чем 2 раза подряд на 1 пиксел?
Так определись, чего именно скролить... потом уже процедуру придумывай.
с табличками это примерно так
по алгоритмуКод:ld bc,head_table
dup nn
ld a,(de)
ldi
ld l,a
ld h,b
ld h,(hl)
edup
данный скроллер позволяет скроллить на расстояние от 1 до 6 бит без изменения программы
и соответственно таблицы занимают от (2+1)*256 до (64+1)*256
как это работает:
у нас есть так называемая head_table где прописаны адреса таблиц скролла откуда мы уже берем сдвинутые данные для следующего байта.
генератор головной таблицы
генератор таблиц скроллаКод:ld hl,head_table
ld de,roll_table
ht0
ld a,l
and #03 ;размерность таблицы 2 бита (сдвиг на 2)
add a,d
ld (hl),a
inc l
jr nz,ht0
Код:ld hl,roll_table
ld bc,#0400 ;размерность таблицы (2 бита *2 значения)
rt0
push bc
rt1
ld b,2 ; на сколько битов скролл
ld a,c
ld (hl),l
rt2
rra
rr (hl)
djnz rt2
inc l
jr nz,rt1
inc h
pop bc
inc c
djnz rt0
Сразу скажу - такты не считал.
Но попробуй - может так быстрее будет ?
pop hl
rr h
rr l
ex af,af'
rr h
rr l
ex af,af'
push hl
dec sp
dec sp
(или INC sp - смотрю куда крутить ну и RR или RL)