ага inr l пропущенКод:;вывод спрайта в системе битпланов Вектор 06 ;ширина спрайта -24 ;на входе ;bc адрес спрайта ;de aдрес на экране ;E-Y D-X drop24 ld hl,0 add hl,sp ld (sprite_sp0),hl ld h,b ld l,c ld c,(hl) inc hl ld b,(hl) inc hl ld sp,hl ;задаем Y в L ld l,e ;задаем X в A ld a,d ;битплан1 add a,#20 ld e,a ;битплан2 add a,#20 ;битплан3 drop240 dup 12 ld h,d ;рисуем на первом плане ld (hl),c inc h ld (hl),b inc h pop bc ld (hl),c ;переход на второй битплан ld h,e ;рисуем на втором плане ld (hl),b inc h pop bc ld (hl),c inc h ld (hl),b pop bc ;переход на третий битплан ld h,a ;рисуем на третьем плане ld (hl),c inc h ld (hl),b inc h pop bc ld (hl),c ;переходим на следующую строку inc l ;возвращаемся на первый план ld h,d ;повторяем цикл рисования ld (hl),b inc h pop bc ld (hl),c inc h ld (hl),b pop bc ;переход на второй битплан ld h,e ;рисуем на втором плане ld (hl),c inc h ld (hl),b inc h pop bc ld (hl),c ;переход на третий битплан ld h,a ;рисуем на третьем плане ld (hl),b inc h pop bc ld (hl),c inc h ld (hl),b inc l ;выбираем следующую пару байтов для цикла рисования pop bc edup org $-1 sprite_sp ld sp,#3131 sprite_sp0 equ $-2 ret
С уважением,
Jerri / Red Triangle.
Не выдержала душа поэта... с утреца всё перелопатил.
Первоначальный вариант теста давал не совсем корректный результат, т.к. во время тестирования быстродействия алгоритма вывода было ещё много накладных вычислений перед выводом каждого спрайта. в основном это вычисление адреса спрайта, который нужно вывести на экран, т.к. фактически сразу выводились показания счётчика.
Переписал само тестирование. Сейчас кроме вывода спрайта в цикле минимум, вот пример:
Скрытый текст
Код:Jerri_c: lxi d,a_test_spr ; адрес спрайта на экране lxi b,tab_spr0 ; адрес спрайта push h ; сохранить счетчик ; call drop24 ; вывод спрайта ; pop h восстановить счетчик inx h ; увеличение счетчика выводов спрайта на экран ; lda StopFlag ; читаем флаг остановки ora a ; проверка флага jnz Jerri_c[свернуть]
И результат немного поменялся:
Оригинальный вариант алгоритма Jerri - 1380h
Вариант Jerri, с заранее вычисленными адресами битпланов, и полностью развёрнутый (без циклов) - 1603h
Мой оригинальный алгоритм - 151Eh
Мой с заранее вычисленными адресами битпланов - 15B2h
Алгоритм metamorpho, совсем не использующий стек - 0С0Сh
Алгоритм metamorpho, совсем не использующий стек и с обычным прерыванием в которои нет защиты стека - 0С0Eh
Во вложении сам тест и его исходник.
Последний раз редактировалось KTSerg; 04.08.2020 в 05:05.
parallelno(01.07.2022)
Если здесь добавить змейку по плоскостям, то еще -16 тактов на каждый edup. Варианты с циклами тоже можно ускорить и даже если без плоскостной змейки, но с ней выигрыш будет заметнее.
-2 команды, каждая по 8 тактов, итого 16 тактов.
Сейчас 3 перехода между плоскостями на каждую строку, условно можно их назвать в 1, 2 и 3 плоскость. При змейке по плоскостям достаточно в 1й строке двух переходов: во 2 и 3 плоскость и во второй строке два перехода: во 2 и 1 плоскость.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)