THE COMPLETE AMIGA HARDWARE
REFERENCE MANUAL

                                  Глава 3

                                  ЭКРАНЫ

ВВЕДЕНИЕ
Экран монитора  состоит  из  двух  основных частей,  экранов,  которые
иногда   называют   задними   планами   и   спрайтов,   под   которыми
подразумеваются  легко  перемещаемые  графические  объекты.  Эта глава
описывает как  сформировать  экран  прямым  программированием  железа.
Примечание  переводчика:  в  английском  варианте  используется термин
playfield,  который  можно  перевести  как  'игровое  поле'.  В  целях
улучшения читабельности в русском варианте используется термин 'экран'

                              ОБ ЭТОЙ ГЛАВЕ

Эта глава  начинается  с краткого обзора возможностей экрана,  включая
определения  некоторых  фундаментальных   терминов,   и   продолжается
следующими главными темами:
- Формирование простого 'основного' экрана, такого же по размерам, как
и экран дисплея.  Эта глава также содержит концепцию и фундаментальные
сведения для формирования любого экрана.
- Формирование  экрана  в  режиме dual-playfield,  в котором один план
накладывается  на  другой.  Эта  процедура   немного   отличается   от
предыдущей.
- Формирование экранов различных размеров и изображение  только  части
большого экрана.
- Скроллирование экранов вертикально и горизонтально.
- Дополнительные  темы  помогут  Вам использовать экраны в специальных
ситуациях.


Для получения  информации  о  движущихся  спрайтах  смотрите  главу 4,
'Спрайты'. Существуют также объекты, движущиеся по экрану и являющиеся
частью   экрана.  Для  движения  части  экрана  используется  техника,
называемая экранной анимацией, которая описана в главе 6 'Блиттер'

СТРОЕНИЕ ЭКРАНА

Амига использует  растровую  технологию  для  изображения  экранов  на
мониторе. Картинка, которую Вы видите состоит из горизонтальных линий,
расположенных одна под другой.  Каждая из этих линий состоит из точек.
Вы  создаете  изображение  на  экране,  определяя  в  памяти  один или
несколько битпланов и заполняя их '1' или '0'.  Комбинации из нулей  и
единиц определяют цвет выводимой на экран точки.

Каждая линия  представляется  одним  перемещением  электронного  луча,
который рисует картинку там, где проходит.
        ________________________________________
  |    |                                        |
  |    |  --->----->----->----->----->---->---  |
  |    |  ____________________________________  |
  |    |  ____________________________________  |
  |    |  ____________________________________  |
  |    |            __________________          |
  |    |            __________________          |
  |    |                                        |
  |    |              ЭКРАН МОНИТОРА            |
  |    |            __________________          |
  |    |            __________________          |
  |    |  ____________________________________  |
  |    |  ____________________________________  |
  |    |  _____________________________________ |
  |    |  ____________________________________  |
 \ /   |________________________________________|

         Рис 3-1:  Как рисуется картинка на экране

      ЭКРАН МОНИТОРА Видео луч рисует каждую линию слева направо. Весь
                       экран рисуется сверху вниз, линия за линией.

Видео луч рисует 262 линии сверху вниз,  из  которых  200  видимых  на
экране NTSC.  В системе PAL луч рисует 312 линий,  из них 256 видимых.
Полный набор видимых линий (262/NTSC или 312/PAL)  называется  кадром.
Время прорисовки кадра,  т.е. время требуемое лучу для прорисовки всех
линий равно 1/60 секунды для  NTSC  и  1/50  секунды  для  PAL.  Между
рисованием  кадров  видео  луч выключается и перемещается вверх экрана
для рисования следующего кадра.

Область экрана определяется как сетка пикселей. Пиксель это простейший
элемент  картинки,  наименьшая  адресуемая часть экрана.  Рисунок ниже
показывает что такое пиксель и как они формируют экран.

   _______________________
  |       _               |
  |      |_| <----------------------- Картинка состоит из множества
  |               _       |           элементов. Каждый элемент
  |             _|_|_     |           называется пиксель
  |            |_|_|_|    |
  |            |_|_|_| <------------- Пиксели объединяются вместе для
  |_______________________|           построения больших объектов

   ___________________________     ____________________________
  |                           |   |                            |
  |                           |   |                            |
  | <------ 320 пикселей ---> |   | <------ 640 пикселей ----> |
  |                           |   |                            |
  |                           |   |                            |
  |                           |   |                            |
  |                           |   |                            |
  |___________________________|   |____________________________|

  В нормальном разрешении         В высоком разрешении
  горизонтальная линия состоит    горизонтальная линия состоит
  из 320 пикселей                 из 640 пикселей

                      Рис 3.2: Что такое пиксель?

Амига предлагает  выбор  горизонтального  и  вертикального разрешения.
Горизонтальное разрешение может быть низкое  и  высокое.  Вертикальное
может быть в режиме интерлейса и не интерлейса.

- В низком разрешении, нормальный экран имеет ширину 320 пикселей.
- В высоком разрешении, нормальный экран имеет ширину 640 пикселей при
том-же физическом размере экранной области.
- В неинтерлейсном режиме экран имеет высоту  320/PAL  и  200/NTSC.
- Интерлейсный режим дает соответственно 512 и 400 линий.

Эти режимы могут комбинироваться, например возможен интерлейсный экран
в высоком разрешении.

Размеры в   предыдущем   параграфе   относятся   к   так    называемым
'нормальным'или   номинальным   значениям,   которые  рекомендуются  к
использованию.  Вообще,   Вы   можете   показывать   бОльшие   экраны,
максимальные   значения   даются  в  разделе  'Битпланы  и  окна  всех
размеров'.  Также,  размер  экрана  в   памяти   часто   больше,   чем
изображается  на  экране монитора.  Вы выбираете,  какую часть большой
картинки в памяти показать на мониторе.

Экраны, которые выше,  чем видимое окно могут  плавно  скроллироваться
вверх   или   вниз.   Экраны,   которые  шире,  могут  скроллироваться
горизонтально справа налево или слева направо.  Это описано в  разделе
'Скроллирование экранов'

Графическая система Амиги позволяет использовать 32 различных цвета на
отдельном  экране.  Вы   можете   задавать   цвет   каждого   пикселя,
устанавливая соответствующие ему биты.  Экран, сформированный подобным
образом называется битмапом.

Например, в двухцветном  экране,  цвет  каждого  пикселя  определяется
установкой одного бита.  Если бит 0, пиксель окрашивается в один цвет,
если 1 - в другой.  Для 4х цветного  экрана  вы  задаете  в  памяти  2
битплана.  Когда  экран  показывается,  битпланы накладываются друг на
друга,  что позволяет использовать 2 бита для каждого  пикселя.  Таким
образом Вы можете определить до 5-ти битпланов.  Экраны,  состоящие из
3х,  4х или 5-ти битпланов позволяют выбирать соответственно 8, 16 или
32 цвета.

Цвет пикселя всегда определяется двоичной комбинацией бит,  из которых
он  состоит.  Когда  система  объединяет  битпланы  для   изображения,
комбинацией  бит  формируется  номер  цветового  регистра.  Этот метод
называется индексацией.  Амига имеет 32 цветовых регистра,  содержащих
цвета, определяемые пользователем из палитры 4096 цветов.

Рисунок 3-3   показывает  как  комбинации  битпланов  формируют  номер
цветового регистра, определяющего цвет пикселя.

   _______________________________
  |      _
  |     |_|  Битплан 5
  |   ____________________________      __
  |  |     _                           |0 |_     --------
  |  |    |_|  Битплан 4               |_|0 |_          |
  |  |   _________________________       |_|1 |_         \__ См. ниже
  |  |  |    _                             |_|1 |_       /
  |  |  |   |_|  Битплан 3                   |_|1 |     |
  |  |  |   ______________________             |__| -----
     |  |  |   _
     |  |  |  |_|  Битплан 2
     |  |  |   ___________________
        |  |  |  _
        |  |  | |_|  Битплан 1
        |  |  |
           |  |  ^
           |  |  |
              |  |
              |  \-------------- Один пиксель

     Биты из планов
     5,4,3,2,1
                 Цветовые регистры
              _______________________
             |                       |
      00000  |                       |
             |_______________________|
             |                       |
      00001  |                       |
             |_______________________|
             |                       |
      00010  |                       |
             |_______________________|
             |                       |
      00011  |                       |
             |_______________________|
             |                       |
      00100  |                       |
             |_______________________|
             |                       |
      -----  |           |           |
             |           |           |
             |           |           |
      -----  |           |           |
             |           |           |
             |           |           |
      -----  |          \|/          |
             |_______________________|
             |                       |
      11000  |                       |
             |_______________________|
             |                       |
      11001  |                       |
             |_______________________|
             |                       |
      11010  |                       |
             |_______________________|
             |                       |
      11011  |                       |
             |_______________________|
             |                       |
      11100  |                       |
             |_______________________|
             |                       |
      11101  |                       |
             |_______________________|
             |                       |
      11110  |                       |
             |_______________________|
             |                       |
      11111  |                       |
             |_______________________|

                Рис 3-3: Образование цветов из битпланов

Значения битпланов с более высокими номерами располагаются  в  старших
разрядах  двоичного  числа.  Как  показано  на рис 3-4 младший битплан
формирует правую цифру номера цвета,  следующий битплан - вторую цифру
и т.д.

Пример для 4х пикселей
   a   b   c   d

   1   1   0   0             Данные битплана 5 старший разряд
   1   0   1   0             Данные битплана 4
   1   0   0   1             Данные битплана 3
   0   1   1   1             Данные битплана 2
   0   0   1   0             Данные битплана 1 младший разряд

   d  Значение 6  COLOR6
   c  Значение 11 COLOR11
   b  Значение 18 COLOR18
   a  Значение 28 COLOR28

        Рис 3-4: Значимость битпланов в номере цветового регистра

Вы также можете определить два раздельных экрана,  в каждом из которых
до 3 битпланов.  Каждый из этих двух экранов  использует  отдельные  8
цветов. Этот режим называется dual-playfield.

ФОРМИРОВАНИЕ ПРОСТОГО ЭКРАНА

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

Для создания экрана Вам необходимо определить следующие параметры:

- Высоту,  ширину экрана и размер видео-окна (где  будет  изображаться
экран)
- Цвет каждого пикселя на экране
- Горизонтальное разрешение
- Вертикальное разрешение или интерлейс
- Выборку данных и модуль,  которые указывают системе,  сколько данных
размещать на горизонтальной линии и как переносить данные из памяти на
экран.

Кроме этого,  Вам  необходимо  выделить  память  для  хранения экрана,
установить указатели,  которые покажут системе,  где искать  данные  и
(если   хотите)   написать   программу  для  коппера  для  руководства
изображением экрана.

ШИРИНА И ВЫСОТА ЭКРАНА

Для создания экрана одного размере с  окном,  Вы  можете  использовать
разрешение  320 или 640 пикселей по горизонтали и по вертикали 200/400
для NTSC или 256/512 для PAL в зависимости от выбора интерлейса

ЦВЕТА И БИТПЛАНЫ

Назначение цветов экрана:

1. Решить,  сколько цветов Вам  нужно  и  выбрать  цвета  для  каждого
пикселя.
2. Загрузить цвета в цветовые регистры.
3. Выделить  память  для  битпланов  и  установить указатели на каждый
битплан.
4. Записать данные в каждый битплан для получения нужных цветов.

Таблица 3-1  показывает,  сколько  битпланов необходимо для различного
количества цветов.
                    Число       Число
                    цветов    Битпланов
                     1- 2         1
                     3- 4         2
                     5- 8         3
                     9-16         4
                    17-32         5

                  Табл 3-1: Цвета на простом экране.

ТАБЛИЦА ЦВЕТОВ
Таблица цветов содержит 32 регистра и вы  можете  загружать  различные
цвета в каждый регистр.

     Табл 3-2: Содержимое таблицы цветов

Название регистра  Размер         Описание

       COLOR00     12 бит   Фоновый цвет
       COLOR01     12 бит Цвет 1 (например,  это второй цвет
                            двухцветного экрана)
       COLOR02     12 бит   Цвет 2.
       ...
       COLOR31     12 бит   Цвет 31.

COLOR00 зарезервирован для цвета фона.  Этот цвет отображается в любом
месте,  где  нет  никаких  других объектов,  а также за пределами окна
экрана, в области бордюра.

ПРИМЕЧАНИЕ
Если Вы используете генлок для ввода видео-изображения с видео-камеры,
то фоновый цвет  становится  прозрачным  и  вместо  него  изображается
внешний видео-сигнал.

12 бит  цветового  регистра  позволяют  Вам  определить  любой цвет из
палитры 4096 цветов для каждого регистра цвета,  как показано в  табл.
3-3
+       Табл 3-3: Содержание регистров цвета

           Биты
     Биты 15 -12 Не используются
     Биты 11 - 8 Красный
     Биты  7 - 4 Зеленый
     Биты  3 - 0 Синий

 Таблица 3-4 показывает несколько примеров  задания  цветов.  В  конце
главы есть более подробный список.

       Табл 3-4: Примеры задания цветов

     Содержимое                    Цвет
   регистра цвета

        $fff                      Белый
        $6fe                      Небесно голубой
        $db9                      Рыжевато-коричневый
        $000                      Черный+

Пример загрузки регистров цвета

    LEA    CUSTOM,a0               ; Базовый адрес регистров чипсета
    MOVE.W #$FFF,COLOR00(a0)       ; Белый цвет в регистр 0
    MOVE.W #$6FE,COLOR01(a0)       ; Небесно-голубой в регистр 1

ПРИМЕЧАНИЕ
Цветовые регистры - только для записи.  Вы  можете  узнать  содержимое
каждого  регистра только посмотрев на экран.  Поэтому желательно иметь
копию значений регистров  в  памяти  и  обновлять  ее  одновременно  с
записью  в  регистры.  Таким  образом вы всегда сможете узнать,  какие
цвета содержатся в каждом из регистров.

ВЫБОР КОЛИЧЕСТВА БИТПЛАНОВ
После выбора   количества   цветов   и   соответствующего   количества
битпланов,  Вы  должны   сказать   системе,   сколько   битпланов   Вы
используете.

Вы выбираете количество битпланов записью в регистр BPLCON0 (Bit Plane
Control Register 0) Биты,  ответственные  за  это  -  14,  13,  и  12,
называются  BPU2,  BPU1,  и  BPU0  ("Bit  Planes  Used").  Таблица 3-5
показывает значения,  записываемые в эти  биты  и  соответствующее  им
количество битпланов.

      Табл 3-5: Установка числа битпланов

               Число      Имена
   Значение  битпланов  битпланов

      000      Нет *
      001       1       План 1
      010       2       Планы 1 и 2
      011       3       Планы 1 - 3
      100       4       Планы 1 - 4
      101       5       Планы 1 - 5
      110       6       Планы 1 - 6 **
      111       7       Значение не используется.

* Показывается только фоновый цвет; Экран не виден.
** Шестой  битплан используется только в режимах dual-playfield и HAM,
описанных в разделе 'Дополнительные темы'

ПРИМЕЧАНИЕ
Биты в  регистры  BPLCON0  не  могу  быть  установлены  отдельно.  Для
установки одного бита Вы должны перезагрузить весь регистр.

Следующий пример  показывает,  как  установить  два  битплана в низком
разрешении.

    MOVE.W #$2200,BPLCON0+CUSTOM ; Запись

Поскольку регистр BPLCON0  используется  также  для  установки  других
характеристик  экрана и биты не могут быть установлены отдельно,  этот
пример также устанавливает другие  параметры  (полный  список  которых
будет приведен позже)

- Режим HAM выключен.
- Отдельный экран включен
- Используется один битплан.
- Включен цветной видео вывод. (Не применяется на всех моделях.)
- Звук генлока выключен.
- Световое перо выключено.
- Интерлейс выключен.
- Внешняя синхронизация выключена. (генлок)

ВЫБОР ГОРИЗОНТАЛЬНОГО И ВЕРТИКАЛЬНОГО РАЗРЕШЕНИЯ

Стандартный телевизионный  экран  больше  подходит  для  использования
низкого разрешения (320 пикселей в горизонтальной линии). RGB мониторы
могут работать и в высоком разрешении (640 пикселей  в  горизонтальной
линии) Если Вы создали какой-либо объект в низком разрешении,  а затем
показали его на экране в  высоком  разрешении,  то  его  ширина  будет
только половина от нормальной.

Для установки  горизонтального  разрешения используется бит 15 HIRES в
регистре BPLCON0

    Высокое разрешение - 1 в бит 15.
    Низкое разрешение - 0 в бит 15.

В высоком  разрешении  Вы  можете  использовать  до  4х  битпланов  и,
следовательно до 16 цветов.

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

      Табл 3-6: Число линий в нормальном экране

                    NTSC PAL
     -----------------------
     Без интерлейса 200  256
     С интерлейсом  400  512

В режиме интерлейса попеременно изображаются два экранных поля


линия 1________________________
   | _________________________ |\
   | _________________________ | \
   |        _________          |  \
   |         Поле  1           |   \   __________________
   |        _________          |    \ |___|______________|___Линия 1
   | _________________________ |     >|___|______________|___
   | _________________________ |    / |   |              |   Линия 2
   |___________________________|   /  |   |Экран монитора|
                                  /   |   |  (400 линий) |
Линия 1________________________  /    |   |              |
   | _________________________ |      |__\|/_____________|
   | _________________________ |
   |        _________          |
   |         Поле  2           |      (Используется то-же физическое
   |        _________          |       пространство, что и для не
   | _________________________ |       интерлейсного экрана в 200
   | _________________________ |       линий)
   |___________________________|


                         Рис 3-5: Интерлейс

Использование интерлейсного  режима  требует  немного   дополнительных
установок  регистров  (как  Вы  увидите дальше в этой главе),  он дает
хорошие результаты для определенных эффектов.  Рассмотрим диагональную
линию  на  рис 3-6,  как она выглядит в интерлейсном и не интерлейсном
режиме.  Интерлейсный режим  смягчает  'лестничный  эффект'  по  краям
изображения.



           РИС 3-6: ЭФФЕКТ ИНТЕРЛЕЙСА НА КРАЯХ ОБЪЕКТА

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

Для установки режима интерлейса служит бит 2, LACE в регистре BPLCON0:

    Интерлейс - 1 в 2.
    Не интерлейс - 0 в 2.

Как объяснено выше,  в разделе 'Установка количества битпланов' биты в
BPLCON0 не могут устанавливаться отдельно.

Следующий пример  показывает  как  установить  интерлейсный  режим   в
высоком разрешении.

    MOVE.W #$A204,BPLCON0+CUSTOM ; Запись

Поскольку регистр  BPLCON0  используется  также  для  установки других
характеристик  экрана  ,  этот  пример  также   устанавливает   другие
параметры:

- Включено высокое разрешение
- Режим HAM выключен.
- Используются два битплана.
- Включен цветной видео вывод.
- Отдельный экран включен
- Звук генлока выключен.
- Световое перо выключено.
- Интерлейс включен.
- Внешняя синхронизация выключена. (генлок)

Количество памяти,   необходимой   для  каждого  битплана  зависит  от
выбранного разрешения,  поскольку  экраны  в  высоком  разрешении  или
интерлейсе  содержат  больше  данных  и  следовательно занимают больше
памяти.

ВЫДЕЛЕНИЕ ПАМЯТИ ДЛЯ БИТПЛАНОВ
После того,  как  Вы  установили  количество битпланов и их разрешение
необходимо выделить память для всех битпланов.  Если Вы работаете  под
AmigaOS,  используйте  системные  вызовы,  такие,  как  AllocMem() для
резервирования памяти.  Если Вы взяли машину под свой контроль, просто
резервируйте   память   для   битпланов.  Затем  установите  указатели
BPLxPTH/BPLxPTL на начало каждого битплана. Начало находится в верхнем
левом углу битплана.

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

      Таб 3-7: Требования к памяти для битпланов, NTSC

             Размер        Режимы                     Длина, байт

             320 X200      Низкое, без интерлейса        8,000
             320 X400      Низкое, интерлейс             16,000
             640 X200      Высокое, без интерлейса       16,000
             640 X400      Высокое, интерлейс            32,000

      Таб 3-8: Требования к памяти для битпланов, PAL

             Размер        Режимы                     Длина, байт

             320 X256      Низкое, без интерлейса        8,192
             320 X512      Низкое, интерлейс             16,384
             640 X256      Высокое, без интерлейса       16,384
             640 X512      Высокое, интерлейс            32,768


ПРИМЕР РАЗМЕРА БИТПЛАНА ДЛЯ NTSC
Например, в  NTSC для нормального экрана,  не интерлейсного,  в низком
разрешении размером 320х200 точек,  каждая линия занимает 40 байт (320
деленное  на  8  =  40)  Умножаем на 200 линий и получаем 8000 байт на
битплан.  Экран,  состоящий из двух  битпланов,  требует  16000  байт.
Память  для каждого битплана должна быть непрерывной,  следовательно у
вас должно быть  два  блока  по  8000  байт.  Рисунок  3-7  показывает
организацию  блока  памяти  в  8000 байт в виде 200 линий по 40 байт в
каждой.
   _____________                            _____________
  | | | | | | | |  _____________________\  | | | | | | | |
  |_|_|_|_|_|_|_|                       /  |_|_|_|_|_|_|_|
     Адрес N                                Адрес N+38
   _____________                            _____________
  | | | | | | | |  _____________________\  | | | | | | | |
  |_|_|_|_|_|_|_|                       /  |_|_|_|_|_|_|_|
     Адрес N+40               |             Адрес N+78
   _____________             \|/            _____________
  | | | | | | | |  ___________V_________\  | | | | | | | |
  |_|_|_|_|_|_|_|                       /  |_|_|_|_|_|_|_|
     Адрес N+7960                           Адрес N+7998

          Рис 3-7: Организация памяти в битплане

