                                  <B>Aga Chipset</B>
                                     <B>Part 1</B>
                                (c) Zetter 2000
                                2:5025/2000.110

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

Итак,  полнстью  разобравшись  с  программированием  OSC  и ECS чипсетов, в этом
номере  мы  начнем  потихньку осваивать AGA.  На самом деле программирование AGA
ничуть не отличается от программирования старых чипсетов, стоит только учитывать
и знать новые особенности и возмжности чипсета.  Поэтому, если вы пропустили или
недостаточно  подробно разобрались с программированием OSC и ECS, я настоятельно
рекомендую сделать это до начала чтения этой и последующих статей, поскольку они
будут строиться на отличительных особенностях AGA.

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

А  теперь, перед тем, как начать, разрешите мне поздравить всех вас с Новым 2001
Годом  и  пожелать  в  первую  очередь  счастья  вам  в личной жизни, здоровья и
исполнения всех сокровенных желаний!

                                 <B>С НОВЫМ ГОДОМ!</B>

                                   <U>СОДЕРЖАНИЕ</U>

объяснение новых возможностей AGA
список новых экранных режимов AGA с примечаниями
формат HAM8
распознавание AGA (пример)
адаптация копперлиста к ECS
работа с:
 битпланами
  скроллинг битпланов по 35ns
 цветовыми регистрами
 коппером (пример)
 спрайтами:
  задание (пример)
  перемещение 35 ns
  изменение цветов
 superhires
 переключение цветов
VGA
 hardware setup (пример)
 copper list (пример)
использование функции allocбитmap

                         <U>ОБЪЯСНЕНИЕ НОВЫХ ОСОБЕННОСТЕЙ</U>

                                    <U>Битпланы</U>

Теперь в вашем распоряжении есть 8 битпланов вместо 6. В  режимах  с  одиночным
плейфилдом  доступны  256  цветов вместо 64. Все 8 битпланов доступны во всех 3
разрешающих способностях.

Каждый плейфилд в режиме dual-playfield может теперь иметь до 4 битпланов.  Для
каждого  плейфилда  независимо  выбирается 16-ти цветный банк из 256-ти цветной
таблицы цветов.

Точно также, во всех 3 разрешениях доступен dual-playfield режим 4+4  битплана,
но  только при выключенном дублировании строк. В противном случае оба плейфилда
совместно используют один и тот же регистр модуля. Биты 15 - 8 регистра BPLCON4
содержат 8 битовых масок, позволяющих обменивать выводимые цвета одной командой
не нарушая содержимого цветовых регистров.

Два дополнительных старших бита позволяют производить бесшовное  скроллирование
шириной  до  64  бит  во  всех  разрешениях.  Шаг скроллирования битплана, окна
изображения и горизонтальной позиции спрайта достиг 35ns во всех разрешениях.

Регистр BPLCON1 содержит 8-ми битовое значение задержки для каждого плейфилда с
шагом   скроллирования   35   nSec.  (1  SHRES  пиксель),  может  производиться
скроллирование в 32 битном режиме. Биты BPAGEM и BPL32 в новом  регистре  FMODE
управляют размером выборки данных битплана в BPL1DAT - BPL8DAT.

Старый  6  битплановый  режим  HAM,  работает  в  разрешениях  HIRES  и   SHRES
разрешающие.

Биты BP1-BP4 содержат значение, функция которого определяется содержимем бит
BP5 и BP6.


|BP6|BP5|     RED     |    GREEN    |     BLUE    |
|-------------------------------------------------|
| 0 | 0 | выбор нового базового регистра (1 из 16)|
|-------------------------------------------------|
| 0 | 1 |  задержать  |  задержать  |  изменить   |
|-------------------------------------------------|
| 1 | 0 |  изменить   |  задержать  |  задержать  |
|-------------------------------------------------|
| 1 | 1 |  задержать  |  изменить   |  задержать  |
---------------------------------------------------

Введен новый режим HAM. Теперь  он  использует  все  8  битпланов.  Этот  режим
вызывается  когда поле BPU регистра BPLCON0 содержит 8, и установлен бит HAMEN.
Битпланы 1 и 2 используются как управляющие биты аналогично битпланом 5 и  6  в
6-ти битплановом режиме HAM.


|BP2|BP1|     RED     |    GREEN    |   BLUE      |
|-------------------------------------------------|
| 0 | 1 | выбор нового базового регистра (1 из 64)|
|-------------------------------------------------|
| 0 | 1 |  задержать  |  задержать  |  изменить   |
|-------------------------------------------------|
| 1 | 0 |  изменить   |  задержать  |  задержать  |
|-------------------------------------------------|
| 1 | 1 |  задержать  |  изменить   |  задержать  |
---------------------------------------------------

Так как только 6 битпланов доступны для изменения данных, данные размещаются  в
6  MSB.  2  LSB оставлены немодифицированными, что позволяет что получение всех
16,777,216  цветов  одновременно,  используя   достаточно   большой   экран   и
рассудительный выбор базовых регистров. Этот режим HAM работает также в режимах
HIRES и SHRES.

С  целью  совместимости  режим  EHB  остался  неизмененным.  Его  существование
спорное,  поскольку  мы  имеем более чем достаточно цветов, чтобы заменить этот
режим по функциональности. Как и прежде, EHB вызывается когда SHRES =  HIRES  =
HAMEN  =  DPF  =  0  И  BPU  = 6. Обратите внимание, что начиная с ECS DENISE в
регистре BPLCON2 имеется бит KILLEHB, который отключает этот режим.

Биты PF2OF2,1,0 в  регистре  BPLCON3  определяют  смещение  цветовых  регистров
второго  плейфилда  в  цветовой таблице. Это необходимо, поскольку в режиме DPF
каждый плейфилд может иметь до 4 битпланов.

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

Бит BSCAN2 в регистре FMODE включает дублирование строк битпланов. Когда бит V0
регистра  DIWSTRT  соответствует  биту V0 вертикального счетчика лучей, BPL1MOD
содержит  модуль  для  строки  изображения,  иначе  используется  BPL2MOD.  При
включенном  дублировании строк нечетные и четные битпланы используют один и тот
же модуль на данной строке,  в  то  время  как  в  нормальном  режиме  нечетные
битпланы используют BPL1MOD, а четные битпланы используют BPL2MOD. В результате
DPF экраны будут отображаться неправильно при включенном удвоении линий.

                                    <U>Спрайты</U>

Расширенная поддержка спрайтов - их разрешение может  быть  lores,  hires,  или
super-hires,  независимо  от  разрешения  экрана.  Объединенные  спрайты теперь
доступны в всех режимах. Однако, некоторые новые режимы с более высокой шириной
полосы  частот  могут  только  оставлять один спрайт. Нечетные и четные спрайты
могут использовать независимые 16 цветные банки цветов из таблицы  256  цветов.
Спрайты  старого  формата  имели  ширину 16 бит, а спрайты нового формата могут
иметь ширину 32 или 64 бит. Спрайты могут опционально  появляться  в  бордюрной
области. Горизонтальное разрешение при позиционировании спрайтов увеличилась до
35ns (эквивалентно ширине super-hires пикселя.)

