Это 33 такта на байт (кстати, перепутаны местами h и l).
А почему не 32 такта на байт:
Или даже 31.6 такта на байт:Код:POP HL 10 POP DE 10 RR L 8 RR H 8 RR E 8 RR D 8 EX AF,AF' 4 RR L 8 RR H 8 RR E 8 RR D 8 EX AF,AF' 4 LD (nn),HL 16 LD (nn),DE 20
Теоретически, на практике не проверял.Код:POP HL 10 POP DE 10 POP BC 10 RR L 8 RR H 8 RR E 8 RR D 8 RR C 8 RR B 8 EX AF,AF' 4 RR L 8 RR H 8 RR E 8 RR D 8 RR C 8 RR B 8 EX AF,AF' 4 LD (nn),HL 16 LD (nn),DE 20 LD (nn),BC 20
Сдвиг на 3 бита самый медленный Уж лучше таблицами.
---------- Post added at 07:32 ---------- Previous post was at 07:26 ----------
Titus, Ради спортивного интереса буду раз если поковыряешь моё творчество
http://zx-pk.ru/showthread.php?t=23544
Может есть идеи как оптимизировать?
Titus, это версия без таблиц. К сожалению оказалось менее универсальной и более тормозной для разно размерных спрайтов, если в неё внедрять изменение длины спрайта "на лету". Использовать стек, я думал.. но выходило тормознее.
Сейчас уже, в текущей версии кода, я всё переделал под таблицы и стек. По скорости одинаково вышло.
Просто основной приём, сдвига на 3 интересный получился за счет уже сдвинутого на 1 копирования в буфер скролирования
Дальше применяем RLD или RRD и получаем сдвиг на 3 более быстрый чем делать RL (HL). Жаль, что RLD/RRD не работают в регистрах.
Последний раз редактировалось drbars; 03.04.2015 в 07:16.
Titus, в актуальном баланс между размером и скоростью главное. Была бы возможность строить мегакод для спрайтов в локации... но её нет.
Можно еще задействовать альтернативные регистры (EXX). И тогда может оправдять себя переставление SP (LD SP,nn) и запись в память через PUSH.
В пределе имеем (при неограниченном кол-ве регистров):
2x RL r - 16 тактов на байт
1x PUSH rp, 1xPOP rp на каждые 2 байта, 21/2=10.5 тактов на байт
поэтому любой алгоритм такого типа не сможет сделать быстрее, чем 26,5 тактов на байт. Это без учета установок SP, без учета EXX.
Но даже и с такой оптимистической скоростью, если скроллить одну треть экрана - то это будет более 54272 тактов. За один фрейм больше, чем 1/3 экрана, не проскроллишь.
Поэтому я думаю, что в реальных играх и демах нужно использовать трюки, создавать иллюзию скролла, а не сам скролл. Типа как в Sea Dragon тайловая графика.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)