jerri, svofski, ivagor, KTSerg спасибо за советы, тесты и исследования !!

У меня спрайты выводятся по плоскостям, сначала в первую, потом вторую и третью.
Вод код вывода спрайта, который я использую (сейчас тоже самое, но развернул циклы)

Скрытый текст



;Вывод квадратика 24x24 точки в три плоскости для статичных объектов
;
SpriteC3:
PUSH H
PUSH D
PUSH B
MOV A,H ; сохраняем начало столбик X плоскость (1) куда выводим графику
STA pozic_xP1
ADI 20H ; вычисляем следующую плоскость (2) начальный столбец
STA pozic_xP2 ; сохраняем
ADI 20H ; вычисляем следующую плоскость (3) начальный столбец
STA pozic_xP3 ; сохраняем

MOV A,L ; сохраняем начало строки Y куда выводим графику
STA pozic_y

MVI B,3 ;в регистр "B" - счетчик столбиков X
Kvadr1:MVI C,24 ;в регистр "C" - счетчик строк Y
Kvadr2: LDAX D ; загружаем акумулятор А содержимым графики
MOV M,A ; выводим в экран по адресу "HL" байт графики
DCR L ; ; куда выводить "HL=HL+1" строка Y +1
INX D ; DE=DE+1 увеличиваем адрес откуда брать графику
DCR C ; -1 все 24 байт строки вывели ?
JNZ Kvadr2 ;если столбик не вывели полностью то продолжаем
; переключаем на следующий столбик-адрес вывода графики
INR H
LDA pozic_y
MOV L,A ; установка Y начала строки
DCR B ; -1 все 3 столбика X вывели ?
JNZ Kvadr1 ;если столбики не вывели полностью то продолжаем

;============== вывод в плоскость 2
LDA pozic_xP2
MOV H,A ; установка первого столбца X плоскость (2) куда выводим графику

MVI B,3 ;в регистр "B" - счетчик столбиков X
Kvadr11:MVI C,24 ;в регистр "C" - счетчик строк Y
Kvadr22: LDAX D ; загружаем акумулятор А содержимым графики
MOV M,A ; выводим в экран по адресу "HL" байт графики
DCR L ; ; куда выводить "HL=HL+1" строка Y +1
INX D ; DE=DE+1 увеличиваем адрес откуда брать графику
DCR C ; -1 все 24 байт строки вывели ?
JNZ Kvadr22 ;если столбик не вывели полностью то продолжаем
; переключаем на следующий столбик-адрес вывода графики
INR H
LDA pozic_y
MOV L,A ; установка Y начала строки
DCR B ; -1 все 3 столбика X вывели ?
JNZ Kvadr11 ;если столбики не вывели полностью то продолжаем

;============== вывод в плоскость 3
LDA pozic_xP3
MOV H,A ; установка первого столбца X плоскость (2) куда выводим графику

MVI B,3 ;в регистр "B" - счетчик столбиков X
Kvadr111:MVI C,24 ;в регистр "C" - счетчик строк Y
Kvadr222: LDAX D ; загружаем акумулятор А содержимым графики
MOV M,A ; выводим в экран по адресу "HL" байт графики
DCR L ; ; куда выводить "HL=HL+1" строка Y +1
INX D ; DE=DE+1 увеличиваем адрес откуда брать графику
DCR C ; -1 все 24 байт строки вывели ?
JNZ Kvadr222 ;если столбик не вывели полностью то продолжаем
; переключаем на следующий столбик-адрес вывода графики
INR H
LDA pozic_y
MOV L,A ; установка Y начала строки
DCR B ; -1 все 3 столбика X вывели ?
JNZ Kvadr111 ;если столбики не вывели полностью то продолжаем

POP B
POP D
POP H
RET ;иначе - выйти из п/п вывода квадратиков
[свернуть]


В движении спрайты у меня не стираются полностью, на старый спрайт накладывается новый со смещением затирая старый.

ivagor, да спрайты я тоже заметил немного моргают. Вывод сразу в три плоскости очень оригинально сделан, попробую воплотить идею, если это уменьшит моргание и не снизит сильно скорость, то будет здорово.

Фоновой музыки не планирую, но звуки будут. А звукам не помешает запрет прерываний ?