Биты SPAGEM и SPR32 в регистре FMODE задают размер  загрузки  регистров  данных
спрайтов  от  SPR0DATA  (B)  до  SPR7DATA (B). Возможные значения 16,32, или 64
бита,  аналогично  битпланам.  BPLCON3  содержит  несколько  бит,   управляющих
поведением   спрайтов.  SPRES1  и  SPRES0  управляют  разрешающей  способностью
спрайта, соответствуют ли они стандарту ECS или непосредственно устатавливается
LORES,  HIRES,  или  SHRES.  BRDRSPRT,  когда  включен, позволяет спрайтам быть
видимыми на бордюре. ESPRM7 - ESPRM4 содержан номер банка для четных  спрайтов,
а  OSPRM7  -  OSPRM4  для нечетных. В случае объединенных спрайтов используются
биты OSPRM.

Бит SSCAN2 в регистре FMODE включает дублирование строк спрайтов. Во включенном
состоянии,   отдельные   биты  SH10  в  регистрах  SPRxPOS  содержат  значение,
показывающее должны ли строки данного спрайта быть продублированными. Когда бит
V0  регистра  SPRxPOS  соответствует  биту V0 вертикального счетчика лучей, DMA
спрайта работает как и раньше, а  если  не  соответствует,  тогда  DMA  спрайта
отключается  и LISA многократно использует данные спрайта из предыдущей строки.
Когда строки спрайта продублированы, программисту  необходимо  изменить  только
координаты и управляюшие регистры, регистры данных не нуждаются в модификации.

ПРИМЕЧАНИЕ:

Начало и конец спрайта по вертикали должны иметь одну и ту  же  четность  -  то
есть оба нечетный или оба четные.

                                 <U>Совместимость</U>

ECS совместимость - Новые чипы при включении питания запускаются в режиме  ECS,
что позволяет старым самозагружающимся программам выполняться на новых машинах.
Это выполнено с помощью $dff1fc FMODE: $0003 = 64-х битная AGA выборка, $0000 =
ECS совместимая выборка (16 бит). При использовании 4х или 8ми битовых значений
R/G/B, масштабируйте ваши значения до 32 бит дублируя 8ми  битовые  значения  в
всех  4  байтах  32  битового  числа.  При масштабировании 4х битовых значений,
дублируйте эти 4 бита в всех полубайтах. Например: 8ми битное значение красного
$1F  становится  равным  $1F1F1F1F,  а 4х битовое значение $3 становится равным
$33333333;

Добавился вход RST, который сбрасывает все биты новых  регистров  для  ECS  или
LISA: BPLCON3, BPLCON4, CLXCON2, DIWHIGH, FMODE.

Бит ECSENA (прежде ENBPLCN3) используется для отключения некоторых бит регистра
BPLCON3,  которые  требуют  исходного  состояния  для сохранения совместимости.
ECSENA выключает следующие  биты:  BRDRBLNK,  BRDNTRAN,  ZDCLKEN,  EXTBLKEN,  и
BRDRSPRT.

CLXCON2 сбрасывается при записи в  CLXCON,  поэтому  старые  игровые  программы
будут правильно обрабатывать столкновения объектов.

DIWHIGH сбрасывается при записи в DIWSTRT или DIWSTOP. Эта взаимная  блокировка
унаследована из ECS Denise.

                                     <U>Генлок</U>

Большое количество новых возможностей добавились к  ECS  DENISE  и  остались  в
LISA.   ZDBPEN   в   BPLCON2   любому   битплану,   выбранному  в  ZDBPSEL2,1,0
использоваться в качестве маски прозрачности (содержание  веводов  ZD  отражает
выбранный  битплан).  ZDCTEN  отключает  старый  режим  прозрачности цвет00, и
позволяет что  использовать  бит31  каждого  цвета  в  палитре  для  управления
прозрачностью.  ZDCLKEN  генерирует сигнал частотой 14MHz, синхронизированный с
видеоданными который может использоваться видео  постпроцессорами.  И  наконец,
BRDNTRAN  в  BPLCON3  генерирует  непрозрачную бордюрную область, которая может
использоваться как рамка для живого видео.

                                    <U>Палитра</U>

Цветовые регистры выросли от 32-х 13-ти битных регистров до 256-ти 25-ти битных
(8  бит КРАСНЫЙ, 8 - ЗЕЛЕНЫЙ, 8 - СИНИЙ, плюс 1 бит для Генлока). Это позволяет
изображать до 256 отдельных цветов в всех  разрешениях.  Палитра  в  16,777,216
цветов  доступна  в  всех  разрешениях. К регистру BLPCON3 добавились несколько
новых битов для обеспечения загрузки цветовых регистров. Бит LOCT выбирает  MSB
или  LSB  (Старшую  или младшую половинку регистра). Для совместимости загрузка
MSB всегда загружает LSB, т.е.  для  загрузки  24  битового  цвета  LSB  должен
загружаться  после  MSB.  BANK2,1,0  выбирает один из 8 банков адресов цветовых
регистров (по 32 регистра) следующим образом:

 BANK2 | BANK1 | BANK0 |   ИНТЕРВАЛ ЦВЕТОВ
--------------------------------------------
   0   |   0   |   0   |  цвет00 - цвет1F
   0   |   0   |   1   |  цвет20 - цвет3F
   0   |   1   |   0   |  цвет40 - цвет5F
   0   |   1   |   1   |  цвет60 - цвет7F
   1   |   0   |   0   |  цвет80 - цвет9F
   1   |   0   |   1   |  цветA0 - цветBF
   1   |   1   |   0   |  цветC0 - цветDF
   1   |   1   |   1   |  цветE0 - цветFF

Бит RDRAM бит в регистре BPLCON2 заставляет LISA интерпретировать все обращения
к цветовым регистрам как чтение.

Важное замечание относительно ЧИСЛА ЦВЕТОВ:  Старый  IFF  код  (и  даже  ранние
версии  NewIFF)  не  будет  загружать более 32 цветовых регистров. Новые версии
были модифицированы. Теперь верхняя граница  количества  цветов  базируется  на
цветMap->Count  в  ViewPort  .  Удалите  старые  ограничения  на 32 регистра и
установите новое ограничение на цветMap->Count.

                                  <U>Столкновения</U>

Новый регистр CLXCON2 содержит 4 новых бита. ENBP7 и ENBP8  -  биты  разрешения
определения столкновений для битпланов 7 и 8, соответственно. Аналогично, MVBP7
и MPBP8 - биты значения столкновения. CLXDAT неизменен.

                           <U>Горизонтальные Компараторы</U>

