Spectrum Progress #01
30 сентября 1996

Записки программиста - унивкрсальная библиотека для работы с графикой от Вячеслава Медноногова - Graphic Library v1.1

   
   
   

  
            Graphic  Library  v1.1

  (C) Вячеслав Медноногов, 1991,1992.
  (C) описание - Вячеслав Медноногов, 1996.


  Растущая  популярность ZX Spectrum  привела к
тому,  что  многие из тех, кто воспринимал этот
компьютер  только  как  игрушку,  сейчас с удо-
вольствием  осваивают  его  как мощное средство
программирования. И если ещё год-два назад речь
могла идти только о бейсике, то сегодня интерес
вызывает ассемблер. Это не слишком сложный язык
однако для некоторых, особенно начинающих прог-
раммистов препятствием становится вывод графики
в  разрабатываемых  ими  системных и прикладных
программах.


  Чтобы помочь им, я предлагаю свою графическую
библиотеку, ставшую ядром игры "Танкодром". Она
же  вошла и в игру "Буратино". С некоторыми из-
менениями  эта  библиотека  вошла,  в  качестве
вспомогательной, в игру "НЛО. Враг неизвестен".

  Отличительными    чертами   Graphic   Library
(GrLib1.1)  являются  малый  размер (880 байт),
универсальность, возможность работы всех проце-
дур с обычным и теневыми экранами, вывод спрай-
тов  и атрибутов всеми возможными способами на-
ложения, построение точек и отрезков. Кроме то-
го,  в неё вошли процедуры целочисленного умно-
жения и деления.

  Ещё одним  важным  достоинством  является то,
что все процедуры (кроме GETSIM и GETSCR) рабо-
тают  корректно  с любыми входными параметрами,
поэтому, даже если вы ошибётесь в задании коор-
динат  точек,  отрезков,  спрайтов или размеров
примитивов,  по моей вине ваша программа не вы-
летит (правда, в том случае, если правильно ис-
пользовали процедуру настройки экрана SELSCR).

  К недостаткам можно отнести лишь то, что, как
и  любая  универсальная и компактная библиотека
она имеет быстродействие, недостаточное для на-
писания  серьёзных динамических игр (типа "ELI-
TE"  или "НЛО"). Тем не мение её быстродействия
с лихвой хватит, чтобы повторить большинство из
существующих сейчас игр.

  Итак, что же входит в GrLib1.1:

  a) Математическая подбиблиотека:

    MULB2      HL*E->DE    Умножение
    MULB        L*E->DE    флаг C-переполнение
    MUL        HL*DE->DE

    DIVB        E/L->E     Деление
    DIVB2      DE/L->E     D-остаток.
                           При переполнении
                           или делении на ноль
                           E->D; 255->E


  б) Векторная графика:

   LINE - линия между (X1=E;Y1=D) и (X2=L;Y2=H)
   PLOT - вывод точки (X=E;Y=D)

  в) Печать символов:

   PRINT - вывод стоки символов:
           A - количество
           D - начальная координата по вертика-
             ли (в знакоместах).
           E - по горизонтали
           HL- адрес начала текста
           BC- адрес используемой таблицы сим-
             волов.

   SIMBOL - печать одного символа несколько раз
            A - количество повторений
            L - код символа
            BC и DE - как в PRINT

   STRLEN - найти длину строки до разделителя
            0 или 13
            HL - начало строки
            на выходе:
            A - количество символов в строке

  пример:   LD    HL,TEXT
            PUSH  HL
            CALL  STRLEN
            POP   HL
            LD    BC,#3C00;набор символов в ПЗУ
            LD    DE,#0502
            CALL  PRINT
            RET
     TEXT   DEFM  "Hello, World"
            DEFB  0

  г) Работа со спрайтами:

       для ниже приведенных процедур
        H - координата Y
        L - координата X
        B - ширина в знакоместах
        C - высота в знакоместах
       DE - адрес изображения в памяти

 - Вывод спрайтов          X            Y
     PUTSPR          в пикселах   в знакоместах
     PUTSCR          в пикселах     в пикселах
     PUTSIM          в знакоместах  в пикселах

 - Заполнение окна байтом из регистра А
    SIMBAR   координаты X и Y в знакоместах

 - Сохранить изображение спрайта в памяти
     DE - адрес буфера для сохранения спрайта
    GETSIM   координаты X и Y в знакоместах

 - Вывести атрибуты спрайта на экран
    PUTATR (параметры как и у PUTSIM)

 - Сохранть атрибуты спрайта в буфере с адреса
     регистра DE
    GETATR (параметры как и у GETSIM)

 - Заполнить окно атрибутами одного цвета из
     регистра A
    ATRBAR  (параметры как у SIMBAR)

  д) Установить способ наложения примитивов

     Вызывается :
       LD     A,<режим>
       CALL   CHNGRG

     где <режим> имеет следующие мнемоники:

   * NOP_ - копирование
     OR_  - наложение по принцыпу "ИЛИ"
     XOR_ - по принцыпу "исключающее ИЛИ"
   * AND_ - по принцыпу "И"
   * INV_ - инверсия

     * - только для PRINT, PUTSIM, PUTSPR

 - Выбор экрана  (SELSCR)

    Во всех своих играх я редко формирую изоб-
    ражения в основном экране: сначала я строю
    его  в  "теневом"  экране,  а затем быстро
    пересылаю его в основной.
      Теневой экран - какая-либо область в па-
    мяти длинной 6 Кбайт (6912 байт).
      GrLib накладывает  ограничения, согласно
    которому  адрес  начала  "теневого" экрана
    должен быть кратен #0800 (2048).

  Выбор экрана осуществляется так:

      LD     A,<адрес экрана/256>
      CALL   SELSCR

  Для вывода в обычный экран используйте:

      LD     A,#40
      CALL   SELSCR

  Если не вызывать  SELSCR, по умолчанию  все
процедуры выводят изображения в основной
экран.

  Если не вызывать CHNGRG,  по умолчанию уста-
новлен режим OR_.

  Остальные  процедуры  являются вспомогатель-
ными.

  GrLib 1.1  находится  в играх  "Танкодром" и
"Буратино" (в "Буратино"- после декомпрессии с
адреса 64640). Вы сможете сами посмотреть, как
они используются в этих играх с помощью отлад-
чика или теневого монитора.

  За три года эксплуатации  я обнаружил только
два недочёта:

  MULB,  MULB2,  MUL -   не  всегда  правильно
выставляют флаг переноса, поэтому, если вы за-
хотите построить на их основе умножение 4-8
байтовых чисел, их надо будет изменить.

  PUTATR, GETATR - работают только с атрибута-
ми основного экрана.  До появления игр на 128K
это  не имело  большого  значения. В  качестве
практикума по программированию вы можете попы-
таться самостоятельно устранить этот недочёт.

  Откомпилируйте и запустите GrDemo и вы полу-
чите некоторое представление о GrLib 1.1.

  Всего хорошего, успехов в написании игр,
                             дорогие коллеги !

                   ──══──

  От редакции SP:

  В приложении к журналу  вы найдёте графичес-
кую библиотеку  и  демонстрационную программу.
Напоминаем вам  о необходимости  инициализации
приложения для свободного доступа к файлам.




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

Похожие статьи:
Реклама - Реклама и объявления.
B.B.S. Новости - Новая станция Quake 2 BBS.
Новости - Свежие новости из жизни ковровских хакеров.

В этот день...   20 ноября