Ну, у тебя же и так 57 тактов на байт (если inc e).
А будет 16 (pop bc:ld (hl),c/b:inc h) + 22 (rld:dec l) + 16 (pop bc:ld (hl),c/b:inc l) = 54. Сплошная выгода. Если не считать памяти.
Вид для печати
Ну, у тебя же и так 57 тактов на байт (если inc e).
А будет 16 (pop bc:ld (hl),c/b:inc h) + 22 (rld:dec l) + 16 (pop bc:ld (hl),c/b:inc l) = 54. Сплошная выгода. Если не считать памяти.
Одна идейка (просьба сильно не бить, мог напутать в показаниях):
Затраты памяти- 512 байт на таблички.Код:;алгоритм вывода со сдвигом через две таблицы
*out++ = Hi2Lo[*in];
dup W-2
*out = Lo2Hi[*in++];
*out++ |= Hi2Lo[*in];
edup
*out = Lo2Hi[*in];
;примерный код
;hl - in de- out
;b - 'Hi2Lo
ld c,(hl) ;Hi2Lo + *in 7
ld a,(bc) ;Hi2Lo[*in] 7
ld (de),a ;*out++ 7
inc e ; 4
;=25
dup W-2
inc b ;Lo2Hi + *in 4
inc l ;in++ 4
ld a,(bc) ;Lo2Hi[*in++] 7
ld (de),a ; 7
dec b ; 4
ld c,(hl) ;Hi2Lo + *in 7
ld a,(bc) ;Hi2Lo[*in] 7
ex de,hl ; 4
or (hl) ;*out |= 7
ld (hl),a ; 7
inc l ;out++ 4
ex de,hl ; 4
edup ;=66 per cycle
inc b ;4
ld a,(bc) ;7
ld (de),a ;7
;=18
; E=25+18+66*(W-2) на линию
alone, Понял! Берём второй тайл уже сдвинутым. С памятью уже знаю как поступить, целиком дублировать не понадобится, анимированные тайлы сдвигать мне не надо. 4Кб в страничке ещё есть, может и хватит...
---------- Post added at 20:08 ---------- Previous post was at 19:32 ----------
Vitamin,
>на линию
Но мне-то хочется в столбик =)
Vitamin, ну попробую понять, не можешь словами ещё описать? А то для меня асм почти write-only язык =(
Alex Rider,
Под вариант 3 памяти нетЪ.
>2) щелкать страницами
А может ли он быть быстрее переброса через стек?
Может ли вообще существовать такой вариант в разумном исполнении? Потому что переброс стеком - 13 тактов на байт, а попробовал пощёлкать:
ld bc,#7FFD
pop de: ld a,bank: out (c),a: ld a,(hl):and d: or e:ld (hl),a:inc l: ld a,bank: out (c),a
И лишних 19т/б. Может exx как-то можно задействовать?
Тут надо считать такты жоско, я ща не в состоянии прикинуть. С exx подстава в том, что адрес второго экрана у тебя в hl, он же тоже переключится на альтернативный... Как вариант - прикинь такие расклады:
-- bc тоже используется для переброски, а #7ffd в него заносится на каждой итерации (или используется альтернативный, например, а в de' хранятся исходная и целевая банки);
-- адрес хранится в ix/iy. Тогда можешь тягать одновременно bc (см. преыдущий пункт), de, hl, bc', de', hl'. Но! Операции с индексными регистрами ну очень меленные :(
-- как более мягкая альтернатива предыдущему пункту - для переброски используются bc, de, ix, iy, в альтернативных - 7ffd и банки.
Пока больше ничего выдумать не могу. Мне тут не так давно надо было крутить спрайт и кидать его на экран - использование альтернативных и индексных регистров сильно ускорило алгоритм. Но там ну очень уж частный случай.
Даже rld:ldd вместо последних двух. Итого 50.
---------- Post added at 12:04 ---------- Previous post was at 12:02 ----------
Нет, все тайлы без копий.
---------- Post added at 12:08 ---------- Previous post was at 12:04 ----------
Переброс в буфер сам по себе даёт ускорение. Не вижу смысла от него отказываться и усложнять задачу.
Кстати, на 48К (один экран) спрайты всё равно надо накладывать в буфере. Так что и для 48К это тоже выгодно.
Быструю и не сильно жручую по памяти переброску на экран можно сделать через pop: pop: pop: pop ... push: push: push: push.
Это для одного спрайта, так как адреса фиксированные. Если делать pop hl:ld hl,(nn), то будет 13 тактов вместо 12,5 на байт, но и перемещать в буфер можно будет любой спрайт, а не один =)
---------- Post added at 14:40 ---------- Previous post was at 14:29 ----------
63 у меня =(
С inc e подумаю.
Выводим столбец. В нём есть 4 пикселя от левого и 4 от правого тайлов.
В bc попаются данные левого тайла, из (de) берутся данные правого. В (hl) - экран. Вот полный код на две линии.
Мозг в ступоре, пытаюсь осилить примеры.Код:pop bc ;10
ld a,(de) ;7
inc de ;6
ld (hl),c ;7
rra
rra
rra
rra ;16
rld ;18
inc h ;4
;;
ld a,(de)
inc de
ld (hl),b
rra
rra
rra
rra
rld
inc h
---------- Post added at 14:43 ---------- Previous post was at 14:40 ----------
Куда push? Oo
Одно знакоместо надо же в ширину.