(C) Death MoroZ
__________________________________________
Всем привет, кто про chunky-bump'ы, а я
про быструю печать спрайта 2х2 знакоместа,
которая расчитана на фиксированное положе-
ние спрайта, например, это может быть пе-
чать карты.
Итак, нижеследующую процедуру необходи-
мо вызвать перед запуском основной прог-
раммы.
Процедура CREAT несколько изменяет фор-
мат спрайтов, а именно: оставляя без изме-
нения первые 2 знакоместа, со вторыми про-
исходит следующее:
до вызова: после:
16 17 30 31
18 19 28 29
20 21 26 27
.. .. .. ..
Для чего это надо? А вот для чего: нап-
ример, в HL у нас задан адрес в экране,ку-
да идет печать, при печати первых 2-х зна-
комест проблем нет, но как с наименьшими
потерями перейти ко второй паре? Например,
можно сохранять до изменения адрес:LD A,H,
а потом востановить: LD H,A, можно исполь-
зовать стек, установив его на таблицу ад-
ресов, но есть способ лучше. Для перехода
к следующим знакоместам просто сделать
INC H, а затем продолжать выводить снизу
вверх, именно для этого и предназначена
нижеприведенная процедура.
CREAT LD HL,адрес спрайтов+16
LD DE,адрес спрайтов+30
DCR LD B,число спрайтов
M1_ PUSH BC,HL,DE
LD B,4
M2_ LD A,(HL)
EX AF,AF'
LD A,(DE)
LD (HL),A
EX AF,AF'
LD (DE),A
INC HL
INC DE
LD A,(HL)
EX AF,AF'
LD A,(DE)
LD (HL),A
EX AF,AF'
LD (DE),A
INC HL
DEC DE
DEC DE
DEC DE
DJNZ M2_
POP DE
EX DE,HL
LD BC,32
ADD HL,BC
EX DE,HL
POP HL
ADD HL,BC
POP BC
DJNZ M1_
RET
Пример процедуры вывода:
LD (SP_+1),SP
LD IX,OUTS
LD DE,АДРЕС В КАРТЕ
EXX
LD BC,#6000;АДРЕС БУФЕРНОГО
EXX ;ЭКРАНА
LD IX,OUTS
LD B,ЧИСЛО СПРАЙТОВ ПО Y
LOOP LD HL,$+3
!ASSM ЧИСЛО СПРАЙТОВ ПО X
JP (IX)
!CONT
;ВАША ПРОЦЕДУРА ПЕРЕХОДА К СЛЕД.ГОРИЗОН-
;ТАЛЬНОЙ ЛИНИИ,И ПЕРЕХОДА К СЛЕД.ПАРЕ ЗНА-
;КОМЕСТ ЭКРАНА
DJNZ LOOP
SP_ LD SP,0
RET
OUTS LD A,(DE)
EXX
ADD A,A
LD L,A
LD H,SPR_TBL'&H;СТАРШИЙ БАЙТ
;ЗАРАНЕЕ ПОДГОТОВЛЕННОЙ ТАБЛИЦЫ АДРЕСОВ
;(ДЛЯ СОЗДАНИЯ СТАТИЧНОЙ АНИМАЦИИ ДОСТА-
;ТОЧНО ЛИШЬ МЕНЯТЬ ЕГО СНАЧЕНИЕ)
LD SP,HL
POP HL
LD SP,HL;ВЗЯЛИ АДРЕС СПРАЙТА
LD H,B
LD L,C;В HL-АДРЕС ДЛЯ ПЕЧАТИ
;
!ASSM 3
POP DE
LD (HL),E
INC L
LD (HL),D
INC H
POP DE
LD (HL),D
DEC L
LD (HL),E
INC H
!CONT
POP DE
LD (HL),E
INC L
LD (HL),D
INC H
POP DE
LD (HL),D
DEC L
LD (HL),E;НАПЕЧАТАЛИ ВЕРХНЮЮ
; ПОЛОВИНУ
LD A,#20
ADD A,L
LD L,A;ПЕРШЛИ К НИЖНЕЙ
!ASSM 3;ПЕЧАТАЕМ НИЗ...
POP DE
LD (HL),E
INC L
LD (HL),D
DEC H
POP DE
LD (HL),D
DEC L
LD (HL),E
DEC H
!CONT
POP DE
LD (HL),E
INC L
LD (HL),D
DEC H
POP DE
LD (HL),D
DEC L
LD (HL),E
INC C;НЕОБХОДИМЫЕ
INC C;КОРРЕКТИРОВКИ...
EXX
INC E
INC HL
INC HL
JP (HL);ВЫХОД
------------------------------------------