metamorpho(03.08.2020)
Накатал счетчик вывода спрайтов.
Считает сколько раз за 10 секунд выводятся спрайты.
В данной версии, прерывания и вывод спрайта по алгоритму jerri.
Результат в hex.
Какой алгоритм воткнуть для сравнения?
Заменил программку.
Верхний результат вывод спрайтов по алгоритму jerri, нижний результат мой кривой алгоритм (по 4 строки в цикле).
Последний раз редактировалось KTSerg; 03.08.2020 в 20:00.
Это что за 10 секунд почти 5 тысяч спрайтов выводит ?
Вот этот для сравнения проверь.
Скрытый текст
;==========================================================
;Вывод квадратика 24x24 точки в сразу в три плоскости для статичных объектов
; вход HL - куда на экран выводить DE - адрес графики
SpriteC3qa:
PUSH H
PUSH D
PUSH B
MOV A,H ; сохраняем начало столбик X плоскость (1) куда выводим графику
STA pozic_xP1
MOV A,L
STA pozic_y; сохраняем начало строки Y куда выводим графику
mvi a,3
STA PLAST
LXI B,2000h
;====================== строка 1
fumbingo:
LDAX D ; загружаем акумулятор А содержимым графики
MOV M,A ; выводим в экран по адресу "HL" байт графики
INX D ; DE=DE+1 увеличиваем адрес откуда брать графику
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 2
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 3
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 4
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 5
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 6
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 7
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 8
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 9
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 10
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 11
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 12
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 13
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 14
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 15
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 16
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 17
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 18
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 19
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 20
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 21
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 22
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 23
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
DCR L ; ==================== строка 24
LDA pozic_xP1
MOV H,A ; адрес плоскости 1
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 2
LDAX D
MOV M,A
INX D
DAD B ; адрес плоскости 3
LDAX D
MOV M,A
INX D
LDA PLAST ; счётчик столбиков (всего 3)
dcr a
jz rimikoq ; если все три столбика нарисованы выходим из подпрограммы
STA PLAST
; следующий столбец X
LXI H,pozic_xP1
inr M
mov H,M
LDA pozic_y
MOV L,A ; восстанавливаем Y
jmp fumbingo
rimikoq:
;=============
POP B
POP D
POP H
RET ;иначе - выйти из п/п вывода квадратиков
[свернуть]
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
как хранит данные твой алгоритм?
у тебя же здесь процедуры на 24 линии раскатанные?
- - - Добавлено - - -
как хранит данные твой алгоритм?
KTSerg,
добавь вот этот вот спрайтовый дроппер
Скрытый текст
Код:;вывод спрайта в системе битпланов Вектор 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 ;выбираем следующую пару байтов для цикла рисования pop bc edup org $-1 sprite_sp ld sp,#3131 sprite_sp0 equ $-2 ret[свернуть]
Последний раз редактировалось jerri; 03.08.2020 в 21:21.
С уважением,
Jerri / Red Triangle.
Накатал тот алгоритм про который писал ранее, в котором старший байт адреса на экране не вычисляется при переходе к следующей плоскости а вычислен заранее и хранится в регистре.
За 10 секунд этот алгоритм вывел 1558h спрайтов.
Полностью раскатанных нет.
Алгоритм тот выводит 4 строки за цикл. Данные хранятся ужасно.
Если байты в спрайте пронумеровать, то за один цикл выводятся байты с 1-го по 36-ой, и при выводе 4-ёх строк расположены они в плоскостях следующим образом:
в первой плоскости:
20 21 24
19 22 23
2 3 6
1 4 5
во второй плоскости:
29 28 25
30 27 26
11 10 7
12 9 8
в третьей плоскости;
32 33 36
31 34 35
14 15 18
13 16 17
вот, как-то так...![]()
С уважением,
Jerri / Red Triangle.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)