Все  программируемые  компараторы  за  исключением  VHPOSW  имеют   разрешающую
способность  35nSec:  DIWHIGH,  HBSTOP,  SPRCTL,  BPLCON1.  BPLCON1 также имеет
дополнительные  старшие   биты.   Обратите   Внимание   что   битовая   позиция
представляющая  горизонтальное  разрешение  140  nSec изменилась на 3-й младший
бит. Например, бит 00 в BPLCON1 назывался PF1H0, а теперь называется PF1H2.

                           <U>Приведение 15KHz к 31KHz:</U>

К LISA добавлены возможности для того, чтобы правильно изображать вместе экраны
15KHz  и 31KHz на мониторе с частотой 31KHz. LISA может глобально устанавливать
разрешение спрайтов в LORES, HIRES  или  SHRES.  При  дублировании  строк  LISA
игнорирует  бит  SH10  в  регистре  SPRxPOS,  используя его для индивидуального
управления дублированием строк спрайтов.

                           <U>Новые экранные режимы AGA</U>

Режим Битпланов Цветов       Ширина выборки (См. примечание 1)
----- --------- ------       ---------------------------------
LORES (320x200)
        6   64 (не HAM, не EHB)          1 (Установите KillEHB!)
        7   128                          1
        8   256                          1
        8   HAM 256,000+(см прим. 2)     1

Dual playfield: Максимум 4 битплана на плейфилд, 16  цветов  на  плейфилд.  Для
каждого плейфилда ножет выбираться банк в 16 цветов из палитры в 256 цветов.

HIRES (640x200)
        5   32                           2
        6   EHB 64 (см прим. 3)          2
        6   HAM 4096 (см прим. 4)        2
        6   64  (установ. killEHB)       2
        7   128                          2
        8   256                          2
        8   HAM 256,000+(см прим. 2)     2

Dual playfield: Максимум 4 битплана на плейфилд, 16  цветов  на  плейфилд.  Для
каждого плейфилда ножет выбираться банк в 16 цветов из палитры в 256 цветов.

SUPERHIRES (1280x200)
        1   2 (см прим. 5)               1
        2   4 (см прим. 5)               1
        3   8                            2
        4   16                           2
        5   32                           4
        6   EHB 64 (см прим. 3)          4
        6   HAM 4096 (см прим. 4)        4
        6   64  (установ. KillEHB)       4
        7   128                          4
        8   256                          4
        8   HAM 256,000+(см прим. 2)     4

Dual playfield: Максимум 4 битплана на плейфилд, 16  цветов  на  плейфилд.  Для
каждого плейфилда ножет выбираться банк в 16 цветов из палитры в 256 цветов.

VGA  (160,320,640x480 не интерл. 31Khz - нужен VGA или мультисинк монитор)

        1   2 (см прим. 5)               1
        2   4 (см прим. 5)               1
        3   8                            2
        4   16                           2
        5   32                           4
        6   EHB 64 (см прим. 3)          4
        6   HAM 4096 (см прим. 4)        4
        6   64  (установ. KillEHB)       4
        7   128                          4
        8   256                          4
        8   HAM 256,000+(см прим. 2)     4

Dual playfield: Максимум 4 битплана на плейфилд, 16  цветов  на  плейфилд.  Для
каждого плейфилда ножет выбираться банк в 16 цветов из палитры в 256 цветов.

Super 72 (848x614 интерлейс, кадровая частота 70 Hz)

        1   2 как ECS, но без размаз. цветов 1
        2   4 как ECS, но без размаз. цветов 1
        3   8 цветов                         2
        4   16 цветов                        2
        5   32 цветов                        4
        6   64 цветов (установ. KillEHB)     4
        7   128 цветов                       4
        8   256 цветов                       4
        6   EHB 32 * 2 цветов                4
        6   HAM 4O96 цветов                  4
        8   HAM любой из 2^24 цветов         4

Dual playfield: Максимум 4 битплана на плейфилд, 16  цветов  на  плейфилд.  Для
каждого плейфилда ножет выбираться банк в 16 цветов из палитры в 256 цветов.

Скроллирование всех плейфилдов - теперь с шагом 35ns. Ранее шаг был 140ns.

Диапазоны скроллирования, программируемые в BPLCON1

     +-----------+----------------+----------------+
     | Режимы 1X | LORES Пикселей | SHRES Пикселей |
     +-----------+----------------+----------------+
     | LORES     | 0-15           | 0-63           |
     | HIRES     | 0-7            | 0-31           |
     | SHRES     | 0-3            | 0-15           |
     +-----------+----------------+----------------+

     +-----------+----------------+----------------+
     | Режимы 2X | LORES Пикселей | SHRES Пикселей |
     +-----------+----------------+----------------+
     | LORES     | 0-31           | 0-127          |
     | HIRES     | 0-15           | 0-63           |
     | SHRES     | 0-7            | 0-31           |
     +-----------+----------------+----------------+

     +-----------+----------------+----------------+
     | Режимы 4X | LORES Пикселей | SHRES Пикселей |
     +-----------+----------------+----------------+
     | LORES     | 0-63           | 0-255          |
     | HIRES     | 0-31           | 0-127          |
     | SHRES     | 0-15           | 0-63           |
     +-----------+----------------+----------------+


Примечания:

1 - Ширина выборки задает ширину выборки  данных  из  памяти,  необходимую  для
определенного  экранного  режима.  Например,  VGA экран, глубиной 5 бит требует
режима 4x, а VGA экран, глубиной 1 бит  -  режима  1x.  Режим  4х  обеспечивает
передачу  данных  в  4 раза быстрее, чем 1х. Для обеспечения правильной выборки
данных старшие режимы выборки требуют правильного выравнивания данных в памяти.
Режим 1х требует выравнивания по границам слов, режимы 2х - по границам длинных
слов, а режимы 4х - по границам квадро слов или, говоря иными словами - по  16,
32  или  64  бита.  Подобные  требования  - лучший повод использовать системные
функции захвата памяти. Однако не гарантируется что все машины,  имеющие  новый
чипсет   имеют   достаточно   быструю  память,  чтобы  обеспечивать  реимы  4x.
Следовательно, единственый способ узнать, будет ли машина  поддерживать  данный
режим - это проверить Экранную Базу Данных.

* BANDWIDTH 1: MOVE.W   #0,$DFF1FC
* BANDWIDTH 2: MOVE.W   #2,$DFF1FC  ;Битмап, выровненый по 32 битам и
                    ;MODULO = MODULO-4
* BANDWIDTH 4: MOVE.W   #3,$DFF1FC  ;Битмап, выровненый по 64 битам и
                    ;MODULO = MODULO-8

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

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

