Продолжаем скоростную оптимизацию базовых игровых процедур:
Задача, экстремально быстро расчитать адрес атрибутов. Без таблиц.
Входные параметры: Есть Х (0..255), Y (0..192).
Можно ли быстрее чем 77 тактов? :)
Вид для печати
Продолжаем скоростную оптимизацию базовых игровых процедур:
Задача, экстремально быстро расчитать адрес атрибутов. Без таблиц.
Входные параметры: Есть Х (0..255), Y (0..192).
Можно ли быстрее чем 77 тактов? :)
22528+(Y and 248)*4+X/8
другое дело, как сдвигать влево или вправо.
я набросал, но получилось 95 тактов. оптимизировать можно, но получатся те же 77 тактов, в лучшем случае. Вместо двубайтовых сложений в лоб - использовать однобайтовые (вместо 22528 добавлять только #58 к старшему байту и т.п.)
upd. чуть оптимизировал, вышло 80, без инициализаци (пару регистров надо занулить). у тебя 77 с инициализацией? Тогда сяду #58(00) делить на 4, чтобы потом умножить на 4 и сэкономить :)
upd2:
вот что вышло, может и заработает
;вход: a=X , l=Y
rra:rra:rra;12
and 224;7 смещение по х
ld h,#58/4 ;7
add hl,hl:add hl,hl;30
add a,l: ld l,a :adc a,h: ld h,a ;16
;/72
upd.3 - выше косяк - не обрезал Y три младших бита, был взволнован :)
;вход: a=X , l=Y
rra:rra:rra;12
and 224;7 смещение по х
ld h,#58/4 ;7
add hl,hl:add hl,hl;30
add a,l: and 31: ld l,a :adc a,h: ld h,a ;23
;/79
показывай свою :)
rra rra rra and 31 ;19 тактов
через RR - 24
вообще, с пикселями возиться без таблиц - неблагодарное дело. тем более с атрибутом каждого пикселя, а не 8х8=64. Получается до 64 х 77 тактов лишней работы, вместо 1х77
гы, я и забыл, что RLC жрет 4 такта, тока мозгов посчитать как у тебя Y=191 считается мне не хватило. Но, интуитивно чувствую, что твой и мой методы можно объединить :)
Эту мозголомную часть, я долго мучал :) Но результатом пока не удовлетворён.
---------- Post added at 17:54 ---------- Previous post was at 17:48 ----------
Это наводит на мысль, что может Y/8 через экранные таблицы вытащить...:)
---------- Post added at 19:08 ---------- Previous post was at 17:54 ----------
ты определись с верхним уровнем, зачем каждый пиксель мучить, если нужно ставить атрибуты лишь последнему.