Доступ к памяти битпланов осуществляется через пару регистров  BPLxPTH
и  BPLxPTL  для каждого битплана (всего 12 регистров).  'x' в названии
регистра обозначает номер битплана (например BPL1PTH и BPL1PTL  хранят
адрес первого битплана) Пара регистров PTH и PTL содержит 19-ти битный
адрес,  но для программиста они выглядят как 32-х битный адрес и могут
быть  записаны одной командой записи длинного слова в старший регистр,
оканчивающийся на 'PTH'

Пример ниже показывает, как устанавливать указатели битпланов. Возьмем
два  битплана,  один  по  адресу  $21000 а другой - $25000 и установим
BPL1PT = $21000 и BPL2PT = $25000, хота обычно этим занимается коппер.

    LEA    CUSTOM,a0               ; Базовый адрес регистров железа
    MOVE.L $21000,BPL1PTH(a0)      ; Записываем указатель первого битплана
    MOVE.L $25000,BPL2PTH(a0)      ; Записываем указатель второго битплана

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

РИСОВАНИЕ НА БИТПЛАНАХ
После того  как  Вы  определили  количество  битпланов  и   установили
указатели, можно начинать записывать цвета в битпланы.

ОДНО- И ДВУХ-ЦВЕТНЫЕ ЭКРАНЫ
Для одноцветного экрана все,  что Вам надо, это записать 0 во все биты
битплана,  как  показано  в  примере ниже.  Этот код заполняет битплан
низкого разрешения цветом фона (COLOR00), записывая 0 в область памяти
битплана. Битплан начинается с $21000 и имеет длину 8000 байт

        LEA    $21000,a0        ; Указатель на битплан
        MOVE.W #2000,d0         ; Пишем 2000 длинных слов = 8000 байт
LOOP:   MOVE.L #0,(a0)+         ; Пишем $0000
        dbra   d0,LOOP          ; Уменьшаем счетчик и повторяем

Для двухцветного экрана,  Вы записываете 0 там,  где изображается цвет
фона  и 1 там,  где изображается цвет из регистра COLOOR01.  Следующий
пример  похож  на  предыдущий,  только   вместо   $0000   записывается
$FF00FF00. Так мы получаем два цвета.

        LEA    $21000,a0        ; Указатель на битплан
        MOVE.W #2000,d0         ; Пишем 2000 длинных слов = 8000 байт
LOOP:   MOVE.L #FF00FF00,(a0)+  ; Пишем $FF00FF00
        dbra   d0,LOOP          ; Уменьшаем счетчик и повторяем


ЭКРАНЫ 3х И БОЛЕЕ ЦВЕТОВ
Для 3х и более цветов Вам нужен больше чем 1 битплан. Задача стоит так
задать битпланы,  чтобы когда они объединяются для изображения, каждый
пиксель содержал корректную комбинацию бит.  Это немного сложнее,  чем
экран,  состоящий  из  одного  битплана,  но основная идея и процедуры
одинаковы для экранов вплоть до 32х цветов.

Рисунок 3-8 показывает два битплана, формирующие 4х цветный экран:



                    РИСУНОК 3-8: Комбинирование битпланов

Вы кладете 1 и 0 в оба  битплана,  давая  каждому  пикселю  правильный
цвет.

Таким образом Вы можете объединять до пяти битпланов.  Использование 5
битпланов позволяет выбирать один из 32х различных цветов для  каждого
пикселя.  Таблица  в  конце  главы  содержит  все  комбинации  бит для
экранов, состоящих из 4 и 5 битпланов.

ОПРЕДЕЛЕНИЕ РАЗМЕРА ОКНА ИЗОБРАЖЕНИЯ

После того,  как Вы определили экран,  необходимо  определить  размеры
окна  изображения,  т.е.  окна  на  экране  монитора.  Изменение  окна
изображения влияет  на  весь  изображаемый  экран,  включая  бордюр  и
спрайты.  Вы  не  можете изображать объекты за пределами определенного
окна.  Кроме того,  размер бордюра вокруг экрана также зависит от окна
изображения.

Простой экран, описываемый в этом разделе имеет такой же размер, как и
экранная область,  и такой же размер,  как и окно изображения.  Это не
всегда так: часто окно изображения меньше, чем картинка, находящаяся в
памяти. Такое окно позволяет изображать часть большого экрана, а также
скроллировать  экран  через  окно.  Вы  можете  также  определить окно
большее,  чем экран.  Эти варианты описаны в разделе 'Битпланы и  окна
всех размеров'

Вы задаете   размер   окна   изображения   определяя   вертикальную  и
горизонтальную позицию,  в которой окно начинается и  заканчивается  и
записываете  эти  значения  в регистры окна изображения.  Вертикальное
разрешение имеет размерность в одну линию развертки.  Горизонтальное -
один  пиксель  низкого  разрешения.  Каждая позиция определяется двумя
координатами x и  y,  которые  обычно  записываются  как  (x,y).  Хотя
координаты  (0,0)  находятся  в  левом  верхнем  углу  экрана,  обычно
используются $81 для  нормальной  горизонтальной  позиции  и  $2c  для
вертикальной. Эти позиции одинаковы как для PAL, так и для NTSC.

Железо позволяет  задавать  начальную позицию перед ($81,$2c),  но при
этом часть экрана может стать  невидимой.  Различие  между  абсолютной
начальной  позицией  (0,0)  и  нормальной  ($81,$2c) результат наличия
множества моделей мониторов.  Это необходимо для преодоления искажений
на краях экрана. Электронный луч рисует большую поверхность, чем может
изобразить монитор,  тем самым подавляя краевые  искажения.  Начальная
позиция  ($81,$2c)  центрирует  экран  нормальных  размеров,  оставляя
бордюр шириной 8 пикселей низкого разрешения  вокруг  экрана.  Рисунок
3-9  показывает  соотношения  между окном изображения,  видимой частью
экрана и экраном, содержащим изображение.
         (0,0)
        /      ($81,$2C)
       /______/____________________________
      |   ___/__________________________   |
      |  |  /_________________________  |\ |
      |  | |   /\                     | | \|
      |  | |<--|-------320----------->| |  \
      |  | |   |                      | |  |\
      |  | |   |200                   | |  | \Граница видимого экрана
      |  | |   |                      | |  |
      |  | |   |                      | |  |
      |  | |___\/_____________________| |  |
      |  |__\________________________/__|  |
      |______\_____________________ /______|
              \                    /
               \__Изображение_____/
             начальной и конечной позиции

        Рис 3-9: Положение видимого окна изображения


УСТАНОВКА НАЧАЛЬНОЙ ПОЗИЦИИ ОКНА
Горизонтальная начальная  позиция примерно $81 и вертикальная примерно
$2c центрируют изображение на  большинстве  стандартных  телевизионных
экранах.  Если Вы выберете высокое разрешение или интерлейс, начальная
позиция не изменится.  Она всегда  интерпретируется  в  неинтерлейсном
режиме низкого разрешения.

Регистр DIWSTRT (Display Window Start) содержит начальную позицию окна
изображения.  Этот регистр  содержит  обе  координаты  вертикальную  и
горизонтальную,  называемые соответственно VSTART и HSTART.  Следующий
пример устанавливает DIWSTRT для стандартного экрана,  записывая $2c в
VSTART и $81 в HSTART.

    LEA    CUSTOM,a0               ; Базовый адрес
    MOVE.W #$2C81,DIWSTRT(a0)      ; Регистр начальной позиции окна

УСТАНОВКА КОНЕЧНОЙ ПОЗИЦИИ ОКНА
Вам нужно  также  установить  позицию конца окна,  которая находится в
нижнем правом углу. Если Вы выберете высокое разрешение или интерлейс,
конечная   позиция   не   изменится.  Она  всегда  интерпретируется  в
неинтерлейсном режиме низкого разрешения.

Регистр DIWSTOP (Display Window Stop) содержит конечную  позицию  окна
изображения.  Этот  регистр  содержит  обе  координаты  вертикальную и
горизонтальную,  называемые соответственно VSTOP  и  HSTOP.  Следующий
пример   устанавливает   DIWSTOP  для  стандартного  экрана,  учитывая
начальную позицию ($81,$2c).  Записываемое в  HSTOP  значение  на  256
($100) меньше,  чем нормальное.  Нормальное значение HSTOP = $1c1,  но
записывается как $c1.  HSTOP одинаков  для  PAL  и  NTSC.  При  записи
значения VSTOP также отбрасывается старший байт числа,  большего,  чем
256. Обычно VSTOP равен $f4 для NTSC и $2c для PAL

    Нормальный NTSC DIWSTRT - ($2C81).
    Нормальный NTSC DIWSTOP - ($F4C1).
    Нормальный PAL DIWSTRT - ($2C81).
    Нормальный PAL DIWSTOP - ($2CC1).

Следующий пример   устанавливает   DIWSTOP   стандартного   экрана   :
горизонтальная координата $f4, и вертикальная $c1

    LEA    CUSTOM,a0               ; Базовый адрес
    MOVE.W #$F4C1,DIWSTOP(a0)      ; Регистр конечной позиции окна


      Table 3-9: ОБОБЩЕНИЕ УСТАНОВКИ DIWSTRT И DIWSTOP.

             -Номинальные-         -Возможные-
              NTSC     PAL         MIN     MAX
    DIWSTRT:
      VSTART  $2C      $2C         $00     $FF
      HSTART  $81      $81         $00     $FF

    DIWSTOP:
      VSTOP   $F4      $2C (=$12C) $80     $7F (=$17F)
      HSTOP   $C1      $C1         $00 (=$100) $FF (=$1FF)

УСТАНОВКА ВЫБОРКИ ДАННЫХ

После определения размера и позиции окна,  Вам необходимо дать системе
размещение  экрана  для  выборки  данных  из  памяти.  Для  этого надо
определить где начинается и заканчивается каждая линия  изображения  и
записать  эти  значения  в  регистры выборки данных.  Регистры выборки
данных имеют разрешение в четыре пикселя (в отличие от регистров окна,
разрешение которых 1 пиксель). Каждая позиция отстоит от предыдущей на
4 пикселя. Пиксель 0 имеет позицию 0, пиксель 4 - позицию 1 и т.д.

Позиции начала   выборки   данных   и    начала    окна    изображения
взаимодействуют  друг с другом.  Рекомендуется,  чтобы значения начала
выборки данных ограничивались программным разрешением в 16 пикселей (8
тактов  в  низком  разрешении  и  4 такта в высоком разрешении) Железо
требует небольшой задержки после первой выборки данных перед тем,  как
сможет  изображать  данные.  Как результат,  существует различие в 4.5
такта между значением начала окна и началом выборки данных.

    Нормальный DDFSTRT в низком разрешении - ($0038).
    Нормальный DDFSTRT в высоком разрешении - ($003C).

Разрешение начала  и  конца  окна  изображения в два раза больше,  чем
разрешение выборки данных.
          $81
          ---  -8.5=$38
           2

          $81
          ---  -4.5=$3c
           2

Соотношение между началом и концом выборки данных:
    DDFSTRT = DDFSTOP-(8*(число слов-1)) для низкого разрешения
    DDFSTRT = DDFSTOP-(4*(число слов-2)) для высокого разрешения

    Нормальный DDFSTOP в низком разрешении - ($00D0).
    Нормальный DDFSTOP в высоком разрешении - ($00D4).