2 - Новый 8-ми битовей режим HAM использует верхние 6 бит указаная на  один  из
64  базовых 24х битных регистров или как 6ти битное значение изменения текущего
значения, а младшие 2 бита используются как команда.  В  этом  режиме  возможно
одновременное  изображение  более  256,000  цветов  (а  если  на экране имеется
достаточное количество пикселей, то  и  до  16.8  миллионов  цветов).  Обратите
внимание на то, что хотя регистровые и управляющие битпланы поменялись местами,
(Управляющие  биты  теперь  младшие,  а  не  старшие),  программы  использующие
graphics.library  и  intuition.library  не  должны  обращать  на  это внимание,
поскольку все это обрабатывается автоматически.

3 - Этот режим подобен старому режиму EHB, но в новых разрешениях.  Этот  режим
использует  5  битпланов  для  получения  32 цветов, плюс шестой битплан для 32
цветов с половинной яркостью.

4 - Этот  режим  подобен  старому  режиму  HAM,  но  в  новых  разрешениях.  Он
использует  младшие  4  бита  для  указания  16 цветовых регистров или значения
изменения и  старшие  2  бита  команды.  В  этом  режиме  доступно  ихображения
одновременно 4096 цветов.

5 - Эти режимы - в отличие от старых режимов VGA  и  SUPERHIRES  не  ограничены
нестандартной 64х цветной палитрой.

*******************************************************************************

                                  <U>Формат HAM-8</U>

Ham-8 использует *нижние* два бита в качестве команды  (выбор  нового  регистра
или  изменение  Красной, Зеленой или Синей компонент, как и в стандарте HAM), и
*верхние* 6 бит ( планы 2 - 7 ) как номер  регистра  (0  -  63),  или  как  6ти
битовое  значение  hold-and-modify  для  изменения  верхних  6  бит 8ми битного
цветового значения.

Самые младшие два бита цветового значения  не  изменяются,  так  что  начальная
палитра  должна  выбираться осторожно (например, используя AdPro или что-нибудь
еще, что делает это лучше)


                          <U>Программирование AGA чипсета</U>

Программа обнаружения чипсета AGA

Эта программа  позволяет  обнаружить  наличие  чипсета  AGA  на  101  %...  (За
последний  процент  спасибо  DDT/HBT).  Эта программа будет обнаруживать AGA на
будущих модифицикациях AGA машин. Взамен создание CMPI.B $f8,$dff07c.)  на  тех
новых AGA машинах только старый чипсет будет обнаружен !!!!

AGA DETECT ROUTINE:

This is my AGA detect routine 101%... (thanx to DDT/HBT for  the  last  1%)  It
will  detect  AGA  on  the future updated AGA machines. Instead making a CMPI.B
#$f8,$dff07c on that new AGA machines only old chipset will be detected!!!!

    LEA $DFF000,A5
    MOVE.W  $7C(A5),D0  ; Проверка DeniseID или LisaID на AGA
    MOVEQ   #30,D2      ; Проверяем 30 раз (на старой denise случайной число)
    ANDI.W  #%000000011111111,d0    ; только младший байт
DENLOOP:
    MOVE.W  $7C(A5),D1  ; Denise ID (LisaID на AGA)
    ANDI.W  #%000000011111111,d1    ; только младший байт
    CMP.B   d0,d1       ; такое-же значеине?
    BNE.S   NOTAGA      ; нет, значит OCS Denise!
    DBRA    D2,DENLOOP  ;
    ORI.B   #%11110000,D0   ; маскируем версию AGA
    CMPI.B  #%11111000,D0   ; бит 3=AGA (этот бит будет =0 в AAA!)
    BNE.S   NOTAGA      ; AGA присутствует?
    ST.B    AGA         ; Устанавливаем  AGA флаг.
NOTAGA:             ; не AGA, но возможно AAA чипсет!

Мне потребовалось исправить больше 3 AGA демок, которые на моей А4000 говорили:
YOU   NEED   AN   AGA   MACHINE   (!!)...   эти   демки:   NOP   1/muffbusters,
RedNexRevivalIntro (с плохим тестом процессора) и другие..

***************************************************************************
Для того, чтобы сделать демо для обычной Амиги работоспособным на чипсете AGA
вставьте следующие строчки в Ваш копперлист:

    dc.w    $106,$c00   ;Выключение AGA спрайтов, палитры и DPF
    dc.w    $1FC,0      ;Выключение AGA выборки для спрайтов и битпланов.

И не забудьте устанавливать значения BPL1MOD($108), BPL2MOD($10a), DIWSTRT($8e)
и DIWSTOP($90), иначе Вы будете получать значения, используемые в WB.

*******************************************************************************

Битпланы:

От 0 до  7 битпланов устанавливаются как и прежде в регистре BPLCON0 ($dff100).

Восемь битпланов устанавливаются установкой бита 4 регистра BPLCON0, биты 12-14
должны быть 0

Для Hires при 8 битпланах не забудьте установить биты  0  и  1  регистра  FMODE
($dff1fc)

8 битпланов:

Число  используемых  битпланов  определяется  битами  12-14  регистра  BPLCON0.
Поскольку  для  этой  цели  имеется  всего  3 бита невозможно было использовать
больше 7 битпланов. Для использования 8 битпланов введен специальный бит - бит
4. При его использовании не забудьте обнулить биты 12-14 для будущей
совместимости :)


бит 4 | 8 битпланов
------------------------
  0   | не выбрано
------------------------
  1   | выбрано
------------------------

Использование 64х-цветного режима (не EHB) требует установки бита KILLEHB  (бит
9) в регистре BPLCON2

Гладкий Скроллинг


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

Биты 8 (PF1H0) и 9 (PF1H1) -  новые  биты  прокрутки  высокого  разрешения  для
первого  плейфилда,  а  биты  12  (PF2H0) и 13 (PF2H1) - новые биты для второго
плейфилда.

Еще по два бита добавлены к каждому  плейфилду  для  обеспечения  максимального
расстояния  скроллирования,  равного  64  пикселям  низкого  разрешения или 256
пикселям в SHires (вместо 16 пикселей низкого разрешения) Это биты 10 (PF1H6) и
11  (PF1H7)  для  первого  плейфилда и биты 14 (PF2H6) и 15 (PF2H7) для второго
плейфилда.

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

*******************************************************************************
Цветовые Регистры:

Теперь  имеются  256  цветовых  регистров,  доступ  к  которым   осуществляется
посредством старых 32 регистров.

AGA работает с 8  различными  палитрами  по  32  цвета  в  каждой,  многократно
используя цветовые регистры цвет00 - цвет31 ($0180 - $01BE).

Текущая палитра выбирается используя биты BANK0-BANK2 (13-15) регистра  BPLCON3
($0106)

