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

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

    Номер: №27 (05.08.2006).



    Этюды

    Владислав Ювженко, г. Красноярск


    № 1. Быстрая переброска байт между страницами.

    На входе:

    HL - адрес «откуда»

    DE - адрес «куда»

    BC - какие страницы переключать

    A - сколько байт перебросить.

    Например, необходимо перебросить блок размером 6144 байта, тогда A = 12. Вычисляется по Формуле: 6144/2/256. Можно перебрасывать только «круглые» и четные числа.


    ;41 байт
        EXX
        LD B,A
        LD C,0
        EXX
        LD A,B
        EX AF,AF
        LD A,C
        LD BC,#7ffd
        DI
        LD (stak+1),SP
        LD SP,HL
        EX DE,HL
        EXX
        EXX
        EX AF,AF
        OUT (C),A
        EX AF,AF
        POP DE
        OUT (C),A
        LD (HL),E
        INC HL
        LD (HL),D
        INC HL
        EXX
        DEC C
        JR NZ,$-14
        DJNZ $-16
    stak    LD SP,0
        EI

    № 2. Обмен байтами между страницами.

    На входе:

    HL - откуда

    DE - страницы

    BC - куда

    A - сколько (только «круглые» числа)


    ;35 байт.
        PUSH BC
        EXX
        POP HL
        LD B,A
        LD C,0
        EXX
        LD BC,#7ffd
        OUT (C),D
        EXX
        EXX
        LD A,(HL)
        EX AF,AF
        OUT (C),E
        EXX
        LD A,(HL)
        EX AF,AF
        LD (HL),A
        INC HL
        EXX
        OUT (C),D
        EX AF,AF
        LD (HL),A
        INC HL
        EXX
        DEC C
        JR NZ,$-18
        DJNZ $-20

    № 3. Быстрая печать текста на 32 символа в строке.

    На входе:

    DE - куда печатать (адрес экрана)

    BC - адрес текста (конец 0)


    ;49 байт
        DI
        LD (stk+1),SP
    print    LD A,(BC)
        OR A
        JR Z,stk
        LD L,A
        ADD HL,HL
        LD H,15
        ADD HL,HL
        ADD HL,HL
        LD SP,HL
        EX DE,HL
        !ASSM 4
        POP DE
        LD (HL),E
        INC H
        LD (HL),D
        INC H
        !CONT
        ORG $-1
        EX DE,HL
        LD A,D
        SUB 7
        LD D,A
        INC BC
        INC E
        JR print
    stk    LD SP,0
        EI

    № 4. Процедура предназначена для распаковки картинок формата multi studio 2. 1 (с расширением «p») в более приемлемый вид. На авторство я не претендую, процедуру написал Disabler/OHG/DPL, но я неплохо ее оптимизировал.


    ;44 байта.
        LD HL,адрес 
            пакованной 
            картинки
        LD B,L
        EXX
        LD HL, куда распаковывать (буфер размером 12288 байт (3 RGB спрайта размером 4096 байт.)
        LD C,6
    mu02    PUSH HL
        LD B,8
    mu03    EXX
        DEC B
        INC B
        JR NZ,mu04
        LD A,(HL)
        CP 154
        INC HL
        JR NZ,mu05
        LD C,(HL)
        INC HL
        LD B,(HL)
        INC HL
    mu04    DEC B
        LD A,C
    mu05    EXX
        LD (HL),A
        INC H
        DJNZ mu03
        LD D,H
        POP HL
        INC L
        JR NZ,mu02
        LD H,D
        DEC C
        JR NZ,mu02

    * * *


    Максим Торгунаков (TMA), г. Красноярск


    № 1. Обмен байтов между областями памяти. Без учета страниц.

    На входе:

    HL - откуда

    DE - куда

    BC - сколько


    ;9 байт.
        LD A,(DE)
        LDI
        DEC HL
        LD (HL),A
        INC HL
        JP PE,$-6

    № 2. Заполнение памяти, произвольным байтом.

    На входе:

    DE - адрес конца области + 1

    B - длинна области*256

    C - байт заполнения


    ;144 байта.
        DI
        LD HL,0
        ADD HL,SP
        EX DE,HL
        LD SP,HL
        EX DE,HL
        LD D,C
        LD E,C
        !ASSM 128
        PUSH DE
        !CONT
        DEC B
        JP NZ,$-129
        LD SP,HL
        EI

    № 3. Генератор случайных чисел. На один байт больше чем в «Абзаце» #26 и медленнее работает, зато лучше «перемешивает».


    ;11 байт
    rnd    LD A,53
        ADD A,A
        JR NC,$+5
        LD C,51
        XOR C
        LD (rnd+1),A

    № 4. Быстрое рисование окружности.

    Сначала декранч.


        LD HL, адрес килобайтной таблички.
        LD DE,#57e0
        LD BC,#80
    l0    LD (HL),E
        INC H
        LD (HL),D
        DEC H
        LD A,D
        DEC D
        AND 7
        JR NZ,l1
        LD A,E
        ADD A,#e0
        LD E,A
        SBC A,A
        AND 8
        ADD A,D
        LD D,A
    l1    INC L
        LD A,L
        XOR #c0
        JR NZ,l0
    l2    LD (HL),A
        INC H
        LD (HL),A
        DEC H
        INC L
        JR NZ,l2
        INC H
        INC H
    l3    LD (HL),A
        INC H
        LD (HL),C
        RRC C
        ADC A,B
        DEC H
        INC L
        JR NZ,l3

    Сама процедура.

    На входе:

    HL - координаты Y,X

    A - радиус (нельзя задавать 0)


        EXX
        LD B,#60
        EXX
        LD B,A
        LD C,0
        RRA
    loop EX    AF,AF
        LD A,H
        ADD A,B
        JR C,skip0
        CP #c0
        JR NC,skip0
        LD LX,A
        LD A,L
        ADD A,C
        CALL NC,plot
        LD A,L
        SUB C
        CALL NC,plot
    skip0    LD A,H
        SUB B
        JR C,skip1
        LD LX,A
        LD A,L
        ADD A,C
        CALL NC,plot
        LD A,L
        SUB C
        CALL NC,plot
    skip1    LD A,H
        ADD A,C
        JR C,skip2
        CP #c0
        JR NC,skip2
        LD LX,A
        LD A,L
        ADD A,B
        CALL NC,plot
        LD A,L
        SUB B
        CALL NC,plot
    skip2    LD A,H
        SUB C
        JR C,skip3
        LD LX,A
        LD A,L
        ADD A,B
        CALL NC,plot
        LD A,L
        SUB B
        CALL NC,plot
    skip3    EX AF,AF
        INC C
        SUB C
        JR NC,loop
        DEC B
        ADD A,B
        EX    AF,AF
        LD A,B
        CP C
        JR NC,loop+1
        RET
    plot    EXX
        LD E,A
        LD D,LX
        LD H,B
        LD L,D
        LD A,(HL)
        INC H
        LD D,(HL)
        INC H
        LD L,E
        OR (HL)
        LD E,A
        INC H
        LD A,(DE)
        OR (HL)
        LD (DE),A
        EXX
        RET

    Совокупный размер декранча и процедуры 166 байт.


    * * *



    ;by Axor
    ;HL=HL*128, 35 тактов
        LD A,L 
        RRC H
        RRA
        LD H,A
        LD L,0
        RR L



    © 2004-2013 Perspective group