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

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

    Номер: №31 (04.07.2007).



    Этюды

    (c) Алексей Червов


    Процедура печати 85 символов в строке. Печать происходит на двух экранах при помощи стандартного линейного двухкилобайтного шрифта на 64 символа в строке, прижатого к правому краю. Весь код занимает 256 байт.


    font    EQU #60;Старший байт адреса шрифта.
            ORG #8000
            LD A,23
            LD BC,#7ffd
            OUT (C),A
    ;Очистка двух экранов (c) tiboh
            LD HL,#4000
            LD D,L
            LD E,L
    cls        LD (HL),D
            SET 7,H
            LD (HL),E
            RES 7,H
            INC HL
            LD A,H
            CP #58
            JR C,cls
            LD DE,#4445;Атрибуты
            CP #5b
            JR NZ,cls
            LD DE,text; Адрес текста, в конце 0
            LD HL,#4000;Адрес экрана
            CALL print
    key        LD A,23
            HALT
            XOR 8
            LD (key+1),A
            LD BC,#7ffd
            OUT (C),A
            LD A,#7f
            IN A,(#fe)
            RRA
            JR C,key
            RET
    print    LD B,font+1
            PUSH DE,HL,HL
            EXX
            POP HL
            SET 7,H
            EXX
            CALL pr
            POP HL,DE
            INC H
            LD A,H
            AND 7
            JR NZ,$+11
            LD A,L
            SUB #e0
            LD L,A
            SBC A,A
            AND #f8
            ADD A,H
            LD H,A
            INC B
            LD A,B
            CP font+8
            JR C,print+2
            RET
    pr        LD A,(DE)
            OR A
            RET Z
            LD C,A
            LD A,(BC)
            RLCA
            LD C,A
            AND 96
            LD (HL),A
            LD A,C
            EXX
            AND 128
            LD (HL),A
            EXX
            INC DE
            LD A,(DE)
            OR A
            RET Z
            LD C,A
            LD A,(BC)
            RLCA
            RLCA
            LD C,A
            AND 12
            OR (HL)
            LD (HL),A
            LD A,C
            EXX
            AND 16
            OR (HL)
            LD (HL),A
            EXX
            INC DE
            LD A,(DE)
            OR A
            RET Z
            LD C,A
            LD A,(BC)
            RRCA
            LD C,A
            AND 1
            OR (HL)
            LD (HL),A
            LD A,C
            AND 128
            INC L
            LD (HL),A
            LD A,C
            EXX
            AND 2
            OR (HL)
            LD (HL),A
            INC L
            EXX
            INC DE
            LD A,(DE)
            OR A
            RET Z
            LD C,A
            LD A,(BC)
            AND 48
            OR (HL)
            LD (HL),A
            LD A,(BC)
            EXX
            AND 64
            LD (HL),A
            EXX
            INC DE
            LD A,(DE)
            OR A
            RET Z
            LD C,A
            LD A,(BC)
            RLCA
            LD C,A
            AND 6
            OR (HL)
            LD (HL),A
            LD A,C
            EXX
            AND 8
            OR (HL)
            LD (HL),A
            EXX
            INC DE
            LD A,(DE)
            OR A
            RET Z
            LD C,A
            LD A,(BC)
            RLCA
            RLCA
            LD C,A
            AND 192
            INC L
            LD (HL),A
            LD A,C
            EXX
            AND 1
            OR (HL)
            LD (HL),A
            INC L
            EXX
            INC DE
            LD A,(DE)
            OR A
            RET Z
            LD C,A
            LD A,(BC)
            RRCA
            LD C,A
            AND 24
            OR (HL)
            LD (HL),A
            LD A,C
            EXX
            AND 32
            LD (HL),A
            EXX
            INC DE
            LD A,(DE)
            OR A
            RET Z
            LD C,A
            LD A,(BC)
            AND 3
            OR (HL)
            LD (HL),A
            LD A,(BC)
            EXX
            AND 4
            OR (HL)
            LD (HL),A
            INC L
            EXX
            INC L
            INC DE
            JP pr

    Печать десятичных чисел без нуля. 59 байт.


            LD IX,Буфер 5 байт
            LD HL,Число
            LD BC,0
            LD DE,0-10000
            CALL num
            LD DE,0-1000
            CALL num
            LD DE,0-100
            CALL num
            LD DE,0-10
            CALL num
            LD A,L
            JR num2
    num        ADD HL,DE
            INC B
            JR C,$-2
            DEC B
            SBC HL,DE
            LD A,B
            OR C
            RET Z
            LD C,A
            LD A,B
    num2    ADD A,48
            LD (IX),A
            INC IX
            LD B,0
            RET

    (c) 2k by groove^tnl

    На 0...240 секторов вперед.

    IN: DE,текущий_трек/сектор

        B,количество_перепрыгиваемых_секторов

    OUT: DE = новые_трек/сектор


            LD    A,B
            ADD    A,E
            LD    B,A
            AND    #F
            LD    E,A
            LD    A,D
            DUP    4 ;Повторить
            SRL    B ;блок 4 раза
            EDUP 
            ADD    A,B
            LD    D,A
            RET

    На 0...65520 секторов вперед.

    IN: DE,текущий_трек/сектор

        HL,количество_перепрыгиваемых_секторов

    OUT: DE = новые_трек/сектор


            LD    B,0
            LD    C,E
            ADD    HL,BC
            LD    A,L
            AND    #F
            LD    E,A
            DUP    4 ;Повторить
            RR    H ;блок 4 раза
            RR    L
            EDUP 
            LD    A,L
            ADD    A,D
            LD    D,A
            RET

    (c) SAM style

    На 0...256 секторов назад.


            ld de,track_sector
            ld b,delta
            ld a,e
            sub b
            ld e,a
            ret nc
    lab1    dec d
            add a,16
            jr nc,lab1
            ld e,a
            ret

    На 0...65520 секторов назад.


            ld de,track_sector
            ld hl,delta
            ld a,l
            and 15
            rr h
            rr l
            sra h
            rr l
            sra h
            rr l
            sra h
            rr l
            ld h,l
            ld l,a
            ld a,e
            sub l
            jr nc,lab1
            dec d
    lab1    and 15
            ld e,a
            ld a,d
            sub h
            ld d,a
            ret



    © 2004-2013 Perspective group