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

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

    Номер: №26 (16.01.2006).



    Этюды

    Взято из журнала «Inferno 4». Описание и доказательство алгоритма там же.


    ;sqr hl
    ;HL=аргумент N
        OR A
        LD A,L
        LD L,H
        LD DE,64
        LD H,D
        LD B,8
    sqr0    SBC HL,DE
        JR NC,$+3
        ADD HL,DE
        CCF
        RL D
        ADD A,A
        ADC HL,HL
        ADD A,A
        ADC HL,HL
        DJNZ sqr0
    ;D=результат

    Переход на одну линию вниз в экране новым методом.

    Е.Б. Голяков (Spencer Winset). Более подробно об этом методе читайте в электронной газете «Nicron» № 125.


    DOWN_HL+    INC  H
        LD   A,H
        AND  #07
        JR   NZ,BREAK
        LD   A,L
        SUB  #E0
        LD   L,A
        SBC  A,A
        AND  #F8
        ADD  A,H
        LD   H,A
    BREAK    ...

    15b - 27/56t


    Обмен значений двух битов в байте.

    Владимир Минин (алгоритм), Александр Шушков (доработка).

    Можно освободить регистр B, заменив команды and b и xor b на and X, xor X, тогда пропадет универсальность, но выиграем минимум один такт, максимум четыре.


    ;B-маска обмениваемых битов
        LD B,%00000101 
    BitExch    ld C,A
        and b
        ld a,c
        jp pe,$+4
        xor b
        RET

    A=HL/32

    Синяков Александр (Sam Style). Использовано в игре «Вера».


    HLdiv32    ADD HL,HL
        ADD HL,HL
        ADD HL,HL
        LD A,H
        RET

    Ниже предствалены еще более короткие процедуры, по теме затронутой в статье «Направление движения или история одной процедурки» (газета «Абзац» № 20).

    Обе процедуры преобразуют значение регистра BC в соответсивии с нижеприведенной таблицей.


        BC=#FFFF => a=0
        BC=#00FF => a=1
        BC=#01FF => a=2
        BC=#FF00 => a=3
        BC=#0100 => a=4
        BC=#FF01 => a=5
        BC=#0001 => a=6
        BC=#0101 => a=7

    Вариант от Дмитрия Быстрова (Alone Coder), 8 байт.


    Alco    LD A,C
        ADD A,A
        ADD A,C
        ADD A,B
        CP 9
        SBC A,-4
        RET

    Вариант от Дмитрия Патютько (Pulsar), 8 байт.


    Pulsar    LD A,C
        ADD A,A
        ADD A,C
        ADD A,B
        ADD A,4
        ADC A,-1
        RET

    Генератор случайных чисел.

    Milos «baze» Bazelides, {baze@stonline.sk}

    На выходе: A = псевдослучайное число, период 256.


    RANDOM    ld a,SEED ;SEED is usually 0
        ld b,a
        add a,a
        add a,a
        add a,b
        inc a ;you may try also ADD A,7
        ld (RANDOM+1),a
        ret

    Короткий способ определить, что оба числа (A и B) не равны нулю. Если хотя бы одно из них равно нулю, то будет установлен флаг Z. Применено в ACEdit для проверки нажатия Extend.

    Info Guide 7, Дмитрий Быстров



    ;(A<>0) AND (B<>0)
        add a,-1
        sbc a,a
        and b

    Автор данного сборника этюдов из вышеприведенной конструкции вывел вот какую штуку:


        add a,-1
        sbc a,a
        inc a

    После этого если было A=0, то будет A=255, если A<>0, то будет A=0.


    Этюды собирал Александр Шушков

    © 2004-2013 Perspective group