бит 15 | бит 14 | бит 13 | Выбранная палитра
-------+--------+--------+------------------------------
   0   |    0   |    0   | Палитра 0 (цвета 0 - 31)
   0   |    0   |    1   | Палитра 0 (цвета 32 - 63)
   0   |    1   |    0   | Палитра 0 (цвета 64 - 95)
   0   |    1   |    1   | Палитра 0 (цвета 96 - 127)
   1   |    0   |    0   | Палитра 0 (цвета 128 - 159)
   1   |    0   |    1   | Палитра 0 (цвета 160 - 191)
   1   |    1   |    0   | Палитра 0 (цвета 192 - 223)
   1   |    1   |    1   | Палитра 0 (цвета 224 - 255)
*******************************************************************************

Чтобы записать 24-х битное значение в цветовой регистр требуется две  записи  в
регистры:

- Сначала очистите бит 9 (LOCT) регистра BPLCON3 ($dff106).
- Запишите старшие полубайты каждого цвета в цветовые регистры.
- Затем установите бит 9 (LOCT) регистра BPLCON3 ($dff106).
- Запишите младшие полубайты каждого цвета в цветовые регистры.


бит 9 | Доступ к:
------------------------------
  0   | 4 старшим битам R,G,B
------------------------------
  1   | 4 младшим битам R,G,B
------------------------------

Вы должны соблюдать порядок записи: сначала записываем 3 *  4  СТАРШИХ  БИТ,  а
затем 3 * 4 МЛАДШИХ БИТ!

Например, чтобы заменить нулевой цвет на цвет $123456

   $01060000 dc.l
   $01800135 dc.l
   $01060200 dc.l
   $01800246 dc.l

Если вы используете цвета 12-ти битный  цвет,  рассматриваются  только  старшие
биты каждой из цветовых компонент (RGB).

    ПРИМЕР КОППЕРЛИСТА ДЛЯ AGA


    DC.W    $106,$c00   ;Выбираем палитру 0 (0-31), старшие полубайты
COLP0:
    DC.W    $180,$000,$182,$000,$184,$000,$186,$000 ;Старшие полубайты
    DC.W    $188,$000,$18A,$000,$18C,$000,$18E,$000 ;цветов 0-31
    DC.W    $190,$000,$192,$000,$194,$000,$196,$000 ;
    DC.W    $198,$000,$19A,$000,$19C,$000,$19E,$000 ;
    DC.W    $1A0,$000,$1A2,$000,$1A4,$000,$1A6,$000
    DC.W    $1A8,$000,$1AA,$000,$1AC,$000,$1AE,$000
    DC.W    $1B0,$000,$1B2,$000,$1B4,$000,$1B6,$000
    DC.W    $1B8,$000,$1BA,$000,$1BC,$000,$1BE,$000

    DC.W    $106,$e00   ;Выбираем палитру 0 (0-31), младшие полубайты
COLP0B:
    DC.W    $180,$000,$182,$000,$184,$000,$186,$000 ;Младшие полубайты
    DC.W    $188,$000,$18A,$000,$18C,$000,$18E,$000 ;цветов 0-31
    DC.W    $190,$000,$192,$000,$194,$000,$196,$000 ;
    DC.W    $198,$000,$19A,$000,$19C,$000,$19E,$000 ;
    DC.W    $1A0,$000,$1A2,$000,$1A4,$000,$1A6,$000
    DC.W    $1A8,$000,$1AA,$000,$1AC,$000,$1AE,$000
    DC.W    $1B0,$000,$1B2,$000,$1B4,$000,$1B6,$000
    DC.W    $1B8,$000,$1BA,$000,$1BC,$000,$1BE,$000

    DC.W    $106,$2C00  ;Выбираем палитру 1 (31-63), старшие полубайты
COLP1:
    DC.W    $180,$000,$182,$000.... и т.д.

    DC.W    $106,$2E00  ;Выбираем палитру 1 (31-63), младшие полубайты
COLP1B:
    DC.W    $180,$000,$182,$000.... и т.д.

    DC.W    $106,$4C00  ;Выбираем палитру 2 (64-95), старшие полубайты
COLP2:
    DC.W    $180,$000,$182,$000.... и т.д.

    DC.W    $106,$4E00  ;Выбираем палитру 2 (64-95), младшие полубайты
COLP2B:
    DC.W    $180,$000,$182,$000.... и т.д.

    DC.W    $106,$6C00  ;Выбираем палитру 3 (96-127), старшие полубайты
COLP3:
    DC.W    $180,$000,$182,$000.... и т.д.

    DC.W    $106,$6E00  ;Выбираем палитру 3 (96-127), младшие полубайты
COLP3B:
    DC.W    $180,$000,$182,$000.... и т.д.

    DC.W    $106,$8C00  ;Выбираем палитру 4 (128-159), старшие полубайты
COLP4:
    DC.W    $180,$000,$182,$000.... и т.д.

    DC.W    $106,$8E00  ;Выбираем палитру 4 (128-159), младшие полубайты
COLP4B:
    DC.W    $180,$000,$182,$000.... и т.д.

    DC.W    $106,$AC00  ;Выбираем палитру 5 (160-191), старшие полубайты
COLP5:
    DC.W    $180,$000,$182,$000.... и т.д.

    DC.W    $106,$AE00  ;Выбираем палитру 5 (160-191), младшие полубайты
COLP5B:
    DC.W    $180,$000,$182,$000.... и т.д.

    DC.W    $106,$CC00  ;Выбираем палитру 6 (192-223), старшие полубайты
COLP6:
    DC.W    $180,$000,$182,$000.... и т.д.

    DC.W    $106,$CE00  ;Выбираем палитру 6 (192-223), младшие полубайты
COLP6B:
    DC.W    $180,$000,$182,$000.... и т.д.

    DC.W    $106,$EC00  ;Выбираем палитру 7 (224-255), старшие полубайты
COLP7:
    DC.W    $180,$000,$182,$000.... и т.д.

    DC.W    $106,$EE00  ;Выбираем палитру 7 (224-255), младшие полубайты
COLP7B:
    DC.W    $180,$000,$182,$000.... и т.д.

*******************************************************************************

Bplmod: В AGA режимах модуль обычно такой-же, как и в нормальном  режиме  минус
8.  Так,  если  обычный  модуль  =  0,  то agamodulo = -8. (Если вы используете
FMODE=3!), если вы используете FMODE =2, тогда модуль = -4 .

*******************************************************************************

Спрайты:

Разрешение спрайта изменяется использованием бит  7  и  6  (SPRES0-1)  регистра
$0106 (BPLCON3)

Бит 7 | бит 6 | Разрешtybt
------+-------+-----------
  0   |   0   | ECS по умолчанию (Lo-res/Hi-res = 140ns, Superhires = 70ns)
  0   |   1   | Всегда lowres           (140ns)
  1   |   0   | Всегда hireres          (70ns)
  1   |   1   | Всегда superhires       (35ns)
--------------------------

