![]() |
|
:: СОДЕРЖАНИЕ НОМЕРА
:: Газетные рубрики
:: АВТОРЫ
:: Поиск
:: Поддержка проекта
Webmoney:
|
:: №11 (17.04.2002) Просмотров: 5270
Автор: Neo / Virtual Masters. Рубрика: Этюды. Номер: №11 (17.04.2002). Еще один метод вывода спрайта размером 2 на 2 знакоместа.В 10-м номере «Абзаца» я прочитал статью в разделе «Этюды» о процедуре попиксельного вывода спрайта 2x2 знакоместа. Предлагаю свой вариант - он более короткий и занимает 88 байт, в отличие от упомянутой процедуры Павла Стахова. Я не использовал альтернативные регистры, но идет работа с половинками регистра IY, кроме того все работает быстрее. Формат хранения одной линии спрайта так же изменен. Теперь он таков: байт маски, байт спрайта, байт маски байт спрайта, пустой байт маски, пустой байт спрайта. Пустой байт нужен для того, чтобы создать 8 сдвинутых вправо спрайтов с маской.HIG EQU 16
LEGHT EQU 2+1
_LGHT EQU LEGHT*HIG
CRD_Y EQU 10 ;Y
CRD_X EQU 7 ;X
ORG #6000
LD (STEK+1),SP
LD HL,SPRITE
LD D,CRD_Y
LD A,CRD_X
LD (NEWCRD+1),A
AND 7
JR Z,MIMO
;SCROLL
ZANOWO PUSH HL
LD E,2
;СНАЧАЛА СКРОЛИРУЕТСЯ МАСКА
SUDA PUSH HL
;ПОТОМ САМ СПРАЙТ
LD B,_LGHT
CIKL RR (HL)
INC HL
INC HL
DJNZ CIKL
CCF
POP HL
INC HL
DEC E
JR NZ,SUDA
POP HL
DEC A
JR NZ,ZANOWO
MIMO LD SP,HL
LD YL,HIG ;GET_ADR_P
NEWCRD LD A,0
RLCA
RLCA
RLCA
XOR D
AND %11000111
XOR D
RLCA
RLCA
LD L,A
LD A,D
RRA
SCF
RRA
RRA
AND %01011000
XOR D
AND %11111000
XOR D
LD H,A
;
LD E,LEGHT
MASKA LD A,(HL)
POP BC
AND C
;БАЙТ МАСКИ
OR B
;БАЙТ СПРАЙТА
LD (HL),A
INC L
DEC E
JR NZ,MASKA
INC D
DEC YL ;DEC LY
JR NZ,NEWCRD
STEK LD SP,0
RET ;END
SPRITE INSERT "SPR" ;ПОДГРУЗКА СПРАЙТАОт редакции: В принципе идея не плоха, но все же процедура не совсем универсальна, т.к. происходит смещение спрайта в памяти, т.е. еще раз вывести спрайт с одинаковыми координатами уже не удастся. Длина процедуры сократилась, а вот длина спрайта увеличилась. Таким обоазом, суммарная длина процедуры и спрайта получается точно такой же как и процедуры прошлого номера - 184 байта. Таким образом можно считать, что это еще один вариант вывода спрайта 2x2 с маской. Основная же задача сделать это как можно короче. По-пержнему ждем ваши варианты. Интересно, можно ли еще что-то сократить? Ссылки по теме:Печать спрайта с маской [№9]Вывода спрайта размером 2 на 2 знакоместа [№10] |