Следующий пример устанавливает  начало  выборки  данных  для  простого
экрана = $38 и конец = $D0

    LEA    CUSTOM,a0               ; Базовый адрес
    MOVE.W #$0038,DDFSTRT(a0)      ; Записываем DDFSTRT
    MOVE.W #$00D0,DDFSTOP(a0)      ; Записываем DDFSTOP


Вам также необходимо сказать системе,  сколько байт относится к каждой
горизонтальной  линии  на  экране.  Для  этого  Вы  должны  определить
значение модуля.  модуль - это число байт между  последним  словом  на
одной горизонтальной линии и началом первого слова на следующей линии.
таким образом модуль позволяет системе конвертировать данные битплана,
представленные  в  линейной  форме  (в виде последовательности байт) в
прямоугольную форму (линия за линией) Для простого  экрана,  когда  он
такой же,  как и окно изображения,  модуль равен 0, потому что область
памяти битпланов содержит ровно столько же  байт,  сколько  Вы  хотите
изобразить  на экране.  Рис 3-10 и 3-11 показывают размещение простого
экрана в памяти и его восстановление в виде прямоугольной области.

Указатели адреса битплана (BPLxPTH и  BPLxPTL)  используются  системой
для  выборки  данных  для  экрана.  Эти указатели динамические.  Когда
начинается выборка данных,  указатели непрерывно увеличиваются,  чтобы
указывать  на  следующее  слово,  которое  должно быть выбрано (данные
выбираются  по  2  байта  за  раз)  Когда  достигается  конец   строки
(определенный  в регистре DDFSTOP) к указателям битпланов прибавляется
значение модуля,  устанавливая указатели на первое слово  в  следующей
горизонтальной линии.

Данные для линии 1:
Размещение:    НАЧАЛО     НАЧАЛО+2     НАЧАЛО+4   ....НАЧАЛО+38
              Самое      След. слово  След. слово       Последнее
            левое слово                             изображаемое слово
                                                           ^
Остановка выборки данных (DDFSTOP) для                     |
каждой горизонтальной линии после того, <------------------|
как выбрано последнее слово линии

Рис 3-10: Выборка данных для первой линии при модуле = 0

После того,  как первая линия выбрана,  указатели битпланов BPLxPTH  и
BPLxPTL  содержат  значение  НАЧАЛО+40.  Модуль  (в  данном  случае 0)
прибавляется к текущему значению указателей так,  чтобы  они  начинали
указывать  на данные для следующей линии,  которые начинаются с адреса
НАЧАЛО+40

Данные для линии 2:
Размещение:  НАЧАЛО+40    НАЧАЛО+42    НАЧАЛО+44  ....НАЧАЛО+78
              Самое      След. слово  След. слово       Последнее
            левое слово                             изображаемое слово

Рис 3-11: Выборка данных для второй линии при модуле = 0

Указатели всегда  содержат четный адрес,  потому что данные выбираются
из памяти по слову за раз.

Существует два регистра  модуля,  BPL1MOD  для  нечетных  битпланов  и
BPL2MOD для четных битпланов. Это сделано для возможности использовать
битпланы разного размера  в  режиме  dual-playfield.  Для  нормального
экрана, оба регистра BPL1MOD и BPL2MOD должны быть одинаковы.

Следующий пример  устанавливает модуль 0 для экрана низкого разрешения
с одним битпланом. Этот битплан нечетный.

    MOVE.W #0,BPL1MOD+CUSTOM     ; Устанавливаем модуль = 0

ВЫБОРКА ДАННЫХ В ВЫСОКОМ РАЗРЕШЕНИИ

Когда Вы используете высокое разрешение,  Вам  необходимо  производить
выборку 80 байт для каждой линии, вместо 40.

МОДУЛЬ В РЕЖИМЕ ИНТЕРЛЕЙСА

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

Битплан на полный экран в интерлейсе такой-же ширины,  как и  обычный,
но  высотой  400 NTSC и 512 PAL линий.  Размещение данных для картинки
начинается так:
        Линия 1 НАЧАЛО
        Линия 2 НАЧАЛО+40
        Линия 3 НАЧАЛО+80
        Линия 4 НАЧАЛО+120

и т.д.  Следовательно,  необходимо использовать модуль 40 для пропуска
другого поля. Для нечетного поля, битплан начинается с байта НАЧАЛО, а
для четного - с байта НАЧАЛО+40

Вы можете использовать коппер для ручной переустановки указателей  для
интерлейсных экранов.

ИЗОБРАЖЕНИЕ ЭКРАНА
Включение изображения экрана осуществляется включением  экранного  DMA
при  установленных  указателях.  Включение DMA производится установкой
бита 1 (BPLEN) в регистре  DMACON.  Для  более  подробного  объяснения
установки этого регистра см. главу 7 'Управление чипсетом'

После показа  каждого  кадра  изображения,  Вы  должны  переустановить
указатели  на  битпланы.   Это   происходит   потому   что   указатели
увеличиваются  во  время  выборки  данных  и  все  время  указывают на
следующее выбираемое слово.  Для переустановки  указателей  Вы  можете
использовать  коппер,  или  выполнять эту операцию как часть экранного
прерывания (vertical blank)

ВКЛЮЧЕНИЕ ЦВЕТНОГО ВЫВОДА
A1000 имеет  составной  цветной  выход,  требующий  установки 9 бита в
BPLCON0  для  получения  цветного  сигнала.  Другие  модели  Амиги  не
используют этот сигнал и не могут его генерировать.

Включение этого  режима  не влияет на RGB выход,  который генерируется
правильно независимо от составного видео сигнала

РЕЗЮМЕ ПО СОЗДАНИЮ ПРОСТОГО ЭКРАНА
Для создания простого экрана необходимы следующие шаги:

1. Определение характеристик экрана
   a. Определение высоты в линиях:
      - Для NTSC:
        - 200 для неинтерлейсного режима.
        - 400 для интерлейсного.
      - Для PAL:
        - 256 для неинтерлейсного режима.
        - 512 для интерлейсного.
    b. Определение ширины в пикселях.
      - 320 для низкого разрешения.
      - 640 для высокого разрешения.
    c. Определение цвета для каждого пикселя.
      - Загрузка цветов в цветовые регистры.
      - Определение цвета каждого пикселя записью значений в  битпланы
так, чтобы двоичный код всех битпланов указывал на цветовой регистр.
      - Построение битпланов.
      - Установка регистров битпланов.
        - Биты 12-14 в BPLCON0 - число битпланов (BPU2 - BPU0).
        - BPLxPTH   -   указатели   на   начальные  позиции  битпланов
(записывается как длинное слово)
    d. Определение разрешения.
      - Низкое разрешение.
        - 320 пикселей в каждой горизонтальной линии
        - Очистить бит 15 в регистре BPLCON0 (HIRES).
      - Высокое разрешение.
        - 640 пикселей в каждой горизонтальной линии
        - Установить бит 15 в регистре BPLCON0 (HIRES).
    e. Выбрать интерлейс.
      - Интерлейс.
        - 400 вертикальных линий для NTSC, 512 для PAL.
        - Установить бит 2 в регистре BPLCON0 (LACE).
      - Без интерлейса.
        - 200 вертикальных линий для NTSC, 256 для PAL.
        - Очистить бит 2 в BPLCON0 (LACE).

2. Выделить память.  Для вычисления  необходимой  памяти,  используйте
следующую формулу:  число байт в линии * количество линий * количество
битпланов.

3. Определить размер окна изображения.
      - Записать начальную позицию окна в DIWSTRT:
        - Горизонтальная позиция в битах 0 - 7 (биты младшего слова).
        - Вертикальная позиция в битах 8 - 15 (биты старшего слова).
      - Записать конечную позицию окна в DIWSTOP:
        - Горизонтальная позиция в битах 0 - 7 (биты младшего слова).
        - Вертикальная позиция в битах 8 - 15 (биты старшего слова).


4. Определить выборку данных. Установить регистры DDFSTRT и DDFSTOP:
      - Для DDFSTRT,  использовать горизонтальную позицию как показано
в разделе 'Установка выборки данных'
      - Для DDFSTOP,  использовать горизонтальную позицию как показано
в разделе 'Установка выборки данных'

5. Определить   модуль.   Установить  регистры  BPL1MOD  and  BPL2MOD.
Установить модуль = 0 для неинтерлейсного и  =  40  для  интерлейсного
режима.

6. Написать программу коппера для переустановки указателей

7. Для  A1000  установить  вывод составного видео сигнала,  включением
бита 9 в BPLCON0


ПРИМЕР ФОРМИРОВАНИЯ ПРОСТОГО ЭКРАНА.

Следующий пример  показывает  как  устанавливать  регистры и создавать
копперлист для двух различных экранов.

Первый экран - 320х200 с  одним  битпланом,  размещенным  в  $21000  и
копперлистом в $20000

Этот пример использует константы из файла hw_examples.i в приложении J.

    LEA    CUSTOM,a0           ; a0 указатель на чипсет
    MOVE.W #$1200,BPLCON0(a0)  ; 1 битплан, включен цветной вывод
    MOVE.W #0,BPLCON1(a0)      ; Значение горизонтального скроллинга 0
    MOVE.W #0,BPL1MOD(a0)      ; Модуль 0 для всех нечетных  битпланов
    MOVE.W #$0038,DDFSTRT(a0)  ; Начало   выборки   $38
    MOVE.W #$00D0,DDFSTOP(a0)  ; Конец    выборки    $D0
    MOVE.W #$2C81,DIWSTRT(a0)  ; DIWSTRT    =    $2C81
    MOVE.W #$F4C1,DIWSTOP(a0)  ; DIWSTOP    =    $F4Cl
    MOVE.W #$0F00,COLOR00(a0)  ; Цвет   фона   -   красный
    MOVE.W #$0FF0,COLOR01(a0)  ; Регистр 1 - желтый
;
;Заполняем битплан $FF00FF00 для получения полос
;
    MOVE.L #$21000,a1               ; Указатель на начало битплана
    MOVE.L #$FF00FF00,d0            ; Пишем длинное слово $FF00FF00
    MOVE.W #2000,d1                 ; 2000 длинных слов = 8000 байт
;
LOOP:
    MOVE.L d0,(a1)+                 ; Записываем длинное слово
    DBRA   d1,LOOP                  ; Цикл
;
; Устанавливаем копперлист в $20000
;
    MOVE.L #$20000,a1               ; Указатель на копперлист
    LEA    COPPERL(pc).a2           ; a2 указывает на данные


CLOOP:
    MOVE.L (a2),(a1)+               ; перемещаем слово
    CMPI.L   #$FFFFFFFE,(a2)+       ; проверка на последнее слово в
;копперлисте
    BNE    CLOOP                    ; Цикл, пока не конец
;
; Указываем копперу на копперлист
;
    MOVE.L #$20000,COP1LCH(a0)      ;Записываем регистр адреса коппера
    MOVE.W COPJMP1(a0),d0           ; Стартуем коппер с $20000
