Он должен быть не на экране, где его шторка портит, а где-нибудь в свободном месте. Если это поправить, то работает как предыдущая версия.
Вид для печати
Накатал счетчик вывода спрайтов.
Считает сколько раз за 10 секунд выводятся спрайты.
В данной версии, прерывания и вывод спрайта по алгоритму jerri.
Результат в hex.
Какой алгоритм воткнуть для сравнения?
Заменил программку.
Верхний результат вывод спрайтов по алгоритму jerri, нижний результат мой кривой алгоритм (по 4 строки в цикле).
Это что за 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 ;иначе - выйти из п/п вывода квадратиков
[свернуть]
как хранит данные твой алгоритм?
у тебя же здесь процедуры на 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
[свернуть]
Накатал тот алгоритм про который писал ранее, в котором старший байт адреса на экране не вычисляется при переходе к следующей плоскости а вычислен заранее и хранится в регистре.
За 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
вот, как-то так... :)