(70ns спрайты не могут быть доступны если бит lace в BPLCON0 не установлен )

*******************************************************************************

Для установки ширины спрайтов, равной 32 и 64 бита используются биты 3 (SPAGEM)
и  2(SPR32)  регистра  $01FC(FMODE).  Формат  спрайта  (в частности управляющие
слова) различен для каждой ширины.

Бит 3 | бит 2 | Ширина      | Управляющие Слова
------+-------+-------------+------------------------------------------
  0  |   0    | 16 пикселей | 2 слова (нормальные)
  1  |   0    | 32 пикселя  | 2 длинных слова
  0  |   1    | 32 пикселя  | 2 длинных слова
  1  |   1    | 64 пикселя  | 2 двойных длинных слова (4 длинных слова)
-----------------------------------------------------------------------

Более широкие спрайты не доступны ни каким образом. Copper читает спрайт  листы
по разному, в зависимости от ширины вашего спрайта.

Адрес спрайта, шириной 16 пикселей должен быть кратен 2
Адрес спрайта, шириной 32 пикселей должен быть кратен 4
Адрес спрайта, шириной 64 пикселей должен быть кратен 16

Чтение управляюших слов спрайта, шириной 16 пикселей

слово C1, слово C2
слово A1, слово B1
.
.
.
слово An, слово Bn
$0000 0000

C1=первое управляющее слово
C2=второе управляющее слово

Ai и Bi объединяясь по OR формируют изображение спрайта.

Чтение управляюших слов спрайта, шириной 32 пикселя

    CNOP    0,8     ;выравниваем по 64 битам

SPRITE32:           ;Пример AGA спрайта, шириной 32 пикселя
VSTART:
    dc.b 0      ;длинное C1
HSTART:
    DC.b 0
    DC.W 0
VSTOP:
    DC.b 0,0    ;длинное C2
    dc.w 0
 dc.L %00000000000000111100000000000000,%0000000000001000000000000000000;sprite
 dc.L %00000000000011111111000000000000,%0000000000010111100000000000000
длинное слово A3, длинное слово B3
.
.
.
длинное слово An, длинное слово Bn
    DC.W    0,0,0,0     ;конец впрайта

C1=первое управляющее длинное слово

   Первое управляющее слово содержится в старшем слове  C1.  Младшее  слово  C1
   должно содержать второе управляющее слово.

C2=второе управляющее длинное слово

   Второе управляющее слово содержится в старшем слове  C2.  Младшее  слово  C2
   должно быть равно $0000

Общий порядок расположения управляющих слов:
С1 С2 С2 00

Ai и Bi объединяясь по OR формируют изображение спрайта.

Чтение управляюших слов спрайта, шириной 64 пикселя

    CNOP    0,8     ;выравниваем по 64 битам

SPRITE64:           ;Пример AGA спрайта, шириной 32 пикселя
VSTART:
    DC.B    0       ;двойное длинное слово C1
HSTART:
    DC.B    0
    DC.W    0
    DC.L    0
VSTOP:
    DC.B    0,0     ;двойное длинное слово C2
    DC.W    0
    DC.L    0
двойное длинное слово A1, двойное длинное слово B1
.
.
.
двойное длинное слово An, двойное длинное слово Bn
    DC.W    0,0,0,0,0,0,0,0 ;конец спрайта

C1=первое управляющее двойное длинное слово
   C1=W3:W2:W1:W0 (Wi=слова)
   W3 первое управляющее слово
   W2 и W1 второе управляющее слово
C2=второе управляющее двойное длинное слово
   C2=W3:W2:W1:W0 (Wi=слова)
   W3 is второе управляющее слово

Общий порядок расположения управляющих слов:
С1 С2 С2 00 С2 00 00 00

Ai и Bi объединяясь по OR формируют изображение спрайта.

***************************************************************************

Перемещение спрайтов с точностью 1/4 пикселя:

Используйте биты 3 и 4 второго слова управляющего слова спрайта  для  установки
позиции мпрайта с точностью 1/4 lowres пикселя (каждый пиксель в SuperHires ):

 Бит 0 второго управляющего слова = бит 2 горизонтальной позиции.
 Бит 3 второго управляющего слова = бит 0 горизонтальной позиции.
 Бит 4 второго управляющего слова = бит 1 горизонтальной позиции.

Позиция спрайта теперь закодирована 11 битами.

***************************************************************************

Изменение палитры спрайтов:

Все спрайты используют для  изображения  одну  16  цветную  палитру.  Результат
получается следующий:

Спрайты |  Цвета
------------------
   0-1  |  00-03
   2-3  |  04-07
   4-5  |  08-11
   6-7  |  12-15
------------------

Раньше  вы  могли  использовать  только  ОДНУ  палитру  для  всех  изображаемых
спрайтов.  Эта палитра располагалась в цветовых регистрах 15 к цвету 31. Теперь
вы можете изображать нечетные и четные спрайты в разных палитрах.

Поскольку доступно 256 цветов, это дает 16 палитр по 16  цветов  в  каждой.  Вы
можете  выбрать  палитру, которая будет использоваться для изображения нечетных
спрайтов и которая будет использоваться для изображения четных спрайтов. Цвета,
используемые спрайтами в 16 цветной палитре такие-же как обычно:

Спрайты |            Цвета
-----------------------------------------
   0    | 00-03 палитры четных спрайтов
   2    | 04-07 палитры четных спрайтов
   4    | 08-11 палитры четных спрайтов
   6    | 12-15 палитры четных спрайтов
-----------------------------------------
   1    | 00-03 палитры нечетных спрайтов
   3    | 04-07 палитры нечетных спрайтов
   5    | 08-11 палитры нечетных спрайтов
   7    | 12-15 палитры нечетных спрайтов
-----------------------------------------

Биты 4 - 7 (ESPRM) регистра BPLCON4 ($DFF010C) используются для выбора палитры,
используемой  для  изображения  четных  спрайтов,  биты  0 - 3 (OSPRM) регистра
BPLCON4  ($DFF010C)  используются  для   выбора   палитры,   используемой   для
изображения нечетных спрайтов,