;
; Включаем DMA
;
  MOVE.W #(DMAF_SETCLR!DMAF_COPPER!DMAF_RASTER!DMAF_MASTER),DMACON(a0)
                                  ; Включаем DMA битпланов и коппера
  BRA ....                        ; Делаем свою задачу
;
; Это данные для копперлиста.
;
COPPERL:
    DC.W BPL1PTH,$0002              ; $0002 в адрес $0E0 (BPL1PTH)
    DC.W BPL1PTL,$1000              ; $1000 в адрес $0E2 (BPL1PTL)
    DC.W $FFFF,$FFFE                ; Конец копперлиста
;

Второй пример  устанавливает интерлейсный экран в высоком разрешении с
одним битпланом.  Этот пример также есть в  файле  "hw_examples.i"  из
приложения J.

    LEA    CUSTOM,a0           ; Указатель на чипсет
    MOVE.W #$9204,BPLCON0(a0)  ; Выс. разрешение, интерлейс, 1 битплан
    MOVE.W #0,BPLCON1(a0)      ; Значение горизонтального скроллинга 0
    MOVE.W #80,BPL1MOD(a0)     ; Модуль = 80 для нечетных битпланов
    MOVE.W #80,BPL2MOD(a0)     ; Тоже  для   четных   битпланов
    MOVE.W #$003C,DDFSTRT(a0)  ; Установка  начала  выборки
    MOVE.W #$00D4,DDFSTOP(a0)  ; Установка   конца   выборки
    MOVE.W #$2C81,DIWSTRT(a0)  ; Установка  начала  окна  изображения
    MOVE.W #$F4C1,DIWSTOP(a0)  ; Установка конца окна изображения
;
; Установка цветовых регистров
;
    MOVE.W #$000F,COLOR00(a0)       ; Фон = синий
    MOVE.W #$0FFF,COLOR01(a0)       ; Цвет 1 = белый

;Установка битплана в $20000

    LEA    $20000,a1                ; a1 указатель на битплан
    LEA    CHARLIST(pc),a2          ; a2 указатель на табличку
    MOVE.W #400,d1                  ; Пишем 400 линий
    MOVE.W #20,d0                   ; 20 Длинных слов в линии
L1:
    MOVE.L (a2),(a1)+               ; Пишем длинное слово
    DBRA   d0,L1                    ; Цикл по длинным словам

    MOVE.W #20,d0                   ; Переустанавливаем счетчик слов
    ADDQ.L #4,a2                    ; Смещаемся по табличке
    CMPI.L #$FFFFFFFF,(a2)          ; Конец таблички?
    BNE    L2
    LEA    CHARLIST(pc),a2          ; Да, устанавливаем a2 на начало
L2:
    DBRA   d1,L1                    ; Цикл по строкам
;
; Включаем DMA
;

        MOVE.W #(DMAF_SETCLR!DMAF_RASTER!DMAF_MASTER),DMACON(a0)
                         ; Включаем только DMA битпланов, без коппера

Поскольку этот пример не имеет копперлиста, его задачи выполняет цикл,
ждущий   прихода   прерывания  vertical  blank.  Когда  оно  приходит,
проверяем LOF (бит длинного кадра в VPOSR) Если LOF=0 -  это  короткий
кадр, и указатель битплана ставится на $20040. Если LOF=1, это длинный
кадр,  и указатель ставится на $20000. Это отличает короткие и длинные
кадры.

VLOOP:
    MOVE.W INTREQR(a0),d0           ; Читаем запрос на прерывания
    AND.W  #$0020,d0                ; Маскируем все, кроме Vert Blank
    BEQ    VLOOP                    ; Ждем, пока придет vertical blank
    MOVE.W #$0020,INTREQ(a0)        ; Выключаем прерывание Vert Blank
    MOVE.W VPOSR(a0),d0             ; Читаем бит LOF в бит 15 рег. d0
    BPL    VL1                      ; Если LOF = 0, переходим
    MOVE.L #$20000,BPL1PTH(a0)      ; LOF = 1, указатель на $20000
    BRA    VLOOP                    ; Назад ждать
VL1:
    MOVE.L #$20040,BPL1PTH(a0)      ; LOF = 0, указатель на $20040
    BRA    VLOOP                    ; Назад ждать
;
; Табличка
;
CHARLIST:
    DC.L   $18FC3DF0,$3C6666D8,$3C66C0CC,$667CC0CC
    DC.L   $7E66C0CC,$C36666D8,$C3FC3DF0,$00000000
    DC.L   $FFFFFFFF

СОЗДАНИЕ ЭКРАНА В РЕЖИМЕ DUAL-PLAYFIELD
Для большей гибкости при создании экранов  Вы  можете  определить  два
плана  вместо  одного.  В режиме dual-playfield один план показывается
перед другим.  Например,  в игре может происходить действие  на  одном
плане,  а  в  это время другой план показывает управляющую панель.  Вы
также можете изменять передний или задний  план  без  переделки  всего
экрана.  Кроме  того,  каждый  план  может  перемещаться независимо от
другого.


Экран dual-playfield похож на простой экран,  но отличается некоторыми
моментами:

- Каждый план может состоять из одного, двух или трех битпланов.
- Цвета каждого плана (до семи плюс прозрачный) берутся  из  различных
цветовых регистров
- Для включения dual-playfirld надо включить один бит.

       Рисунок 3-12 показывает экран в режиме dual-playfield

На рис  3-12  один  из  цветов  в  каждом плане 'прозрачный' (цвет 0 в
первом плане и  цвет  8  во  втором  плане).  Вы  можете  использовать
прозрачность для того, чтобы видеть задний план через передний.

В режиме  dual-playfield  каждый план содержит до трех битпланов.  Для
первого плана используются цветовые регистры  0-7,  в  зависимости  от
количества  используемых  битпланов.  Для  второго  плана используются
регистры 8-15.

БИТПЛАНЫ В РЕЖИМЕ DUAL-PLAYFIELD
Три нечетных  битплана (1,3 и 5) группируются вместе и образуют первый
план.  Три четных битплана (2,4 и 6) группируются  вместе  и  образуют
второй план.  Битпланы могут назначаться в различных комбинациях,  как
показано на рис 3-13.

В высоком разрешении Вы можете использовать до двух битпланов в каждом
плане. Битпланы 1 и 3 для первого плана и битпланы 2 и 4 для второго.

          СМ РИС. 3-12: Экран в режиме dual-playfield

 Число 'включенных'
    битпланов              План  1*           План 2*

         0                   нет               нет
                          __________
         1               |1         |
                         |__________|
                          __________         __________
         2               |1         |       |2         |
                         |__________|       |__________|
                          __________         __________
         3               |1 ________|_      |2         |
                         |_|3         |     |__________|
                           |__________|
                          __________         __________
         4               |1 ________|_      |2 ________|_
                         |_|3         |     |_|4         |
                           |__________|       |__________|
                          __________         __________
         5               |1 ________|_      |2 ________|_
                         |_|3 ________|_    |_|4         |
                           |_|5         |     |__________|
                             |__________|
                          __________         __________
         6               |1 ________|_      |2 ________|_
                         |_|3 ________|_    |_|4 ________|_
                           |_|5         |     |_|6         |
                             |__________|       |__________|

     *ПРИМЕЧАНИЕ Каждый план может  помещен  перед  другим,  используя
'бит обмена'

    Рис. 3-13: Назначения битпланов для режима dual playfield.

ЦВЕТОВЫЕ РЕГИСТРЫ В РЕЖИМЕ DUAL-PLAYFIELD
При использовании dual-playfield,  чипсет интерпретирует номера цветов
для  первого  плана из битпланов 1,  3 и 5.  Биты из плана 5 формируют
старшую цифру номера регистра цвета,  а из  плана  1  -  младшую.  Эти
комбинации  выбирают  первые  восемь  регистров цвета,  как показано в
табл. 3-10

    Табл. 3-10: Цвета первого плана в низком разрешении

                ПЛАН 1

     Комбинация бит      Цвет

          000         Прозрачный
          001           COLOR1
          010           COLOR2
          011           COLOR3
          100           COLOR4
          101           COLORS
          110           COLOR6
          111           COLOR7

Чипсет интерпретирует  номера цветов для второго плана из битпланов 2,
4 и 6.  Биты из плана 6 формируют старшую цифру номера регистра цвета,
а  из  плана  2  -  младшую.  Эти комбинации выбирают следующие восемь
регистров цвета, как показано в табл. 3-11

    Табл. 3-11: Цвета второго плана в низком разрешении

                ПЛАН 2

     Комбинация бит      Цвет

          000         Прозрачный
          001           COLOR9
          010           COLOR10
          011           COLOR11
          100           COLOR12
          101           COLOR13
          110           COLOR14
          111           COLOR15

Комбинация 000  выбирает  прозрачный  цвет,  через  который могут быть
видимы: другой план, спрайт или фоновый цвет.

Табл. 3-12 показывает регистры цвета в режиме dual-playfield в высоком
разрешении.

    Табл. 3-12: Цвета планов в высоком разрешении

                ПЛАН 1

     Комбинация бит      Цвет

          000         Прозрачный
          001           COLOR1
          010           COLOR2
          011           COLOR3

                ПЛАН 2

     Комбинация бит      Цвет

          000         Прозрачный
          001           COLOR9
          010           COLOR10
          011           COLOR11

ПРИОРИТЕТЫ И УПРАВЛЕНИЕ В РЕЖИМЕ DUAL-PLAYFIELD
Любой план (1й или 2й) может иметь приоритет.  Если он есть,  то  этот
план изображается перед другим планом.  Обычно приоритет имеет план 1.
Бит PF2PRI (бит 6)  в  регистре  BPLCON2  используется  для  установки
приоритета.  Когда  PF2PRI  включен,  приоритет  имеет  план 2,  когда
выключен, план 1.

Вы можете  также  контролировать  относительный  приоритет  планов   и
спрайтов. Это описывается в главе 7, 'Управление чипсетом'

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

ЗАМЕЧАНИЕ
Вы должны  проявить  внимание,  в  случае,  если при одном неподвижном
плане,  другой скроллируется. Вы должны выбирать на одно слово больше,
чем  ширина  скроллируемого  плана  в  низком  разрешении ( на 2 слова
больше в высоком разрешении ) для  того,  чтобы  исключить  пропадание
краев изображения,  сдвинутого не на целое число слов.  Имеются только
один регистр начала выборки данных  и  конца  выборки  данных,  и  они
совместно  используются  обоими планами.  Если Вы хотите скроллировать
один план при  неподвижном  другом  плане,  Вы  должны  корректировать
начало  и конец выборки данных для того плана,  который скроллируется.
Затем,  Вы должны скорректировать модуль и  указатели  битпланов  того
плана,  который  не  скроллируется,  чтобы  сохранять  его  позицию на
экране.  В низком разрешении корректировка указателей -2 и модуля тоже
-2. в высоком разрешении корректировка указателей -4 и модуля тоже -4.

ВКЛЮЧЕНИЕ РЕЖИМА DUAL PLAYFIELD
Режим dual-playfield включается записью 1 в бит  10  (DBLPF)  регистра
BPLCON0.   При   этом   происходит  изменение  интерпретации  цветовых
регистров  и  группировка  битпланов  в  соответствиями  с   правилами
организации этого режима.


