moroz1999, если строку буфера (FRAMEBUFFERLINE) задать в 32 байта, то можно будет INC HL заменить на INC L, что даст -2 такта на каждую строку спрайта. 192 строки х 16 спрайтов в строке х 2 такта = -6144.
moroz1999, если строку буфера (FRAMEBUFFERLINE) задать в 32 байта, то можно будет INC HL заменить на INC L, что даст -2 такта на каждую строку спрайта. 192 строки х 16 спрайтов в строке х 2 такта = -6144.
Последний раз редактировалось Aprisobal; 06.04.2008 в 15:10.
ATW4GS / BIN2SNA / SquareMania <ТИ-3> / Ужасм+
ATM-Turbo 512 v4.50, Commodore 64G + TAC-2, Retro-Bit Super Retro TRIO
ldi имеет неуправляемый фактор инкремента.
dup 4
ldi
ldi
dec de
ldd
ldd
inc de
inc d
edup
E=4*(16+16+6+16+16+6+4)=4*80=320ticks
dup 4
pop de
ld (hl),e
inc l
ld (hl),d
inc h
pop de
ld (hl),d
dec l
ld (hl),e
inc h
edup
E=4*(10+7+4+7+4+10+7+4+7+4)=4*64=256ticks
на 25% быстрее всетки...
я имел ввиду так:
bc=размер спрайта
и в начале jr для "впрыгивания" в цикл в зависимости от d, после вызов знакоместа целиком и ещё раз "впрыгивание" в цикл для дорисовки остатка!
ld a,e
dup 8
ldi: ldi: ret po
ld e,a: inc d
edup
add a,#20: ld e,a: ret nc
ld a,d: sub 8: ld d,a: ret
Добавлено через 4 минуты
Хотя согласен немного медленнее но зато некритично к прерыванию.
Последний раз редактировалось crushers[4ePT]; 06.04.2008 в 00:44. Причина: Добавлено сообщение
beLIVE!////
Да. А что, как-то иначе надо?Сообщение от crushers[4ePT
А затраты на вызов?Сообщение от crushers[4ePT
Вариант, приведенный в равные с вышеуказанным условия:
call outing ;17
outing:
ld a,e ;4
dup 8
ldi: ldi
ld e,a: inc d
edup ;8*(16+16+4+4)=8*40=320
add a,#20: ld e,a: ret nc ;7+4+5/10 = 16/21
ld a,d: sub 8: ld d,a: ret ;4+7+4+10 = 25
E=17+4+320+16/21+25=382/377
не айс
dup 4
ldi ;hl+1
ldi ;hl+1
dec de ;регистр hl будет бегать по кругу?
ldd ;hl-1
ldd ;hl-1
inc de
inc d
edup
E=4*(16+16+6+16+16+6+4)=4*80=320ticks
dup 4
pop de ;"hl"+2
ld (hl),e
inc l
ld (hl),d
inc h
pop de ;"hl"+2
ld (hl),d
dec l
ld (hl),e
inc h
edup
Я про то что будет тогда рисоватся не тайл размером 2б(ширина) а первые два байта.
ещё незабудь добавить цикл/проверку на "скопирован весь таил" в подсчёты скорости.
beLIVE!////
а ну тогда еще больше тактов надо чтоб вернуть de на место (4 на каждую строчку).Сообщение от crushers[4ePT
ну я изначально в равные условия загнал примеры, посему твой ускорился соотвецно.Сообщение от crushers[4ePT
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
понравилось решение в какой-то буржуйной аркаде (я их на данный момент перековыриваю кучками - unreal debuger незаменимая вещь )
ldi: ldi: ldi: inc d ;abc -графика в буфере
ldd: ldd: ldd: inc d ;fed -графика в буфере
а на экране соответственно abc, def только цикл djnz
поставили вместо простой ret po. всё прикрасно рисуется в одном экране (48к режим). правда спрайт надо "корявым" делать
beLIVE!////
дык та же фигня что и у меня с источником плюс вывод перекошенный на 1 байтСообщение от crushers[4ePT
у меня есть еще одна причина, по которой я быстро отказался от ldi - банально не хватило одной пары свободных регистров.
Добавлено через 3 минуты
спасибо, но от этого я, наверное, отказаться пока не смогу - у меня framebufferline сделан шириной в 40 байт. Это даёт такой небольшой плюс, что не нужно обрезать спрайты по горизонтали на границе экрана (правда по ширине спрайт ограничивается при этом 16 знакоместами).
Добавлено через 9 минут
отдельное спасибо за идею вывода змейкой - как-то мне это в голову не приходило, посмотрю как бы её применить.
с выводом графики напрямую на экран появляется еще один небольшой минус, о котором забыл сказать - спрайты придётся каждый раз копировать из верхней памяти.
можно реализовать кэширование на лету, конечно, но на этот счет надо еще подумать.
Добавлено через 11 минут
еще как учитываю! 35000 - это и есть разница между совокупными затратами на down_hl и копированием из буфера (65000).
Последний раз редактировалось moroz1999; 06.04.2008 в 13:47. Причина: Добавлено сообщение
moroz можешь показать процедуру копирования? весь экран хочешь обновлять?
beLIVE!////
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)