бит 3 | бит 2 | бит 1 | бит 0 | Нечетные спрайты
бит 7 | бит 6 | бит 5 | бит 4 | Четные спрайты
------+-------+-------+-------+------------------------------------------
  0   |   0   |   0   |   0   | $0180/палитра 0 (цвет 0)
  0   |   0   |   0   |   1   | $01A0/палитра 0 (цвет 15)
  0   |   0   |   1   |   0   | $0180/палитра 1 (цвет 31)
  0   |   0   |   1   |   1   | $01A0/палитра 1 (цвет 47)
  0   |   1   |   0   |   0   | $0180/палитра 2 (цвет 63)
  0   |   1   |   0   |   1   | $01A0/палитра 2 (цвет 79)
  0   |   1   |   1   |   0   | $0180/палитра 3 (цвет 95)
  0   |   1   |   1   |   1   | $01A0/палитра 3 (цвет 111)
  1   |   0   |   0   |   0   | $0180/палитра 4 (цвет 127)
  1   |   0   |   0   |   1   | $01A0/палитра 4 (цвет 143)
  1   |   0   |   1   |   0   | $0180/палитра 5 (цвет 159)
  1   |   0   |   1   |   1   | $01A0/палитра 5 (цвет 175)
  1   |   1   |   0   |   0   | $0180/палитра 6 (цвет 191)
  1   |   1   |   0   |   1   | $01A0/палитра 6 (цвет 207)
  1   |   1   |   1   |   0   | $0180/палитра 7 (цвет 223)
  1   |   1   |   1   |   1   | $01A0/палитра 7 (цвет 239)
-------------------------------------------------------------------------

           ********************  ЭТО  ВАЖНО  ************************

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

Это также поднимает  другую  проблему.  Вы  больше  не  можете  непосредственно
использовать AllocMem() для выделения памяти для битпланов или спрайтов.

Можно  делать  так:  используя  AllocMem  (размер_битпланов  +  8)  и  вычисляя
количество  байт, которые нужно пропустить в начале, чтобы дать выравнивание по
64 битам (не забывйте о том, что размер битплана может быть не кратем 64 битам,
поэтому  выделяйте память для каждого битплана отдельно или удостоверьтесь, что
размер битплана кратен 64 битам). Другой путь - это использование новой функции
V39 AllocBitMap(). Третий путь - это непосредственное выравнивание в исходном
тексте программы. Например:

      CNOP  0,8
sprite   incbin "myspritedata"

      CNOP  0,8
битplane incbin "myбитplane"

и т.д.

ЕСЛИ ВЫ ЗАБЫЛИ ВЫРАВНЯТЬ ПО 64 БИТАМ, ИЗОБРАЖЕНИЕ БУДЕТ ПОЯВЛЯТЬСЯ ОБРЕЗАННОЕ.

Общая ошибка - указатели на  нежелательные  спрайты  указывающие  на  $0.  Если
длинное  слово  по  этому адресу не равно нулю, вы получите несколько прекрасно
смотрящихся спрайтов в самых непредсказуемых местах.

Правильный способ избавления от спрайтов состoит  в  том,  чтобы  указывать  на
адрес  который  наверняка  содержит  -  $00000000.)  (0.l),  а  с AGA вы можете
указывать на ЧЕТЫРЕ длинных слова, равных 0, выровненных по 64 битам.

***************************************************************************

                        ИСПОЛЬЗОВАНИЕ РЕЖИМА SUPERHIRES

Чтобы использовать режим SuperHires (Шириной 1280 пикселей), просто включите
бит 6 (SHRES) из регистра BPLCON0 ($0100)

бит 6 | Режим SuperHires
------------------------
  0   | Выключен
  1   | Включен
------------------------

***************************************************************************
                              ПЕРЕКЛЮЧЕНИЕ ПАЛИТРЫ

Вы можете переключать цвета в палитре. Операция переключения между цветом A и B
определяется следующим образом:

- Содержание цветовых регистров не изменяются

- Все, что изображалось цветом A теперь  изображается  цветом  B,  и  все,  что
изображалосл цветом B теперь изображается с цветом А

Для переключения используются биты 8-15 (BPLAM) регистра BPLCON4 ($DFF10C):

 Бит          15 14 13 12 11 10 09 08
 Имя          S7 S6 S5 S4 S3 S2 S1 S0

При включении бита Sn, железо начинает действовать следующим образом:

- Группа из 2^n цветов, начиная от цвета 00 до цвета (2^n)-1 меняется местами с
группой из 2^n цветов, начиная от цвета 2^n до цвета 2^n+(2^n)-1

- Группа из 2^n цветов, начиная от цвета 2*2^n до цвета 2*2^n+(2^n)-1  меняется
местами с группой из 2^n цветов от цвета 3*2^n до цвета 3*2^n+(2^n)-1

 - ...

Операция заканчивается, при достижении конца 256 цветной палитры.

Например:

   Выбран бит Sn=1. На рисунке показано, что представляет собой  палитра  до  и
   после переключения. Копперлист абсолютно не изменяется:

          Перед      |    После
     ---------------------------------
         цвет 00     |   цвет 02
         цвет 01     |   цвет 03
         цвет 02     |   цвет 00
         цвет 03     |   цвет 01
         цвет 04     |   цвет 06
         цвет 05     |   цвет 07
         цвет 06     |   цвет 04
         цвет 07     |   цвет 05
         ...         |   ...

В этом примере цвета поменялись местами, используя группы из 2^1=2 цветов

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

Операции переключения могут oбъединяться. Если выбрано больше чем один бит  Sn,
операции  переключения  для  каждого  бита  будут  выполняться последовательно,
начиная с S0.

Например:

   BPLCON4 ($DFF10C) содержит $0500. Влючены биты S0 и S2. Первое  переключение
   использует группы из 2^0 цветов, а второе из 2^2 цветов:

          Перед      |   После S0  |  После S2
     ---------------------------------------------
         цвет 00     |   цвет 01   |  цвет 05
         цвет 01     |   цвет 00   |  цвет 04
         цвет 02     |   цвет 03   |  цвет 07
         цвет 03     |   цвет 02   |  цвет 06
         цвет 04     |   цвет 05   |  цвет 01
         цвет 05     |   цвет 04   |  цвет 00
         цвет 06     |   цвет 07   |  цвет 03
         цвет 07     |   цвет 06   |  цвет 02
         цвет 08     |   цвет 09   |  цвет 13
         цвет 09     |   цвет 08   |  цвет 12
         цвет 10     |   цвет 11   |  цвет 15
         цвет 11     |   цвет 10   |  цвет 14
         цвет 12     |   цвет 13   |  цвет 09
         цвет 13     |   цвет 12   |  цвет 08
         цвет 14     |   цвет 15   |  цвет 11
         цвет 15     |   цвет 14   |  цвет 10
         ...         |   ...       |  ...

***************************************************************************

      Режим VGA/PRODUCTIVITY 640x480 без интерлейса

Этот режим поддерживается на Амиге начиная с первых ECS машин и требует наличия
мультискан монитора.

В AGA чипсете этот режим значительно усовершенствован:  теперь  в  этом  режиме
можно использовать 256-ти цветные и HAM8 экраны.

   NTSC (525 строк, 227.5 тактов на строку)
   PAL  (625 строк, 227.5 тактов на строку)
   VGA  (525 строк, 114.0 тактов на строку)