РЕЗЮМЕ ПО ИСПОЛЬЗОВАНИЮ РЕЖИМА DUAL PLAYFIELD
В целом,  шаги  по  определению  dual-playfield  такие-же,  как  и  по
определению простого экрана и отличаются следующими пунктами:

- Загрузкой цветов в регистры.  Запомните,  регистры 0-7  используются
планом  1,  а  регистры  8-15  -  планом  2  (если в каждом плане по 3
битплана)
- Строением битпланов.  План 1 состоит из битпланов 1,3 и 5,  а план 2
состоит из битпланов 2,4 и 6
- Установкой модуля.  Он задается раздельно для каждого плана (BPL1MOD
для первого плана (битпланы 1,3,5) BPL2MOD для второго плана (битпланы
2,4,6))

Эти шаги добавляются:

- Определение приоритета. Если Вы хотите, чтобы план 2 находился перед
планом 1, установите бит 6 (PF2PRI) в регистре BPLCON2.
- Активизация режима  dual-playfield.  Установите  бит  10  (DBLPF)  в
регистре BPLCON0


БИТПЛАНЫ И ОКНА ВСЕХ РАЗМЕРОВ
Вы узнали,  как сформировать простой и dual-playfield экраны,  которые
такие-же по размерам,  как и окно на экране.  Этот раздел покажет Вам,
как создавать и использовать экраны,  чьи битпланы  больше,  чем  окно
изображения.  Как  определять  окна  изображения  размером  больше или
меньше, чем нормальный размер экрана и как перемещать окно изображения
по большой картинке.

КОГДА КАРТИНКА БОЛЬШЕ, ЧЕМ ОКНО ИЗОБРАЖЕНИЯ
Если Вы создадите картинку больше,  чем окно  изображения,  Вы  должны
выбрать,  какая часть ее будет изображаться. Изображение части большой
картинки отличается от изображения простого экрана следующими шагами:

- Установка модуля. Модуль должен быть отличен от 0
- Резервирование  памяти.  БОльшие  битпланы требуют больше памяти для
размещения.


ОПРЕДЕЛЕНИЕ МОДУЛЯ
Для картинок шире окна изображения,  Вы должны определить модуль  так,
чтобы  обеспечить  корректную  выборку данных для каждой линии экрана.
Например,  окно изображения имеет ширину 320  пикселей  (40  байт),  а
картинка  в  два раза шире,  т.е.  640 пикселей (80 байт).  Необходимо
изобразить на экране левую половину картинки.  На рис.  3-14 показано,
как относятся друг к другу большая картинка и ее изображаемая часть.

        НАЧАЛО                                              НАЧАЛО+78
              -------------------------------------------------
              |            Широкий битплан в памяти           |
              |                       |                       |
              | Ширина окна, в        |                       |
              | котором будут         |                       |
              | появляться данные     |                       |
              | битплана              |                       |
              |                       |                       |
              -------------------------------------------------

Рис. 3-14: Память картинки, большей, чем окно изображения

Поскольку для каждой линии выбирается  40  байт,  выборка  данных  для
первой линии показана на рис. 3-15

Данные для линии 1:
Размещение:    НАЧАЛО     НАЧАЛО+2     НАЧАЛО+4   ....НАЧАЛО+38
              Самое      След. слово  След. слово       Последнее
            левое слово                             изображаемое слово
                                                           ^
Остановка выборки данных (DDFSTOP) для                     |
каждой горизонтальной линии после того,  <-----------------|
как выбрано последнее слово линии

Рис 3-15: Выборка данных для первой линии при модуле = 40


После того,  как  первая линия выбрана,  указатели битпланов BPLxPTH и
BPLxPTL содержат значение  НАЧАЛО+40.  Модуль  (в  данном  случае  40)
прибавляется  к  текущему значению указателей так,  чтобы они начинали
указывать на данные для следующей линии,  которые начинаются с  адреса
НАЧАЛО+80

Данные для линии 2:
Размещение:  НАЧАЛО+80    НАЧАЛО+82    НАЧАЛО+84  ....НАЧАЛО+118
              Самое      След. слово  След. слово       Последнее
            левое слово                             изображаемое слово

Рис 3-16: Выборка данных для второй линии при модуле = 40

Для изображения правой половины большой картинки,  необходимо изменить
процедуру  установки указателей битпланов так,  чтобы они указывали на
НАЧАЛО+40,  а не на НАЧАЛО.  Модуль  остается  40.  Размещение  данных
показано на рис. 3-17 и 3-18.

Данные для линии 1:
Размещение:  НАЧАЛО+40   НАЧАЛО+42    НАЧАЛО+44  ....НАЧАЛО+78
               Самое     След. слово  След. слово       Последнее
            левое слово                             изображаемое слово

Рис 3-17: Выборка данных для первой линии правой половины картинки

После того,  как первая линия выбрана,  указатели битпланов BPLxPTH  и
BPLxPTL  содержат  значение  НАЧАЛО+80.  Модуль  (в  данном случае 40)
прибавляется к текущему значению указателей так,  чтобы  они  начинали
указывать  на данные для следующей линии,  которые начинаются с адреса
НАЧАЛО+120

Данные для линии 2:
Размещение:  НАЧАЛО+120    НАЧАЛО+122    НАЧАЛО+124  ....НАЧАЛО+158
              Самое      След. слово  След. слово       Последнее
            левое слово                             изображаемое слово

  Рис 3-18: Выборка данных для второй линии правой половины картинки

Запомните, что  в  высоком  разрешении  Вы  должны выбирать в два раза
больше байт,  чем в низком разрешении. Для экрана нормальных размеров,
Вы выбираете 80 байт для каждой линии вместо 40.


ОПРЕДЕЛЕНИЕ ВЫБОРКИ ДАННЫХ
Регистры выборки   данных   задаются  также,  как  описано  в  разделе
'Формирование простого экрана'


ВЫДЕЛЕНИЕ ПАМЯТИ
Для бОльших картинок необходимо выделять больше  памяти.  Вот  формула
для общего расчета требований к памяти:

Число байт на линию * число линий * число битпланов

Так, если  широкий  экран,  описанный  в  этом разделе состоит из двух
битмапов, то он займет

80 * 200 * 2 = 32,000 байт памяти

ВЫБОР НАЧАЛА ОКНА ИЗОБРАЖЕНИЯ
Начало окна  изображения  это горизонтальная и вертикальная координата
верхнего левого угла окна изображения.  Обе эти координаты  (HSTART  и
VSTART)  содержатся  в  одном  регистре  DIWSTRT.  Восемь  бит  HSTART
позволяют задавать 256 позиций  расположения  окна,  начиная  с  самой
левой   возможной   позиции.   Итак,  Вы  можете  начинать  ваше  окно
изображения с любой позиции в этом интервале.

ПОЛНАЯ ОБЛАСТЬ ЭКРАНА

                 0                  255                 361
                ---------------------------------------------
                |                    |                      |
                |  HSTART окна изо-  |                      |
                | бражения может быть|                      |
                | в этом интервале   |                      |
                |                    |                      |
                ---------------------------------------------

          Рис. 3-19: Горизонтальная начальная позиция окна изображения.


Восемь бит VSTART позволяют задавать первые 256 позиций вниз от  верха
экрана.

ПОЛНАЯ ОБЛАСТЬ ЭКРАНА
                --------------------------------------------- 0
                |                                         ^ |
                |                                         | |
                |                  VSTART окна изображения| |
                |             может  быть в этом интервале| |
                |                                       __v_|___255
                |                             (NTSC)____________262
                |                                           |
                ---------------------------------------------

          Рис. 3-20: Вертикальная начальная позиция окна изображения

Выбор значений   для   начальных   позиций   производится   всегда   в
неинтерлейсном  режиме  и  низком  разрешении.  Имейте ввиду,  что для
интерлейсного режима окно изображения должно  быть  четное  количество
строк  в  высоту  для того,  чтобы четные и нечетные кадры были одного
размера

Для установки начала окна изображения запишите значение HSTART в  биты
0-7, а значение VSTART в биты 8-15 регистра DIWSTRT.


ВЫБОР КОНЕЧНОЙ ПОЗИЦИИ
Конец окна  изображения  это  горизонтальная и вертикальная координата
нижнего правого угла окна изображения.  Обе эти  координаты  (HSTOP  и
VSTOP) содержатся в одном регистре DIWSTOP.

Для подробностей по установке этих регистров см.  раздел 'Формирование
простого экрана'

ПОЛНАЯ ОБЛАСТЬ ЭКРАНА
                 0                  255                 361
                ------------------------------------------------
                |                      |                       |
                |                      |   HSTOP окна изображе-|
                |                      | ния находится в этом  |
                |                      |     интервале         |
                |                      |                       |
                ------------------------------------------------

Рис. 3-21: Горизонтальная конечная позиция окна изображения

Выбор значений   для   начальных   позиций   производится   всегда   в
неинтерлейсном режиме и низком разрешении.

ПОЛНАЯ ОБЛАСТЬ ЭКРАНА
                --------------------------------------------- 0
                |                                           |
                |          _________________________________|___128
                |     Vstop окна изобра-                    |
                |   жения находится в этом                  |
                |    интервале    |             (NTSC)______|___262
                |                 |                         |
                |                 |                         |
                ---------------------------------------------

Рис. 3-22: Вертикальная конечная позиция окна изображения

Для установки конца окна изображения запишите значение  HSTOP  в  биты
0-7, а значение VSTOP в биты 8-15 регистра DIWSTOP.

МАКСИМАЛЬНЫЙ РАЗМЕР ОКНА ИЗОБРАЖЕНИЯ
Максимальный размер изображения определяется максимальным числом строк
и   столбцов.   Вертикальные   ограничения  просты:  данные  не  могут
изображаться в период обратного  хода.  Следующая  таблица  показывает
доступную вертикальную область.

    Табл. 3-13: Максимально доступная вертикальная видео область

      Обратный ход       NTSC                    PAL
         Начало           0                       0
         Конец            $15 (21)                $1D (29)

                          NTSC      NTSC          PAL        PAL
                       Нормальн.  Интерлейс    Нормальн.  Интерлейсный
       Видимых линий      241       483           283        567
                          =262-21   =525-(21*2)   =312-29    =625-(29*2)

Горизонтально похожая  ситуация.  Строго  говоря,  железо  накладывает
ограничения  на  максимальный  DDFSTOP,  равный ($D8) и на минимальный
DDFSTRT,  равный ($18). Это дает максимум 25 слов для выборки в низком
разрешении  и  49  слов  в высоком разрешении,  потому что ограничение
DDFSTOP остается  $D8  и  только  одно  слово  успевает  выбраться  до
достижения    ограничения.   Обычно,   горизонтальный   обратный   ход
ограничивает область изображения до 368 пикселей (23 слова). Это число
одинаковое  для  PAL  и NTSC.  Вдобавок,  использование начала выборки
данных раньше, чем ($38) отключает некоторые спрайты.

    Табл. 3-13: Максимально доступная горизонтальная видео область

                                    Низкое         Высокое

      DDFSTRT (стандартный)         $0038          $003C
      DDFSTOP (стандартный)         $00D0          $00d4

      DDFSTRT (ограничение железа)  $0018          $0018
      DDFSTOP (ограничение железа)  $00D8          $00D8

      Выбирается слов (макс.)         25             49
      Изображается пикселей (макс.)  368 (low res)

