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

    Автор: Павел Стахов / Studio Stall.

    Рубрика: Этюды.

    Номер: №10 (30.01.2002).



    Вывода спрайта размером 2 на 2 знакоместа

    Предлагаю доработанную мною процедуру вывода спрайта размером 2 на 2 знакоместа. С целью уменьшения размера (теперь 120 байт против 149 у RageVorteX/#c5), да и некоторого увеличения скорости работы был изменен алгоритм сдвига и вывода спрайта, поэтому формат спрайта теперь немного изменился: сначала идет слово (два байта - младший, затем старший) маски, потом слово спрайта, и так 16 раз. Формат немного неудобен т.к. придется писать свой конвертер, но результат того стоит! И еще. Если скорость процедуры не так важна, как ее обьем, то строки, помеченные звездочкой можно заменить на

            ;...

            LD C,A

            CALL 8880

            ;...

    таким образом процедура сократится еще на 21 байт и составит 99 байтов! Отмечу лишь, что процедура по адресу 8880 занимается расчетом координат на экране с точностью до пикселя, на входе у нее C=X, B=Y, на выходе будет HL=адрес на экране, A=смещение в пикселях относительно начала знакоместа.


    ;B=Y, C=X
    ;A=НОМЕР СПРАЙТА
    SPRITE1 DI
           LD (WSP1+1),SP 
           LD H,0
           LD L,A
           ADD HL,HL
           ADD HL,HL
           ADD HL,HL
           ADD HL,HL
           ADD HL,HL
           ADD HL,HL 
           LD DE,S_ADR
           ADD HL,DE 
           LD A,B  ;*
           RRA     ;*
           SCF     ;*
           RRA     ;*
           RRA     ;*
           AND #5F ;*
           LD D,A  ;*
           XOR C   ;*
           AND 7   ;*
           XOR C   ;*
           RRCA    ;*
           RRCA    ;*
           RRCA    ;*
           LD E,A  ;*
           LD A,B  ;*
           XOR D   ;*
           AND 7   ;*
           XOR D   ;*
           LD D,A  ;* 
           LD A,C  ;*
           AND 7   ;* 
           NEG
           ADD A,8
           LD (LSB+2),A 
           LD SP,HL 
           LD A,16
    S15    EX AF,AF’
           LD A,D
           CP #58
           JR NC,WSP1
           POP HL
           POP IX
           XOR A
    LSB    LD BC,#00FF
    S_LP1  ADD HL,HL
           SET 0,L
           RL C 
           ADD IX,IX
           RLA
           DJNZ S_LP1
           LD B,A 
           LD A,(DE)
           AND C
           OR B
           LD (DE),A
           INC E
           LD A,(DE)
           AND H
           OR HX
           LD (DE),A
           INC E
           LD A,(DE)
           AND L
           OR LX
           LD (DE),A
           DEC E
           DEC E 
           INC D
           LD A,D
           AND 7
           JR NZ,S14
           LD A,E
           ADD A,#20
           LD E,A
           JR C,S14
           LD A,D
           SUB 8
           LD D,A 
    S14    EX AF,AF’
           DEC A
           JR NZ,S15
    WSP1   LD SP,0
           EI
           RET 
    S_ADR  ЗАГРУЖАЕМ СПРАЙТ...


    Ссылки по теме:

    Печать спрайта с маской [№9]
    Еще один метод вывода спрайта размером 2 на 2 знакоместа. [№11]


    © 2004-2013 Perspective group