Программируемая синхронизация осуществляется через 5 новых  усовершенствованных
регистров Agnus:

   VSSTRT    W   A     Вертикальная позиция начала VSYNC.
   VSSTOP    W   A     Вертикальная позиция остановки VSYNC
   HSSTRT    W   A     Горизонтальная позиция начала HSYNC.
   HSSTOP    W   A     Горизонтальная позиция остановки HSYNC
   HCENTER   W   A     Горизонтальная позиция Vsync при интерлейсе

Удовлетворительный результирующий сигнал получается при  установке  HCENTER  на
половину  горизонтальной  строки  с  HSSTRT,  а HBSTOP на (HSSTOP-HSSTRT) перед
HCENTER и HBSTRT на (HSSTOP-HSSTRT) перед HSSTRT.

Программируемый обратный ход выполняется через четыре новых регистра ECS Agnus:

   HBSTRT   W   A  Горизонтальная позиция начала HBLANK
   HBSTOP   W   A   Горизонтальная позиция останова HBLANK
   VBSTRT   W   A   Вертикальная позиция начала VBLANK
   VBSTOP   W   A   Вертикальная позиция останова VBLANK

Для того, чтобы сменить горизонтальную частоту с 15KHz (TV, монитор 1084) на 31
KHz  необходимо  изменить  значение  регистра  BEAMCON0  ($dff1dc) и установить
правильные значения в других регистрах.
Пример:

    LEA $DFF000,A0
    MOVE.W  #%0001101110001000,$1DC(A0) ;BEAMCON0
                ;3 - Комплексное гашение на выходе CSY
                ;7 - Включение программируемого счетчика луча
                ;8 - Включение программируемой горизонтальной синхронизации
                ;9 - Включение программируемой вертикальной синхронизации
                ;11- Выключение переключателя ДЛИННАЯ/КОРОТКАЯ строка
                ;12- Включение программируемого обратного хода луча.
    MOVE.W  #$71,$1C0(A0)   ;HTOTAL - наибольшее значение счетчика гориз. линий
    MOVE.W  #8,$1C4(A0) ;HBSTRT - Позиция гориз линии для HBLANK START
    MOVE.W  #14,$1DE(A0)    ;Начало горизонтальной синхронизации
    MOVE.W  #$1C,$1C2(A0)   ;Позиция гориз линии для HSYNC STOP
    MOVE.W  #$1E,$1C6(A0)   ;Позиция гориз линии для HBLANK STOP
    MOVE.W  #$46,$1E2(A0)   ;Гориз. позиция для VSYNC при интерлейсе.
    MOVE.W  #$20C,$1C8(A0)  ;VTOTAL - Наибольшее значение счетчика верт линий.
    MOVE.W  #0,$1CC(A0) ;Вертикальная линия начала верт обратного хода
    MOVE.W  #3,$1E0(A0) ;Начало верт синхронизации
;   MOVE.W  #$200,$1E4(A0)
    MOVE.W  #$100,$1E4(A0)
    MOVE.W  #5,$1CA(A0) ;Позиция верт линии для VSYNC STOP
    MOVE.W  #$1D,$1CE(A0)   ;Верт. линия для VBLANK STOP
    MOVE.W  #%00010010,$104(A0) ;
    MOVE.W  #%0000110000100001,$106(A0) ; 0 - Включение внешнего гашения
                        ; 5 - Гашение бордюра
                        ; 10-11 Fix AGAшного дуал-плейфилд.
    MOVE.W  #$1241,$100(A0) ;Режим VGA с 2 цветами
;   MOVE.W  #$1245,$100(A0) ;На AGA машине требует битплан, 
                ;но запомните, что надо поместить $3 в $dff1fc если вам
                ;надо более 2 цветов (Старый ECS режим)

Затем установите указатель на ваш копперлист. Запомните,  что  бит  0  регистра
$dff100  должен  быть включен для включения всех вохможностей ECS и AGA, а если
вам надо более 4 цветов, вы ДОЛЖНЫ установить биты 0 и  1  регистра  $dff1fc  и
выровнять  битпланы  по  64м  битам. Удачи вам, и запомните, что выбор монитора
должен быть оформлен в виде окна или  какого-нибудь  другого  ДРУЖЕСТВЕННОГО  К
СИСТЕМЕ реквестера

Пример копперлиста для AGA (проверено на А1200+VGA монитор)

 COPPERLIST: ;Не забудьте установить сначала регистры ECS !

    ;   Указатели спрайтов

    dc.l    $C01FFFE
    dc.l    $1800F00
BPLP:
    dc.l    $E00000     ;Указатели битпланов
    dc.l    $E20000     ;указываю на картинку 640x480
    dc.l    $E40000     ;также, как в интерлейсе
    dc.l    $E60000
    dc.l    $E80000
    dc.l    $EA0000     
    dc.l    $EC0000     
    dc.l    $EE0000     

    DC.W    $180,0      ;модуль
    DC.W    $10A,0

    dc.W    $8E,$1c45   ;diwstrt
    dc.W    $90,$ffe5   ;diwstop
    dc.W    $92,$0018   ;ddfstrt
    dc.W    $94,$0068   ;ddfstop
    dc.w    $1e4,$100

    ;Здесь задается палитра... такая же, как и нормальная палитра на AGA

    dc.w    $1fc,$8003
    DC.W    $100,$1241  ;bplcon0

    dc.l    $FFFFFFFE   ;конец копперлиста
    dc.l    $FFFFFFFE

***************************************************************************
Использование функции AllocBitmap

allocbitap "graphics.library" V39 новая функция для захвата битмапов.

AllocbitMap -- Захватывает битмап и прикрепляет к нему битпланы. (V39)

bitmap=AllocbitMap(sizex,sizey,depth, flags, friend_bitmap)
          -918       d0    d1    d2     d3       a0

struct bitMap *AllocbitMap(ULONG,ULONG,ULONG,ULONG, struct bitMap *);

Захватывает и инициализирует структуру  битмапов.  Устанавливает  указатели  на
планы.

НА ВХОДЕ:
   sizex = ширина (в пикселях) битплана.

   sizey = высота (в пикселях).

   depth = глубина (число битпланов для захвата)

   flags = BMF_CLEAR - очистка битмапа.

           BMF_DISPLAYABLE - битмап на AGA машинах показывается во всех режимах

           BMF_INTERLEAVED - интерлейвные битпланы.

friend_битmap  =  Указатель  на  другой  битплан  или  NULL.   Если   указатель
присутствует, битмап выделяется так, что блит между двумя битмапами упрощается

Для освбождения захваченного битмапа используйте FREEbitMAP(V39)

FreeбитMap -- освбождение битмапа, захваченного AllocbitMap

FreeбитMap(bm)
  -924     a0

VOID FreebitMap(struct bitMap *)

освбождает битмап и все прикрепленные битпланы.

-------------------------------------------------------------------------------
Извините за возможные опечатки по ходу текста, надеюсь, они не  сильно  помешали
Вам  освоить некоторые премудрости программирования AGA. До встречи в следующем
номере!