ДВИЖЕНИЕ (СКРОЛЛИРОВАНИЕ) ЭКРАНОВ
Если Вы хотите перемещать задний план,  Вы можете создать его  больше,
чем   окно  изображения  и  скроллировать  его.  Если  Вы  используете
dual-playfield,  Вы можете скроллировать их отдельно. При вертикальном
скроллировании экран плавно перемещается вверх или вниз.  Все, что Вам
нужно для вертикального скроллинга,  это  постепенно  увеличивать  или
уменьшать    начальный    адрес   указателей   битпланов   на   размер
горизонтальной линии во время обратного хода луча.

При горизонтальном   скроллировании    экран    плавно    перемещается
справа-налево   или   слева-направо.   Горизонтальное   скроллирование
работает по-другому.  Вы должны выбирать на одно слово больше, а затем
определять   задержку   изображения   этого  дополнительного  слова  в
зависимости от попиксельного положения экрана в окне.

Для обоих типов скроллинга,  изменение регистров происходит  во  время
обратного хода луча

ВЕРТИКАЛЬНЫЙ СКРОЛЛИНГ
Вы можете скроллировать экран в окне вверх или вниз. Каждый раз, когда
Вы  устанавливаете  указатели,  их  надо  ставить  выше  или  ниже  по
картинке. Если значение указателей увеличивать, то будет казаться, что
картинка  перемещается  вверх.  Если указатели уменьшать,  то картинка
будет перемещаться вниз.  В режиме NTSC с экраном в 200 линий,  каждый
шаг  будет перемещать экран на 1/200 часть.  В режиме интерлейса,  при
умных  манипуляциях  с  указателями,  шаг   может   быть   1/400,   но
рекомендуется  скроллировать  с  шагом  2  линии,  чтобы  поддерживать
отношение четных и нечетных полей.  В режиме PAL шаг может быть  1/256
экрана или 1/512 в режиме интерлейса.


 
РИСУНОК 3-23: Вертикальный скроллинг Для вертикального скроллинга Вы должны сделать достаточно высокие для ваших целей битпланы, написать программу для расчета указателей и позволить копперу использовать получившиеся указатели. Для нормального скроллирования на одну линию простого экрана с модулем 0, Вы должны изменять указатели битпланов на 40 вверх или вниз. ГОРИЗОНТАЛЬНЫЙ СКРОЛЛИНГ Вы можете скроллировать экран горизонтально слева направо или справа налево. Скорость скроллирования определяется величиной задержки в пикселях. Задержка обозначает то, что лишнее слово данных выбирается, но не изображается немедленно. Дополнительное слово располагается слева левого края окна перед словами, выбираемыми в нормальном режиме. Когда экран сдвигается вправо, биты из дополнительного слова появляются в левой части окна, а биты в правой части экрана исчезают за границей окна. Для каждого пикселя задержки экран сдвигается на 1 пиксель вправо. Чем больше задержка, тем больше скорость скроллирования. Максимальное значение задержки - 15 пикселей. В режиме высокого разрешения скроллирование происходит по 2 пикселя. Рисунок 3-24 показывает, как задержка и дополнительное слово данных объединяются, вызывая эффект скроллинга. Для создания экрана с горизонтальным скроллингом, Вы должны: - Создать широкие битпланы - Установить регистры выборки данных для правильной выборки каждой горизонтальной линии вместе с дополнительным словом - Установить биты задержки - Установить модули для правильного изображения каждой горизонтальной линии - Написать копперлист для произведения изменений во время обратного хода луча. ОПРЕДЕЛЕНИЕ ВЫБОРКИ ДАННЫХ ПРИ ГОРИЗОНТАЛЬНОМ СКРОЛЛИНГЕ Нормальное начало выборки данных для нескроллирующихся экранов ($38). Если желателен горизонтальный скроллинг, выборка должна начинаться на одно слово раньше (DDFSTRT=$30). Случайно, это отключает спрайт 7. DDFSTOP остается неизменным. Установка регистров выборки затрагивает оба плана. ОПРЕДЕЛЕНИЕ МОДУЛЯ ПРИ ГОРИЗОНТАЛЬНОМ СКРОЛЛИНГЕ Как всегда, модуль на два байта меньше, чем различие между адресом следующего выбираемого слова и последним выбранным словом. Как пример горизонтального скроллинга разберем 40 байтный экран и 80 байтную большую картинку. Поскольку горизонтальный скроллинг требует дополнительного слова, данные для каждой линии будут длиной 42 байта. СМ. РИСУНОК 3-24 Горизонтальный скроллинг НАЧАЛО НАЧАЛО+38 НАЧАЛО+78 ______________________________________________ | | | | Ширина | | | показываемой | | | части картинки | | | | | | | | | | | | <--------- Ширина картинки в памяти -------> | |______________________|_______________________| Рис. 3-25: Картинка в памяти больше, чем окно изображения Данные для линии 1: Размещение: НАЧАЛО НАЧАЛО+2 НАЧАЛО+4 ....НАЧАЛО+40 Самое След. слово След. слово Последнее левое слово изображаемое слово Рис 3-26: Выборка данных для первой линии при горизонтальном скроллинге В этой точке указатели битпланов содержат значение НАЧАЛО+42. Добавление модуля 38 дает правильное начало для следующей линии Данные для линии 2: Размещение: НАЧАЛО+80 НАЧАЛО+82 НАЧАЛО+84 ....НАЧАЛО+120 Самое След. слово След. слово Последнее левое слово изображаемое слово Рис 3-27: Выборка данных для второй линии при горизонтальном скроллинге Модуль устанавливается в регистрах BPLxMOD для каждого используемого битплана. ОПРЕДЕЛЕНИЕ ВЕЛИЧИНЫ ЗАДЕРЖКИ Величина задержки при горизонтальном скроллировании контролируется битами 0-7 в регистре BPLCON1. Задержка устанавливается раздельно: биты 3-0 для первого плана (битпланы 1,3 и 5), а биты 7-4 для второго плана (битпланы 2,4 и 6) ЗАМЕЧАНИЕ Всегда устанавливайте все 8 бит, даже, если Вы используете только один план. В таком случае установите в биты 0-3 и 4-7 одинаковые значения Следующий пример устанавливает задержку скроллирования 7 для обоих планов MOVE.W #$77,BPLCON1+CUSTOM РЕЗЮМЕ ПО СКРОЛЛИРОВАНИЮ ЭКРАНОВ Шаги по созданию скроллирующегося экрана такие же, как для простого экрана, кроме описанных ниже: - Определение выборки данных. Выбирайте на 1 слово больше и начинайте выборку на 16 пикселей раньше. - Определение модуля. Модуль на два байта меньше, чем при отсутствии скроллинга. Эти шаги добавляются: - Для вертикального скроллинга - переустанавливайте указатели битпланов во время обратного хода луча на столько линий, на сколько Вы желаете скроллировать - Для горизонтального скроллинга определяйте задержку. Устанавливайте биты 0-7 в регистре BPLCON1 для задания задержки ДОПОЛНИТЕЛЬНЫЕ ТЕМЫ Этот раздел описывает возможности, которые используются реже, чем обычно. ВЗАИМОДЕЙСТВИЯ МЕЖДУ ПЛАНАМИ И ДРУГИМИ ОБЪЕКТАМИ Планы делят экран со спрайтами. Глава 7 'Управление чипсетом' показывает как придавать планам и спрайтам различные приоритеты и как планы могут сталкиваться со спрайтами и сами с собой. РЕЖИМ HAM Это специальный режим, в котором доступно одновременно 4096 цветов. Обычно, битовая комбинация пикселя указывает на номер цветового регистра, содержимое которого и показывается на экране. В режиме HAM значение пикселя сохраняется и одна из трех компонент (красная, зеленая или синяя) изменяется на указанную в определенных битпланах. После модификации пиксель записывается на экран. Режим HAM позволяет использовать гладкое изменение цветов и тени. Например, Вы можете нарисовать 16 ваз, используя по 16 цветов для каждой. Затем,с помощью HAM, для каждой вазы можно сделать тени и блики или расширить цветовую гамму. Но, поскольку HAM позволяет менять лишь одну компоненту за раз, этот режим имеет ограниченное применение. Для режима HAM используются все 6 битпланов. Планы 5 и 6 используются для указания, что модифицируют планы 1-4: Комбинации бит 6 и 5 плана указаны так: план 6 план 5 0 0 0 1 1 0 1 1 - Комбинация 00 включает режим выбора цвета , заданного планами 1-4 из цветовых регистров 00-15. - Комбинация 01 замещает синий цвет в пикселе, стоящем слева от текущего на значение, содержащееся в планах 1-4 и устанавливает текущий пиксель. - Комбинация 10 замещает красный цвет в пикселе, стоящем слева от текущего на значение, содержащееся в планах 1-4 и устанавливает текущий пиксель. - Комбинация 11 замещает зеленый цвет в пикселе, стоящем слева от текущего на значение, содержащееся в планах 1-4 и устанавливает текущий пиксель. Используя HAM возможно определение только одного цвета - фонового (COLOR00). Весь остальной экран можно получить изменением этого цвета, как показано выше. Бит 11 регистра BPLCON0 включает режим HAM. Кроме этого, следующие биты должны быть установлены так, как показано ниже для активизации режима HAM: - Бит 11 (HOMOD) =1 - Бит 10 (DBLPF) =0 (одиночный план) - Бит 15 (HIRES) =0 (низкое разрешение) - Биты 12,13 и 14 (BPU0, BPU1 и BPU2) = 101 или 011 (5 или 6 битпланов) Следующий пример создает 6ти битплановый HAM экран. Все 32 регистра цвета содержат черный и цвета генерируются средствами HAM. ; Сначала установим регистры ; LEA CUSTOM,a0 ; Указатель на чипсет MOVE.W #$6A00,BPLCON0(a0) ; 6 битпланов, HAM MOVE.W #0,BPLCON1(a0) ; Горизонтальный скроллинг =0 MOVE.W #0,BPL1MOD(a0) ; Модули = 0 MOVE.W #0,BPL2MOD(a0) ; MOVE.W #$0038,DDFSTRT(a0) ; Начало выборки данных MOVE.W #$00D0,DDFSTOP(a0) ; Конец выборки данных MOVE.W #$2C81,DIWSTRT(a0) ; Начало окна изображения MOVE.W #$F4C1,DIWSTOP(a0) ; конец окна изображения ; ;Устанавливаем все цвета в черный цвет ; MOVE.W #32,d0 ; Счетчик LEA CUSTOM+COLOR00,a1 ; Указатель на первый регистр цвета CREGLOOP: MOVE.W #$0000,(a1)+ ; Записываем черный цвет DBRA d0,CREGLOOP ; Цикл ; ; Закрашиваем битпланы простым рисунком ; ; Примечание: Это только пример. Необходимо выделить память для битпланов MOVE.W #2000,d0 ; 2000 длинных слов в битплане MOVE.L #$21000,a1 ; Указатель на 1 битплан MOVE.L #$23000,a2 ; --//--//-- 2 --//-- MOVE.L #$25000,a3 ; --//--//-- 3 --//-- MOVE.L #$27000,a4 ; --//--//-- 4 --//-- MOVE.L #$29000,a5 ; --//--//-- 5 --//-- MOVE.L #$2B000,a6 ; --//--//-- 6 --//-- FPLLOOP: MOVE.L #$55555555,(a1)+ ; Закрашиваем план 1 - $55555555 MOVE.L #$33333333,(a2)+ ; --//--//--//-- 2 - $33333333 MOVE.L #$0F0F0F0F,(a3)+ ; 3 - $0F0F0F0F MOVE.L #$00FF00FF,(a4)+ ; 4 - $00FF00FF MOVE.L #$CF3CF3CF,(a5)+ ; 5 - $CF3CF3CF MOVE.L #$3CF3CF3C,(a6)+ ; 6 - $3CF3CF3C DBRA d0,FPLLOOP ; Цикл ; ; Копперлист по адресу $20000. ; MOVE.L #$20000,a1 ; Указатель на копперлист LEA COPPERL(pc),a2 ; Указатель на данные для копперлиста CLOOP: MOVE.L (a2),(a1)+ ; перемещаем длинное слово CMPI.L #$FFFFFFFE,(a2)+ ; Конец ? BNE CLOOP ; Цикл, пока не конец ; ;Указываем копперу на копперлист ; MOVE.L #$20000,COP1LCH(a0) ; Указатель на копперлист MOVE.W COPJMP1(a0),d0 ; Стартуем коппер ; ; Включаем DMA ; MOVE.W #$8380,DMACON(a0) ; Включаем DMA битпланов и коппера BRA ....продолжение программы ; ; Копперрлист для 6 битпланов. Первый по адресу $21000; 2 в $23000; ; 3 в $25000; 4 в $27000; 5 в $29000; 6 в $2B000. ; COPPERL: DC.W BPL1PTH,$0002 ; Указатель 1-го битплана = $21000 DC.W BPL1PTL,$1000 DC.W BPL2PTH,$0002 ; Второго = $23000 DC.W BPL2PTL,$3000 DC.W BPL3PTH,$0002 ; Третьего = $25000 DC.W BPL3PTL,$5000 DC.W BPL4PTH,$0002 ; 4го = $27000 DC.W BPL4PTL,$7000 DC.W BPL5PTH,$0002 ; 5го = $29000 DC.W BPL5PTL,$9000 DC.W BPL6PTH,$0002 ; 6го = $2B000 DC.W BPL6PTL,$B000 DC.W $FFFF,$FFFE ; Ждем невозможного, т.е. выход СОЗДАНИЕ ИЗОБРАЖЕНИЯ ИЗ НЕСКОЛЬКИХ ЭКРАНОВ Graphics library предоставляет возможность объединения нескольких экранов с различными "ViewPorts", каждый из которых имеет свои цвета и свое разрешение. Для подробностей см. Amiga ROM Kernel Manual ИСПОЛЬЗОВАНИЕ ВНЕШНЕГО ИСТОЧНИКА ВИДЕО СИГНАЛА Для Амиги существуют карточки, называемые "Генлок". Они позволяют объединять изображение экрана с внешним источником видео сигнала таким как VCR, камера или проигрыватель лазерных дисков. Когда Вы используете генлок цвет фона заменяется на внешнее видео изображение. Для более подробной информации см. руководство к генлоку. РЕГИСТРЫ ЭКРАНА Этот раздел содержит описание всех регистров, использованных в этой главе и значения всех бит этих регистров. Регистры цвета описаны в следующем разделе. Все регистры описаны в приложении А BPLCON0 - Bit Plane Control NOTE Биты этого регистра не могут быть установлены независимо бит 0 - не используется бит 1 - ERSY (включение внешней синхронизации) 1 = включено (происходит синхронизация с генлоком) 0 = выключено бит 2 - LACE (включение интерлейса) 1 = включено 0 = выключено бит 3 - LPEN (включение светового пера) биты 4-7 не используются (должны быть 0) бит 8 - GAUD (звук генлока) 1 = включен 0 = выключен бит 9 - COLOR ON (включение составного цветного видео вывода) 1 = включен 0 = выключен бит 10 - DBLPF (включение dual-playfield) 1 = включен 0 = выключен бит 11 - HOMOD (включение HAM) 1 = включен 0 = выключен биты 14, 13,12 - BPU2, BPU1, BPU0 - Количество используемых битпланов. 000 только фоновый цвет 001 1 План 1 010 2 Планы 1 и 2 011 3 Планы 1 - 3 100 4 Планы 1 - 4 101 5 Планы 1 - 5 110 6 Планы 1 - 6 111 7 Значение не используется. бит 15 - HIRES (включение высокого разрешения) 1 = высокое разрешение 0 = низкое разрешение BPLCON1 - bit-plane Control биты 3-0 - PF1H(3-0) Задержка для плана 1 биты 7-4 - PF2H(3-0) Задержка для плана 2 биты 15-8 не используются BPLCON2 - bit-plane Control бит 6 - PF2PRI 1 = Приоритет у плана 2 0 = Приоритет у плана 1 биты 0-5 Приоритеты планов и спрайтов биты 7-15 не используются DDFSTRT - Data-fetch Start (Начало выборки данных) биты 15-8 - не используются биты 7-2 - позиция H8-H3, H3 относится к высокому разрешению биты 1-0 - не используются DDFSTOP - Data-fetch Stop (конец выборки данных) биты 15-8 - не используются биты 7-2 - позиция H8-H3, H3 относится к высокому разрешению биты 1-0 - не используются BPLxPTH - бит-plane Pointer (Старшее слово указателя битплана, х - номер битплана) BPLxPTL - бит-plane Pointer (Младшее слово указателя битплана, х - номер битплана) DIWSTRT - Display Window Start (Начальные координаты окна изображения) биты 15-8 - VSTART (V7-V0) биты 7-0 - HSTART (H7-H0) DIWSTOP - Display Window Stop (Конечные координаты окна изображения) биты 15-8 - VSTOP (V7-V0) биты 7-0 - HSTOP (H7-H0) BPL1MOD - бит-plane Modulo (Модуль для нечетных планов, план 1) BPL2MOD - бит-plane Modulo (Модуль для четных планов, план 2) РЕГИСТРЫ ЦВЕТА Этот раздел содержит обобщение работы с цветовыми регистрами включая содержимое регистров цвета, примеры цветов и различия выбора цветов в различных режимах. СОДЕРЖИМОЕ РЕГИСТРОВ ЦВЕТА Табл. 3-15 показывает содержимое регистров цвета. Все регистры цвета только для записи. Табл. 3-15: Содержимое цветовых регистров биты содержимое 15-12 (Не используются = 0) 11- 8 Красный 7- 4 Зеленый 3- 0 Синий ПРИМЕРЫ УСТАНОВКИ РЕГИСТРОВ ЦВЕТА Табл. 3-16 показывает различные возможные цвета и их шестнадцатиричные значения. Табл. 3-16 Значения регистров и соответствующие цвета Значение Цвет Значение Цвет $FFF Белый $1FB Светлая вода $D00 Кирпичный $6FE Небесно-голубой $F00 Красный $6CE Светло-синий $F80 Красно-оранжевый $00F Синий $F90 Оранжевый $61F Ярко-синий $FB0 Золотой $06D Темно-синий $FD0 Темно-желтый $91F Пурпурный $FF0 Лимонно-желтый $ClF Фиалковый $BF0 Лимонно-green $FlF Сиреневый $8E0 Светло-зеленый $FAC Розовый $0F0 Зеленый $DB9 Рыжевато-коричневый $2C0 Темно-зеленый $C80 Коричневый $0B1 Зелень растений $A87 Темно-коричневый $0BB Сине-зеленый $CCC Светло-серый $0DB Цвет воды $999 Серый $000 Черный ВЫБОР ЦВЕТОВ В НИЗКОМ РАЗРЕШЕНИИ Табл. 3-17 показывает как назначаются цвета в низком разрешении. Если комбинация бит в экране соответствует указанной в таблице, изображается цвет из указанного регистра. Табл. 3-17 Выбор цветов в низком разрешении Простой экран Dual Playfields Нормальный режим Режим HAM Номер (Битпланы 5,4,3,2,1) (битпланы 4,3,2,1) Цветового Регистра План 1 битпланы 5,3,1 00000 0000 000 0 * 00001 0001 001 1 00010 0010 010 2 00011 0011 011 3 00100 0100 100 4 00101 0101 101 5 00110 0100 110 6 00111 0111 111 7 План 2 битпланы 6,4,2 01000 1000 000 ** 8 01001 1001 001 9 01010 1010 010 10 01011 1011 011 11 01100 1100 100 12 01101 1101 101 13 01110 1110 110 14 01111 1111 111 15 10000 | | 16 10001 | | 17 10010 | | 18 10011 | | 19 10100 НЕ НЕ 20 10101 ИСПОЛЬЗУЮТСЯ ИСПОЛЬЗУЮТСЯ 21 10110 В В 22 10111 ЭТОМ ЭТОМ 23 11000 РЕЖИМЕ РЕЖИМЕ 24 11001 | | 25 11010 | | 26 11011 | | 27 11100 | | 28 11101 | | 29 11110 | | 30 11111 | | 31 * Регистр 0 всегда определяет цвет фона. ** Вместо регистра 8 используется режим прозрачности. ВЫБОР ЦВЕТОВ В РЕЖИМЕ HAM. В режиме HAM цветовые регистры работают так, как показано в табл. 3-18. Табл. 3-18: Выбор цветов в режиме HAM. битплан 6 битплан 5 Результат 0 0 Нормальная операция (используется регистр цвета) 0 1 Задержать G и R B = Содержимое битпланов 1-4 1 0 Задержать G и B R = Содержимое битпланов 1-4 1 1 Задержать B и R G = Содержимое битпланов 1-4 ВЫБОР ЦВЕТОВ В ВЫСОКОМ РАЗРЕШЕНИИ Табл. 3-17 показывает как назначаются цвета в высоком разрешении. Если комбинация бит в экране соответствует указанной в таблице, изображается цвет из указанного регистра. Табл. 3-19 Выбор цветов в высоком разрешении Простой Dual Номер Экран Playfields Цветового битпланы 4,3,2,1 Регистра План 1 битпланы 3,1 0000 00 * 0 ** 0001 01 1 0010 10 2 0011 11 3 0100 | 4 0101 НЕ ИСПОЛЬЗ. 5 0110 В ЭТОМ РЕЖИМЕ 6 0111 | 7 План 2 битпланы 4.2 1000 00 * 8 1001 01 9 1010 10 10 1011 11 11 1100 | 12 1101 НЕ ИСПОЛЬЗ. 13 1110 В ЭТОМ РЕЖИМЕ 14 1111 | 15 * Вместо регистра 8 используется режим прозрачности. ** Регистр 0 всегда определяет цвет фона. End.

 


НОМЕ