Абзац
:: Поиск
:: Поддержка проекта
Webmoney:
  • Z610389805629
  • R427996570517
  • E023541002978
  • :: №11 (17.04.2002) Просмотров: 4914

    Автор: 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]


    © 2004-2013 Perspective group