Impulse #02
31 декабря 1997

Программистам - Быстрая процедура вычерчивания окружности.

<b>Программистам</b> - Быстрая процедура вычерчивания окружности.

┌────────────────────────────────────────┐
│             ПРОГРАММИСТАМ              │
└────────────────────────────────────────┘
                                                      (C) JAGUAR
         
   Сегодня  в  разделе 'ПРОГРАМ-
МИСТАМ'  я   подготовил  для Вас
ряд различных подпрограмм, среди
которых вы сможете найти:


 - быстрая  процедура вычерчива-
   ния окружности.

 - ускоренный  DECRUNCHER  к па-
   ковщику DATA_SQUEEZER v4.x.

 - корректная обработка дисковых
   ошибок, возникающих при обра-
   щении к TR-DOS через #3D13.

 - а также еще некоторые мелочи,
   которые  подготовлены  специ-
   ально для начинающих програм-
   мистов,  опытные же ...MAKERы
   могут  даже не заглядывать на
   эти строки, вместо этого пре-
   длагаю Вам, опытным, собрать-
   ся,  и  написать  нам  какую-
   нибудь  свою  хитрую  подпро-
   грамму, которую мы опубликуем
   в следующем выпуске газеты.


   Корректную обработку дисковых
ошибок  я  решил  опубликовать в
этой   газете  несмотря  на  то,
что эта тема уже рассматривалась
в   компьютерном издании  РЭХО 3
(ECHO), но так как то, что напи-
сано  по этому поводу там, вовсе
не является "корректной обработ-
кой" - это лишь корректный пере-
хват управления  в случае возни-
кновения    ошибки,   попробуйте
во  время  чтения  надавить   на
BREAK   и   Ваша   программа
моментально вылетит кое  куда...
(например на адрес 12345 или
на 23456.


             * * *


   Начну,  как и обещал,  с про-
цедуры  вычерчивания  на  экране
окружности. На входе в процедуру
необходимо задать три параметра:
в аккамуляторе-радиус, в старший
байт  регистра IX (HX) - коорди-
нату центра окружности по оси Y,
а  в  младший  (LX) - координату
центра по X.  К  примеру,  чтобы
нарисовать окружность с радиусом
80  в  центре  экрана, обращение
к процедуре CIRCLE  будет выгля-
деть так:


        LD      A,80
        LD      IX,#6080
        CALL    CIRCLE
        RET

CIRCLE  LD      E,0
        LD      H,E
        LD      L,A
        LD      D,A
        DEC     D
        SRL     L
        INC     L
C1      PUSH    DE
        LD      A,D
        LD      D,0
        BIT     7,H
        JR      NZ,C2
        SLI     E
        RL      D
        SBC     HL,DE
        POP     DE
        JR      C3
C2      SUB     E
        DEC     A
        ADD     A,A
        RL      D
        LD      E,A
        ADD     HL,DE
        POP     DE
        DEC     D
C3      PUSH    HL
        LD      B,D
        LD      C,E
        PUSH    DE
        CALL    CIR1
        LD      A,B
        LD      B,C
        LD      C,A
        CALL    CIR1
        POP     DE
        POP     HL
        INC     E
        LD      A,E
        CP      D
        JR      C,C1
        RET
CIR1    LD      A,B
        ADD     A,XH
        JR      C,C4
        LD      D,A
      LD      A,C
        ADD     A,XL
        JR      C,C4
        LD      E,A
        CALL    CIR2
C4      LD      A,XH
        SUB     B
        JR      C,C5
        LD      D,A
        LD      A,C
        ADD     A,XL
        JR      C,C5
        LD      E,A
        CALL    CIR2
C5      LD      A,XH
        SUB     B
        JR      C,C6
        LD      D,A
        LD      A,XL
        SUB     C
        JR      C,C6
        LD      E,A
        CALL    CIR2
C6      LD      A,B
        ADD     A,XH
        RET     C
        LD      D,A
        LD      A,XL
        SUB     C
        RET     C
        LD      E,A
        CALL    CIR2
        RET
CIR2    LD      A,D
        CP      192
        RET     NC
        LD      A,E
        CPL
        AND     7
        ADD     A,A
        ADD     A,A
        ADD     A,A
        ADD     A,199
        LD      (BITNUM+1),A
        SRL     E
        SRL     E
        SRL     E
        LD      A,D
        AND     56
        RLCA
        RLCA
        OR      E
        LD      L,A
        LD      A,D
        AND     7
        LD      E,A
        LD      A,D
        AND     192
        RRA
        SCF
        RRA
        RRA
        OR      E
        LD      H,A
        XOR     A
BITNUM  SET     0,A
        OR      (HL)
        LD      (HL),A
        RET


             * * *



Другие статьи номера:

Вступление - Новая оболочка у газеты.

Графики BBS - Графики работы BBS.

Бутылка канифоли - Контроллер BZ128 для компютер "Байт".

Программистам - Быстрая процедура вычерчивания окружности.

Программистам - Ускоренный Decruncher к паковщику Data-Squeezer v4.x.

Программистам - Корректная обработка дисковых ошибок, возникающих при обращении к TR-DOS через #3D13.

Сюжет - Новелла к игре "Криминальное аббтство" (La abadia).

AMIGA4EVER - Об Амижной сцене.

Рассказ - Рассказ "Новые приключения Винни Пуха" (глава 3,4).

Реклама - Реклама и объявления.

Заключение - Заключение.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Смайлик - Для нормального человека: одна бутылка - нормально, две бутылки - много, три бутылки - мало...
Новости - Nikf нарисовал новые ascii, Ldir решил покончить с учёбой, письмо от Vitamin/CAIG.
Беседы при свечах - Андрей Чертков - Вячеслав Рыбаков.
Презентация - Mickey mouse.
Печатается с продолж. - Папуас из Гондураса (продолжение).

В этот день...   20 апреля