THE
COMPLETE AMIGA HARDWARE
REFERENCE MANUAL
ГЛАВА 4 СПРАЙТЫ ВВЕДЕНИЕ Спрайты - это объекты чипсета, создаваемые и перемещаемые независимо от плейфилда и независимо друг от друга. Вместе с плейфилдами, спрайты формируют изображение на экране монитора. Вы можете создавать более сложные анимационные эффекты, используя блиттер, как описано в главе 6, "Блиттер". Спрайты помещаются на экран с помощью восьми каналов DMA. Простой спрайт имеет ширину 16 пикселей и неограниченную высоту. Вы можете выбрать 3 цвета для пикселей спрайта. Кроме этого, пиксель может быть прозрачным, сквозь который виден объект позади спрайта. Для больших и более сложных объектов или для получения большего количества цветов, спрайты могут объединяться. DMA спрайтов может быть повторно включено после первого использования. Таким образом, вы не ограничены только 8 спрайтами на экране в одно и то же время. ОБ ЭТОЙ ГЛАВЕ В этой главе обсуждаются следующие темы: - Определение размера, формы, цвета и расположения спрайтов. - Отображение и перемещение спрайтов. - Объединение спрайтов для более сложных изображений: добавление цветов и увеличение ширины. - Повторное использование спрайтов для получения более, чем 8 спрайтов одновременно. СОЗДАНИЕ СПРАЙТА Для создания спрайта вы должны сначала создать изображение, затем создать структуру данных спрайта. При создании спрайта он должен удовлетворять следующим характеристикам: - Ширина до 16 пикселей - Высота неограничена - Форма любая - Три цвета плюс прозрачный - Позиция на экране любая ПОЗИЦИЯ СПРАЙТА НА ЭКРАНЕ Позиция спрайта на экране определяется установкой двух координат - X и Y. Позиция (0,0) находится в левом верхнем углу экрана. Координаты спрайта также задают координаты верхнего левого угла спрайта. Координаты спрайта всегда задаются в неинтерлейсном режиме и в низком разрешении. На рис. 4-1 показаны системные координаты и задание позиции спрайта. Позиция (0,0) при использовании стандартного плейфилда находится за пределами видимой части изображения. (0,0) \ Видимая область плейфилда \_______________________ / | | / | ____________|____________/ | | Y | | | | | | | |______ | |-------X--------| /\ | | | | |__\/__| | | | | | | | Рис. 4-1: Определение позиции спрайта на экране Расположение видимой области экрана зависит от установки окна изображения, определяемого значениями DDFSTRT, DDFSTOP, DIWSTRT, DIWSTOP и т.д. Для подробностей, касающихся установки окна изображения см. главу 3 "Плейфилды" ГОРИЗОНТАЛЬНАЯ ПОЗИЦИЯ Горизонтальная позиция спрайта (координата X) может иметь значение от 0 до 447. Для того, чтобы быть видимым, объект должен попадать внутрь окна изображения. В примерах, данных в этой главе, используется окно, начинающееся в позиции 64 и заканчивающееся в позиции 383 (т.к. каждая линия шириной 320 пикселей). По желанию могут использоваться большие или меньшие окна, но перед изменением размеров окна рекомендуется прочитать главу 3 "плейфилды". Если вы зададите значение X за пределами окна, часть или весь спрайт могут пропасть с экрана. Таким образом, спрайты могут быть клиппированы. Для того, чтобы спрайты появлялись в правильной горизонтальной позиции относительно границ окна просто прибавьте смещение левой границы окна к желаемому значению координаты X. В примерах ниже прибавляется значение 64. Например, для расположения спрайта по координате 94 относительно края окна, выполните следующие вычисления: Желаемая позиция + горизонтальное смещение окна = 94+64 = 158 Следовательно 158 - это как раз то значение, которое записывается в структуру данных ПРИМЕЧАНИЕ X координата задает размещение самого левого пикселя в спрайте, даже, если этот пиксель определен как прозрачный и не виден на экране. Если, например, спрайт, показанный на рис. 4-2 имеет значение координаты X равное 158, в действительности изображение спрайта начинается в позиции 162, т.к. первые 4 пикселя спрайта определены как прозрачные и через них будет изображаться задний план. См. рис. 4-2: Расположение спрайта (катинка отсутствует) ВЕРТИКАЛЬНАЯ ПОЗИЦИЯ Вы можете задавать позицию для самой верхней строки спрайта в интервале 0-262. В примерах этой главы используется NTSC окно с координатами 44 - 243. Это позволяет изображать 200 строк. Если вы зададите вертикальную позицию меньше, чем 44 (т.е. выше начала окна изображения) то верхняя часть спрайта исчезнет с экрана. Для того, чтобы спрайты появлялись в правильной вертикальной позиции относительно границ окна прибавьте смещение верха границы окна к желаемому значению координаты Y. В данном случае прибавляется значение 44. Например, для того, чтобы расположить спрайт на 25 линий ниже края окна, выполните следующие вычисления: Желаемая координата Y + вертикальное смещение края окна = 25+44=69 Следовательно 69 - это как раз то значение, которое записывается в структуру данных КЛИППИРОВАНИЕ СПРАЙТОВ Как показано выше, спрайты могу быть частично или полностью клиппированы, если они пересекаются с границами окна изображения. Значения 64 по горизонтали и 44 по вертикали соответствуют нормально центрированному плейфилду в NTSC. Для подробностей о смещениях плейфилда и для информации о смещениях в системе PAL см. главу 3 "Плейфилды". Если вы выберете другие значения для создания своего плейфилда, границы клиппирования тоже изменятся. РАЗМЕРЫ СПРАЙТОВ Спрайты имеют ширину 16 пикселей и любую высоту, какую вы захотите... как один пиксель, так и выше, чем экран. Вы можете перемещать очень высокий спрайт вертикально, при этом будет показываться часть спрайта высотой в экран. Размер спрайта задается в пикселях низкого разрешения при неинтерлейсном режиме. Разрешение спрайтов не зависит от разрешения и интерлейса, установленных на экране. ФОРМА СПРАЙТОВ Спрайт может иметь любую форму, помещающуюся в шестнадцать пикселей по ширине. Задание спрайта производится заданием видимых пикселей для каждого пикселя спрайта. На рисунках 4-3 и 4-4 показан космический корабль, обозначенный знаками 'х'. Первый рисунок показывает корабль так как он появится на экране. Второй рисунок показывает биты спрайта шириной 16 пикселей. Нули вокруг корабля обозначают прозрачные пиксели. x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x Рис. 4-3: Космический корабль o o o o x x o o o o o o o o o o o o x x x x x x o o o o o o o o x x x x x x x x x x o o o o o o x x x x x x x x x x o o o o o o o o x x x x x x o o o o o o o o o o o o x x o o o o o o o o o o Рис. 4-4: Спрайт с изображением корабля В этом примере самая широкая часть корабля занимает 10 пикселей и корабль сдвинут к левой границе спрайта. Если изображение уже 16 пикселей, вы можете управлять положением изображения внутри спрайта и начинать его не с первого пикселя, а с любой позиции. (В данном случае в интервале 2 - 7). ЦВЕТА СПРАЙТОВ Когда спрайты используются отдельно (а не "объединены" как описано в разделе "Объединенные спрайты" каждый пиксель может иметь один из 3 цветов или быть прозрачным. Цвета задаются примерно так же, как и цвета на плейфилде. Рисунок 4-5 показывает как определяются цвета каждого пикселя при задании спрайта. рис. 4-5: Задание цветов спрайтов Нули и единички в двух словах данных, определяющих каждую линию спрайта формируют двоичный номер. Этот номер является указателем на один из 4х регистров цвета, закрепленных за данным каналом DMA. Восемь спрайтов используют цветовые регистры 16-31. Для задания цветов восемь спрайтов объединены в пары и каждая пара использует четыре регистра цвета как показано на рис. 4-6 ПРИМЕЧАНИЕ Значение цвета первого регистра в каждой группе спрайтами игнорируется. Когда биты спрайта выбирают этот регистр, используется прозрачный цвет. Коды 01, 10 и 11 выбирают один из трех регистров из группы, которая прикреплена к определенным цветовым регистрам. УСТАНОВКА ЦВЕТОВЫХ РЕГИСТРОВ _________________________ __ | не используется | 16 | 00 |_________________________| \ Спрайты 0 или 1 | 01 |_________________________| \ | 10 |_________________________| \ |__ 11 |_________________________| \ __ | не используется | 20 \ п | 00 |_________________________| \ \ р Спрайты 2 или 3 | 01 |_________________________| \ \ о | 10 |_________________________| \ \ з |__ 11 |_________________________| \ \ р __ | не используется | 24 ---------> а | 00 |_________________________| / / ч Спрайты 4 или 5 | 01 |_________________________| / / н | 10 |_________________________| / / ы |__ 11 |_________________________| / / й __ | не используется | 28 / | 00 |_________________________| / Спрайты 6 или 7 | 01 |_________________________| / | 10 |_________________________| / |__ 11 |_________________________| 31 / Рис 4-6: Назначение цветовых регистров Если вам требуются определенные цвета для спрайтов, вам потребуется загрузить цветовые регистры этими цветами. В главе 3 "Плейфилды" вы можете найти инструкции по загрузке цветовых регистров. Двоичный номер 00 имеет специальное значение. Пиксел, который имеет значение 00 - прозрачный и сквозь него виден любой другой спрайт или план, имеющий меньший приоритет. Объект с меньшим приоритетом появляется "за" объектом с большим приоритетом. Каждый спрайт имеет фиксированный приоритет относительно других спрайтов, но вы можете менять приоритеты между плейфилдами и спрайтами. (Для более подробной информации относительно приоритетов см. главу 7 "Управление чипсетом") КОНСТРУИРОВАНИЕ СПРАЙТОВ Для конструирования спрайтов можно изобразить их сначала на бумаге. Вы можете использовать цвета от 0 до 3. Например, космический корабль, показанный выше, может быть раскрашен так: 0000122332210000 0001223333221000 0012223333222100 0001223333221000 0000122332210000 Следующим шагом будет конвертирование чисел 0-3 в двоичные числа, которые будут использоваться для построения слов данных и размещения в структуре данных спрайта. ПОСТРОЕНИЕ СТРУКТУРЫ ДАННЫХ После определения спрайта вам необходимо создать структуру данных, состоящую из последовательности слов в непрерывной области chip памяти. Первые два слова содержат координаты и служебную информацию, а остальные содержат цвета пикселей спрайта. Для создания структуры данных спрайта вам необходимо: - Записать горизонтальную и вертикальную координаты спрайта в первое управляющее слово - Записать вертикальную координату конца спрайта во второе управляющее слово - Перевести десятичные значения цветов в вашем спрайте в двоичную форму. Использовать эти двоичные числа для создания структуры данных спрайта. - Записать управляющее слово, обозначающее конец структуры данных. ПРИМЕЧАНИЕ Данные для спрайтов, как и все другие данные для спец-чипов должны располагаться в chip памяти. Убедитесь, что все ваши структуры данных спрайтов находятся в chip памяти и выровнены по границам слова. В таблице 4-1 показана структура данных спрайта в памяти и функции каждого слова. Рис 4-7 показывает расположение структуры данных спрайта в памяти. Табл 4-1: Структура данных спрайта Память Слова Функции N Первое управляющее слово Вертикальная и горизонтальная координаты начала спрайта N+1 Второе управляющее слово Вертикальная координата конца спрайта N+2 Цвета. Младшее слово Биты для первой линии N+3 Цвета. Старшее слово Биты для первой линии N+4 Цвета. Младшее слово Биты для второй линии N+5 Цвета. Старшее слово Биты для второй линии . . . Маркер конца данных Два слова, разрешающих следующее использование этого спрайта \ / <------------- 16 Бит -----------> | _________________________________----\ _ Каждая группа слов | | | | / определяет один | | VSTART, HSTART | | / блок спрайта | |_________________________________| | / Содержит начальные | | |/ координаты образа У | VSTOP, управляющие биты | | спрайта на экране в |_________________________________| | е _________________________________ ___|___ л | | | | и | Младшее слово данных. Строка 1 | | | ч |_________________________________| | | е | | | |\ н | Старшее слово данных. Строка 1 | | | \ и |_________________________________| | | \_ Пары слов содержат е _____ | | информацию о _____ Остальные строки спрайта | | цвете каждой линии а ____ | | д _________________________________ | | р | | | | е | Младшее слово данных. | | | с |________Последняя строка_________| | | о | | | | в | Старшее слово данных | | | |_________________________________|___|___| | ____| | _________________________________ | | |\ | | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | \ | |_________________________________| \_ Последнее слово | _________________________________ содержит нули | | | если этот канал | | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | спрайта используется \|/ |_________________________________| один раз за кадр. V РИС. 4-7 Часть первая: Формат данных спрайта РИС 4-7 Часть вторая: Формат данных спрайта ПЕРВОЕ УПРАВЛЯЮЩЕЕ СЛОВО: SPRxPOS Это слово содержит вертикальную (VSTART) и горизонтальную (HSTART) начальные позиции спрайта, которые задают расположение самой верхней линии спрайта. Биты 15-8 содержат младшие 8 бит VSTART Биты 7-0 содержат старшие 8 бит HSTART ВТОРОЕ УПРАВЛЯЮЩЕЕ СЛОВО: SPRxCTL Это слово содержит координату вертикальной позиции окончания изображения спрайта (т.е. линию ПОСЛЕ последней изображаемой линии спрайта). Также это слово содержит данные, используемые при объединении спрайтов. Биты 15-8 Младшие 8 бит VSTOP Бит 7 Используется про объединении Биты 6-3 Не используются (должны быть 0) Бит 2 Старший бит VSTART Бит 1 Старший бит VSTOP Бит 0 Младший бит HSTART Значение разницы (VSTOP - VSTART) определяет, сколько строк спрайта будет изображаться. СЛОВА ДАННЫХ СПРАЙТА Каждая линия спрайта определяется двумя словами - старшим и младшим. Для вычисления размера структуры данных спрайта умножьте его высоту на 2. Биты старшего слова содержат левую цифру двоичного кода цвета спрайта, младшее слово содержит правую цифру. Для формирования слов данных вам необходима картинка спрайта, показывающая цвет каждого пикселя числом от 0 до 3, соответствующих номерам цветовых регистров спрайта. Например, рассмотрим еще раз изображение космического корабля: 0000122332210000 0001223333221000 0012223333222100 0001223333221000 0000122332210000 Нам необходимо перевести каждую цифру на этой картинке в двоичную форму. Первая линия показана ниже. Двоичные числа расположены вертикально - младшие цифры сверху, а старшие снизу. 0000100110010000 <---Младшее слово 0000011111100000 <---Старшее слово Первое получившееся слово это как раз младшее слово данных первой линии спрайта, а второе - старшее слово данных первой линии спрайта. Эти слова располагаются в структуре данных спрайта, как показано на рис 4-7 Каждое двоичное число, формируемое комбинацией двух слов данных соответствует определенному цветовому регистру, назначаемому в зависимости от канала, которым выводится данный спрайт. Например, нулевому каналу соответствуют регистры 17-19. Двоичные значения цветов спрайта и их соответствие цветовым регистрам для нулевого канала спрайтов показано в табл. 4-2 Табл. 4-2: Цветовые регистры нулевого канала спрайтов. Двоичное число Номер цветового регистра 00 Transparent 01 17 10 18 11 19 Двоичное значение 0 всегда обозначает прозрачность. Сквозь этот цвет виден задний план. СЛОВА ОКОНЧАНИЯ ДАННЫХ Когда вертикальная позиция луча достигает VSTOP, из структуры данных спрайта выбираются следующие 2 слова и записываются в управляющий регистр спрайтов, а не на экран. Эти два слова интерпретируются железом точно таким-же образом, как и те управляющие слова, которые были записаны в начале вывода спрайта. Таким образом здесь может быть расположена еще одна структура данных спрайта для повторного использования этого канала. Если значение VSTART, содержащееся в этих словах меньше, чем текущее значение позиции луча, спрайт не будет использоваться повторно. Соответственно, значение 0, содержащееся в обоих словах, обозначает завершение использования данного спрайта. Более подробно повторное использование спрайтов будет обсуждено ниже. Следующая структура данных задает спрайт космического корабля, с координатами V= 65 и H=128. SPRITE: DC.W $6D60, $7200 ;VSTART, HSTART, VSTOP DC.W $0990, $07E0 ;Первая пара слов данных DC.W $13C8, $0FF0 DC.W $23C4, $1FF8 DC.W $13C8, $0FF0 DC.W $0990, $07E0 DC.W $0000, $0000 ;Конец данных спрайта ИЗОБРАЖЕНИЕ СПРАЙТА После создания структуры данных спрайта необходимо вывести его на экран. Этот раздел описывает изображение спрайта в "автоматическом" режиме. В этом режиме после установки канала DMA спрайта он выводится автоматически до достижения позиции VSTOP. Более подробно ручной режим описан ниже. Для изображения спрайта используется следующая последовательность действий: 1. Определите, какой из 8 каналов DMA будет использоваться для вывода данного спрайта. Убедитесь, что выбранный канал доступен. 2. Установите указатели спрайта, чтобы система знала, где искать данные спрайта. 3. Включите DMA спрайта, если он не был включен до этого. 4. Для каждого последующего кадра во время обратного хода луча изменяйте содержимое указателей спрайта. ВНИМАНИЕ Если DMA спрайта выключается во время изображения спрайта (т.е. после VSTART но перед VSTOP) система будет продолжать изображать последнюю выбранную линию. Это вызывает появление на экране вертикальных полос. Рекомендуется выключать DMA спрайтов только во время обратного хода луча или в то время, когда вы уверены, что в данный момент спрайт не изображается. ВЫБОР КАНАЛА DMA И УСТАНОВКА УКАЗАТЕЛЕЙ При выборе канала DMA для использования, вы должны учитывать желаемые цвета спрайта и его приоритет. Каждый канал DMA имеет два указателя для чтения управляющих слов и данных спрайта. Вы должны записать адрес структуры данных спрайта в эти указатели перед использованием спрайта во время обратного хода луча. Указатели называются SPRxPTH и SPRxPTL, где x - номер канала DMA. SPRxPTH содержит старшие 3 бита адреса, а SPRxPTL - младшие 16 бит. Самый младший бит в SPRxPTL игнорируется т.к. данные спрайта должны быть выровнены по границе слова. Как обычно, для записи указателей, вы можете записать длинное слово, содержащее адрес, в SPRxPTH. В следующем примере, процессор инициализирует указатель спрайта 0. Обычно это делается коппером. Адрес спрайта - $20000. MOVE.L #$20000,SPR0PTH+CUSTOM ;Запись $20000 в указатель спрайта 0 Указатели спрайта динамические. Это значит, что они увеличиваются при работе DMA и указывают сначала на управляющие слова, затем на слова данных, а затем на слова окончания данных. После чтения управляющих слов и сохранения их в других регистрах, начинается чтение слов данных. Прочитанные слова данных сохраняются в регистрах данных спрайтов и используются каналом DMA спрайта для изображения данных на экране. Для подробностей, касающихся того, как каналы DMA управляют изображением, см. раздел "Подробности работы железа" ниже. ПЕРЕУСТАНОВКА УКАЗАТЕЛЕЙ СПРАЙТОВ Для каждого кадра система автоматически считывает данные из структуры данных спрайта и изображает спрайт цветами, определенными в цветовых регистрах спрайта. Если вы хотите, чтобы спрайт изображался в течение последовательности кадров, вы должны переписывать содержимое указателей спрайта во время обратного хода луча. Это необходимо потому что во время изображения спрайтов указатели перемещаются по памяти. Си раздел "Выбор канала DMA и установка указателей" Перезапись указателей становится обязательной частью подпрограммы обратного хода луча, которая может выполняться коппером. ПРИМЕР ИЗОБРАЖЕНИЯ СПРАЙТА Этот пример изображает спрайт космического корабля в позиции V=65, H=128. Не забудьте подгрузить файл "hw_examples.i", находящийся в приложении J. ; Сначала откроем простой экран . ; LEA CUSTOM,a0 ; а0 на чипсет MOVE.W #$1200,BPLCON0(a0) ; Один битплан MOVE.W #$0000,BPL1MOD(a0) ; Модуль = 0 MOVE.W #$0000,BPLCON1(a0) ; Горизонтальный скроллинг = 0 MOVE.W #$0024,BPLCON2(a0) ; Спрайт имеет приоритет над ; экраном MOVE.W #$0038,DDFSTRT(a0) ; Начало выборки данных MOVE.W #$00D0,DDFSTOP(a0) ; Конец выборки данных ; Устанавливаем окно изображения MOVE.W #$2C81,DIWSTRT(a0) ; Начало окна изображения ; Верт позиция в старшем байте ; Гор позиция * 2 в младшем MOVE.W #$F4C1,DIWSTOP(a0) ; Конец окна изображения ; Верт позиция в старшем байте ; Гор позиция * 2 в младшем ; ; Устанавливаем цветовые регистры ; MOVE.W #$0008,COLOR00(a0) ; Задний план = темно синий MOVE.W #$0000,COLOR01(a0) ; Передний план = черный MOVE.W #$0FF0,COLOR17(a0) ; Цвет 17 = желтый MOVE.W #$00FF,COLOR18(a0) ; Цвет 18 = голубой MOVE.W #$0FOF,COLORl9(a0) ; Цвет 19 = фиолетовый ; ; Перемещаем копперлист в $20000. ; MOVE.L #$20000,a1 ; A1 - куда LEA COPPERL(pc),a2 ; A2 - откуда CLOOP: MOVE.L (a2),(a1)+ ; Перемещаем длинное слово CMP.L #$FFFFFFFE,(a2)+ ; Проверка на конец BNE CLOOP ; Цикл ; ; Перемещаем спрайт в $25000. ; MOVE.L #$25000,a1 ; A1 - куда LEA SPRITE(pc),a2 ; A2 - откуда SPRLOOP: MOVE.L (a2),(a1)+ ; перемещаем длинное слово CMP.L #$00000000,(a2)+ ; Проверка на конец спрайта BNE SPRLOOP ; Цикл ; ; Теперь создадим пустой спрайт в $30000. Поскольку активизируются ; все 8 спрайтов, а мы используем только 1, оставшиеся спрайты должны ; указывать на пустой спрайт ; MOVE.L #$00000000,$30000 ; Записываем... ; ; Указываем копперу на копперлист MOVE.L #$20000,COP1LC(a0) ; ; Закрашиваем битплан $FFFFFFFF. ; MOVE.L #$21000,a1 ; A1 на битплан MOVE.W #l999,d0 ; 2000-1(для dbf) = 8000 байт FLOOP MOVE.L #$FFFFFFFF,(al)+ ; Перемещаем длинное слово $FFFFFFFF DBF d0,FLOOP ; Цикл. ; ; Включаем DMA. ; MOVE.L #$20000,d0 ; Стартуем коппер с адреса $20000 MOVE.L d0,COPJMP1(a0) ; MOVE.W #$83A0,DMACON(a0) ; DMA битпланов, коппера и ; спрайтов RTS ; Возврат ; ; Это копперлист для одного битплана и 8 спрайтов ; Битплан расположен в $21000. ; Нулевой спрайт расположен в $25000; все остальные в $30000 ; COPPERL: DC.W BPL1PTH,$0002 ; Указатель на 1й битплан $21000 DC.W BPL1PTL,$1000 DC.W SPR0PTH,$0002 ; Спрайт 0 = $25000 DC.W SPR0PTL,$5000 DC.W SPR1PTH,$0003 ; Спрайт 1 = $30000 DC.W SPR1PTL,$0000 DC.W SPR2PTH,$0003 ; Спрайт 2 = $30000 DC.W SPR2PTL,$0000 DC.W SPR3PTH,$0003 ; Спрайт 3 = $30000 DC.W SPR3PTL,$0000 DC.W SPR4PTH,$0003 ; Спрайт 4 = $30000 DC.W SPR4PTL,$0000 DC.W SPR5PTH,$0003 ; Спрайт 5 = $30000 DC.W SPR5PTL,$0000 DC.W SPR6PTH,$0003 ; Спрайт 6 = S30000 DC.W SPR6PTL,$0000 DC.W SPR7PTH,$0003 ; Спрайт 7 = $30000 DC.W SPR7PTL,$0000 DC.W $FFFF,$FFFE ; Конец копперлиста ; ; Данные для спрайта космического корабля. Его координаты V-65 и H-128 ; SPRITE: DC.W $6D60,$7200 ; VSTART, HSTART, VSTOP DC.W $0990,$07E0 ; Первая пара слов данных DC.W $13C8,$0FF0 DC.W $23C4,$1FF8 DC.W $13C8,$0FF0 DC.W $0990,$07E0 DC.W $0000,$0000 ; Конец данных спрайта ПЕРЕМЕЩЕНИЕ СПРАЙТОВ Спрайт, выводимый в автоматическом режиме, может быть перемещен заданием координат в структуре данных. Для каждого кадра данные перечитываются и спрайт изображается снова. Следовательно, если изменить координаты спрайта перед его изображением, он появится на новом месте. Вы должны соблюдать осторожность при перемещении спрайтов (т.е. изменении управляющих слов) в то-же самое время, когда система читает данные о размещении объекта. Может получиться так, что система прочитает начальный координаты, относящиеся к одному кадру, а конечные координаты - к следующему кадру. Это вызове сбой и может разрушить экран. Следовательно, изменение управляющих слов надо производить тогда, когда система не пытается читать данные. Для этого подходит период обратного хода луча и перемещение спрайтов становится частью копперлиста как показано в примере ниже. Поскольку спрайты двигаются по экрану, они могут сталкиваться с любым планом или с обоими планами. Вы можете использовать способность чипсета определять эти столкновения и использовать это для получения специальных эффектов. Кроме того, обнаружение столкновений можно использовать для удержания движущегося объекта в определенных экранных границах. Подробнее обнаружение столкновений описано в главе 7, "Управление чипсетом" В этом примере, спрайт космического корабля перемещается по экрану, изменяя направление при столкновении с границами экрана. Структура данных, содержащая VSTART и HSTART находится по адресу $25000. VSTOP находится по адресу $25002. Для перемещения спрайта производится запись по этим адресам. Каждый кадр VSTART и HSTART увеличиваются или уменьшаются на 1. Затем вычисляется новая позиция VSTOP, равная новой позиции VSTART + 6. MOVE.B #151,d0 ; Инициализируем горизонтальный счетчик MOVE.B #194,d1 ; Инициализируем вертикальный счетчик MOVE.B #64,d2 ; Инициализируем горизонтальную позицию MOVE.B #44,d3 ; Инициализируем вертикальную позицию MOVE.B #1,d4 ; Инициализируем горизонтальное приращение MOVE.B #1,d5 ; Инициализируем вертикальное приращение ; ; Ждем начала прорисовки экрана. ; LEA CUSTOM,a0 ; База чипсета VLOOP: MOVE.B VHPOSR(a0),d6 ; Читаем вертикальную позицию луча. ; Этот код используется только для режима PAL. CMP.B #$20,d6 ; Сравниваем с концом экрана PAL. BNE.S VLOOP ; Цикл, если не конец. ; Иначе используйте следующий код: ; VLOOP: ; MOVE.W INTREQR(a0),d6 ; Читаем регистр запроса прерываний ; AND.W #$0020,d6 ; Маскируем все биты, кроме VBLANK ; BEQ VLOOP ; Цикл, пока бит не станет 1 ; MOVE.W #$0020,INTREQ(a0) ; Ставим обратно ADD.B d4,d2 ; Изменяем горизонтальную позицию SUBQ.B #1,d0 ; Уменьшаем горизонтальный счетчик BNE L1 MOVE.B #151,d0 ; Если 0, восстанавливаем 151 EOR.B #$FE,d4 ; Меняем знак приращения L1: MOVE.B d2,$25001 ; Записываем новое значение HSTART ADD.B d5,d3 ; Изменяем вертикальную позицию SUBQ.B #1,d1 ; Уменьшаем вертикальный счетчик BNE L2 MOVE.B #194,d1 ; Если 0, восстанавливаем 194 EOR.B #$FE,d5 ; Меняем знак приращения L2: MOVE.B d3,$25000 ; Записываем новое значение VSTART MOVE.B d3,d6 ; Вычисляем новое значение VSTOP ADD.B #6,d6 ; В данном примере VSTOP равен VSTART+6 MOVE.B d6,$25002 ; Записываем новый VSTOP BRA VLOOP ; Бесконечный цикл ИСПОЛЬЗОВАНИЕ ВСЕХ 8-МИ СПРАЙТОВ Для использования всех остальных спрайтов надо создать для них структуры данных и, открыв экран как в предыдущем разделе, записать в указатели SPR1PRH и SPR1PTL адрес первого спрайта, в SPR2PTH и SPR2PTL - адрес второго спрайта и т.д. ПРИМЕЧАНИЕ Когда вы включаете DMA спрайтов для одного спрайта, DMA включается для всех спрайтов и переводит их в автоматический режим. Поэтому вам не надо повторно включать DMA. Перед включением DMA все 8 указателей спрайтов должны быть проинициализированы: для используемых спрайтов - адресами структур данных, а для неиспользуемых - нулевым спрайтом. Неинициализированный спрайт может являться причиной появления на экране "духа" спрайта. Запомните, что некоторые спрайты могут стать недоступны, если для изображения плейфилда используются дополнительные циклы DMA, например, при использовании широких плейфилдов или при горизонтальном скроллинге (см рис 6-9). Распределение времени между каналами DMA) Кроме того, каждая пара спрайтов использует различные регистры цвета, как показано в таблице 4-3 Табл. 4-3: Цветовые регистры для пар спрайтов Номер спрайта Цветовой регистр 0 и 1 17-19 2 и 3 21-23 4 и 5 25-27 6 и 7 29-31 ПРИОРИТЕТ СПРАЙТОВ Когда вы используете больше, чем 1 спрайт, необходимо принимать во внимание видео приоритет спрайтов, т.е. порядок появления спрайтов на экране. Каждый спрайт имеет фиксированный видео приоритет относительно всех остальных. Спрайты с меньшим номером имеют самый высокий приоритет и изображаются поверх спрайтов с большим номером. Это показано на рис. 4-8 ПРИМЕЧАНИЕ В главе 7 "Управление чипсетом" приоритеты спрайтов рассмотрены более подробно. ____ __|_ 7| __|_ 6|__| __|_ 5|__| __|_ 4|__| __|_ 3|__| __|_ 2|__| __|_ 1|__| | 0|__| |____| Рис. 4-8: Приоритеты спрайтов ПОВТОРНОЕ ИСПОЛЬЗОВАНИЕ СПРАЙТОВ Каждый из 8 каналов DMA может генерировать более, чем один независимый объект. Таким образом на экране могут одновременно присутствовать более 8 объектов или, если вы используете перекрывающиеся или объединенные спрайты для создания сложных изображений, меньшее количество. Вы можете повторно использовать DMA канал через некоторое время, как показано на рис 4-9. рис. 4-9: Пример повторного использования спрайтов При простом использовании спрайта в конец структуры данных записываются 2 нулевых слова для остановки работы DMA. Для повторного использования этого канала, эти 2 нулевых слова заменяются на полную структуру данных другого спрайта, который будет изображаться в позиции, ниже текущей. Два нулевых слова размещаются после последней структуры данных, выводимой на экран при помощи данного канала DMA. Рисунок 4-10 показывает структуру данных, описывающую картинку, показанную на рис 4-9 Список спрайтов ------\ _ Данные, ________________________________ | / описывающие Увеличение |________________________________| | / первое адресов |________________________________| |/ использование в ________________________________ | спрайта памяти |________________________________| | по |________________________________| | вертикали | _________ | | _________ | | _________ | | ________________________________ | | |________________________________| | | |________________________________| | | -----/ | | -----\ _ Данные, | ________________________________ | / описывающие | |________________________________| | / второе использ | |________________________________| |/ овавние спрайта | ________________________________ | по вертикали | |________________________________| | Вертикальная | |________________________________| | координата | _________ | должна быть как | _________ | минимум на 1 | _________ | больше,чем \|/ ________________________________ | конец первого V |________________________________| | спрайта |________________________________| |\ | \ -----/ \_ Слова конца данных завершают использование этого спрайта Рис 4-10: Структура данных для повторного использования спрайта Единственное ограничение на повторное использование спрайта во время одного кадра это то, что нижняя линия одного спрайта должна отстоять как минимум на 1 пиксель от верхней линии другого спрайта. Это необходимо потому, что на каждый канал DMA отводится только 2 цикла шины, которые нужны для выборки управляющих слов второго спрайта. Следующий пример выводит на экран спрайт космического корабля, а затем выводит его еще раз как второй объект. В этом примере дана только структура данных спрайта, основная программа такая-же, как в предыдущем примере. Для изображения спрайта в нормальной палитре лучше установить регистры цвета как показано в этом примере. LEA CUSTOM,a0 MOVE.W #$0F00,COLOR17(a0) ; Цвет 17 красный MOVE.W #$0FF0,COLOR18(a0) ; Цвет 18 желтый MOVE.W #$0FFF,COLORl9(a0) ; Цвет 19 белый SPRITE: DC.W $6D60,$7200 DC.W $0990,$07E0 DC.W $13C8,$0FF0 DC.W $23C4,$1FF8 DC.W $13C8,$0FF0 DC.W $0990,$07E0 DC.W $8080,$8D00 ; VSTART, HSTART, VSTOP для второго DC.W $1818,$0000 ; спрайта DC.W $7E7E,$0000 DC.W $7FFE,$0000 DC.W $FFFF,$2000 DC.W $FFFF,$2000 DC.W $FFFF,$3000 DC.W $FFFF,$3000 DC.W $7FFE,$1800 DC.W $7FFE,$0C00 DC.W $3FFC,$0000 DC.W $0FF0,$0000 DC.W $03C0,$0000 DC.W $0180,$Ї0000 DC.W $0000,$0000 ; Конец данных спрайта ПЕРЕКРЫВАЮЩИЕСЯ СПРАЙТЫ Для более сложных или более больших объектов можно использовать перекрывающиеся спрайты. Это значит, что спрайты просто имеют одинаковые или близкие координаты. Из-за существования приоритетов спрайтов один спрайт изображается перед другим. Следовательно, при конструировании экрана с перекрывающимися спрайтами проследите, чтобы передний спрайт имел меньший номер, чем задний. Например, на рис 4-11, клетка изображается спрайтом с меньшим номером, чем обезьяна. Рис. 4-11: Перекрывающиеся спрайты Вы можете создавать более широкие изображения, просто размещая спрайты рядом друг с другом. Рисунок 4-12 показывает спрайт космического корабля и способ увеличения его в 2 раза, используя 2 спрайта. (128,65) o_____________________ | _| |_ | | _| |_ | | |_ _| | | |_ _| | |______|________|_____| (128,65) (144,65) o_____________________o_____________________ | | | | | | __| | |__ | | | | | | | __| | |__ | | | | | | | |__ | __| | | | | | | | |__ | __| | | | | | | |_________|___________|__________|__________| Sprite 0 Sprite 1 Рис 4-12: Размещение спрайтов рядом. ОБЪЕДИНЕННЫЕ СПРАЙТЫ Вы можете создавать спрайты, имеющие 15 цветов плюс прозрачный, используя объединение спрайтов. Для этого необходимо: - Используя 2 канала на спрайт, создать спрайты одинакового размера и разместить их в одинаковых координатах. - Установить бит, называемый ATTACH в управляющем слове второго спрайта. 15 цветов выбираются из полного диапазона цветовых регистров, доступных спрайтам: с 17 до 31. Дополнительные цвета получаются за счет того, что каждый пиксель состоит из 4 бит, а не из 2х, как в нормальных, необъединенных спрайтах. Каждый спрайт в паре объединенных спрайтов добавляет 2 бита к цвету спрайта. Например, если вы используете объединенные спрайты номер 0 и 1, слова данных этих спрайтов для первой строки объединяются в данные для первой строки объединенного спрайта. Спрайты могут объединяться в следующих комбинациях: Спрайт 1 и спрайт 0 Спрайт 3 и спрайт 2 Спрайт 5 и спрайт 4 Спрайт 7 и спрайт 6 Любой или все эти объединенные спрайты могут быть активизированы одновременно. Например, добавим больше цветов к спрайту космического корабля, используя объединение спрайтов 0 и 1. На рисунке изображено 5 цветов плюс прозрачный. 0000154444510000 0001564444651000 0015676446765100 0001564444651000 0000154444510000 Для правильного выбора цветов спрайта первая строка требует 4 слова данных, показанных в табл. 4-4 Номер пикселя 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ---------------------------------------------------------------------- Слово 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Слово 2 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 Слово 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Слово 4 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 Спрайт с более высоким номером (в нашем примере, номер 1) содержит старшие (левые) биты двоичного номера цвета, следовательно, слова, приведенные выше, записываются в структуры данных спрайтов следующим образом: Слово 1 Спрайт 1 Старшее слово Слово 2 Спрайт 1 Младшее слово Слово 3 Спрайт 0 Старшее слово Слово 4 Спрайт 0 Младшее слово Расположение слов в памяти показано на рис 4-7. Запомните, данные содержатся в двух структурах данных Получающееся двоичное число от 0 до 15 указывает на один из цветовых регистров 17-31 как показано в табл. 4-5 Табл. 4-5: Цветовые регистры объединенных спрайтов Десятичный Двоичный Номер цветового номер номер регистра 0 0000 16 * 1 0001 17 2 0010 18 3 0011 19 4 0100 20 5 0101 21 6 0110 22 7 0111 23 8 1000 24 9 1001 25 10 1010 26 11 1011 27 12 1100 28 13 1101 29 14 lll0 30 15 1111 31 * Не используется. Изображается прозрачный пиксель Объединение спрайтов работает только тогда, когда в структуре данных нечетного спрайта во втором управляющем слове, включен 7й бит - ATTACH. В нашем примере надо включить 7й бит во втором управляющем слове первого спрайта. При передвижении объединенных спрайтов необходимо сохранять их относительное расположение. Если произойдет сдвиг, то спрайты вернутся назад в нормальный режим (3 цвета + прозрачный), при этом цвета спрайтов будут отличаться от цветов этих-же спрайтов в нормальном режиме. Спрайт с меньшим номером будет использовать цвета 17-19, а спрайт с большим номером - 20, 24 и 28. Следующая структура шестицветного космического корабля состоит из 2х объединенных спрайтов. SPRITE0: DC.W $6D60,$7200 ;VSTART = 65, HSTART = 128 DC.W $0C30,$0000 ;Первое слово данных DC.W $1818,$0420 DC.W $342C,$0E70 DC.W $1818,$0420 DC.W $0C30,$0000 DC.W $0000,$0000 ;Конец первого спрайта SPRITE1: DC.W $6D60,$7280 ;То-же, что и в первом спрайте + attach DC.W $07E0,$0000 ;Первое слово данных второго спрайта DC.W $0FF0,$0000 DC.W $1FF8,$0000 DC.W $0FF0,$0000 DC.W $07E0,$0000 DC.W $0000,$0000 ;Конец второго спрайта РУЧНОЙ РЕЖИМ Почти всегда можно использовать спрайты в автоматическом режиме. Однако, иногда полезно загружать регистры спрайтов напрямую одним из процессоров. Спрайты могут активизироваться вручную, когда они не используются каналом DMA. Спрайт, показывающий изображение в автоматическом режиме в верхней части экрана может быть использован в ручном режиме в нижней части экрана. Ручной режим спрайтов может быть активизирован даже при выключенном DMA спрайтов. Изображение спрайтов в ручном режиме производится записью регистров данных спрайта - SPRxDATB и SPRxDATA, именно в такой последовательности. SPRxDATA записывается последним, потому что запись в этот регистр активизирует изображение спрайта при следующем сравнении на горизонтальной линии. После этого записанные данные будут изображаться каждую строку, в горизонтальной позиции, определяемой битами горизонтальной позиции в регистрах SPRxPOS и SPRxCTL. Если данные не изменяются, результатом будет вертикальная полоса. Если данные перезагружаются каждую строку, может быть создано сложное изображение. Изображение спрайта может быть остановлено записью в регистр SPRxCTL. Записью в регистр SPRxPOS можно вручную передвигать спрайт горизонтально, даже во время автоматического вывода спрайта. ПОДРОБНОСТИ РАБОТЫ ЖЕЛЕЗА Спрайты формируются блоком, показанном на рис. 4-13. На нем показано, как пары слов данных становятся пикселами, изображаемыми на экране. Элементы цикла формирования спрайта объяснены ниже. - Регистры данных спрайта. Регистры SPRxDATA и SPRxDATB содержат битовую структуру, определяющую одну горизонтальную строку спрайта для каждого из 8 спрайтов. Строка спрайта имеет ширину 16 пикселей и задается двумя словами, что дает три цвета плюс прозрачный. - Параллельно-последовательный преобразователь. Каждый бит данных спрайта передается в блок выбора цвета индивидуально, тогда, когда соответствующий ему пиксель изображается на экране. Сразу после того, как данные загружаются в регистры данных спрайта, каждый параллельно-последовательный преобразователь начинает выдвигать биты за пределы регистра данных, начиная с самого левого бита. Цикл сдвига происходит за время изображения пикселя низкого разрешения и продолжается до тех пор, пока все 16 бит данных не будут переданы на изображение. Сдвиги и вывод данных не начинаются до тех пор, пока не произойдет следующая загрузка преобразователя из регистра данных. Поскольку видео изображение прорисовывается видео лучем слева направо, битовое изображение данных спрайта точно соответствует изображению, появляющемуся на экране (старшие биты слева) - Последовательные видео данные спрайта. Данные спрайта идут в блок приоритетов для обработки указанных приоритетов между спрайтами и плейфилдами. Более подробно установка приоритетов рассмотрена в главе 7 "Управление чипсетом" - Регистры позиции спрайтов. Эти регистры, называемые SPRxPOS содержат значение горизонтальной (X) и вертикальной (Y) позиции для каждого из 8 спрайтов. - Управляющие регистры. Эти регистры, называемые SPRxCTL содержат позицию останова каждого спрайта, и признак объединения спрайтов. - Счетчик луча. Он дает системе данные о текущем положении видео луча, рисующего изображение. - Компаратор. Это устройство сравнивает значение счетчика луча с значением Y координаты, записанным в регистре SPRxPOS. Если луч достиг позиции, в которой должен начинаться спрайт, компаратор выдает сигнал параллельно-последовательному преобразователю и начинается изображение спрайта. _________________ |Счетчик луча | |(Гориз. позиция)| ____________________ |_________________| |загрузка SPRxDATA | \ / | (68000 or DMA) | ________\/_______ |____________________| | | Равно | | Компаратор |______ ___________________ | |_________________| | |загрузка SPRxPOS | | /\ ________|______| (68000 or DMA) | | _______/__\____|_ | |___________________| | | | | | | SPRxPOS (Гориз.)| | | |_________________| | <-"Включение спрайта"-> | /\ ________|____________________________o ____________/ \ | |___ _______ | | | | | И |-| | | | | ___________ | | \__/ |--------|Q S|-----| || \ / | | | | _____________ || ________\/_____|_ | ----|Q R|--|SPRxCTL load | || | | | |_______| | decode | || | SPRxDATA | | |(68000 or DMA| || |_________________| ____o |_____________| || \ / | | || ______\/_______|_ | _____ ______________ || ____|параллельн-послед| | | |Последов видео| || __|__ |преобразователь |-----------------> | |данные спрайта| || ___ |_________________| | | | | || _ _________________ | | |Вывод данных в| || |параллельн-послед| | | |блок видео | || |преобразователь |-----------------> | | приоритетов | || |_________________| | _____| |______________| || /\ | | || _______/__\______ |____| || | | || | SPRxDATB | || |_________________| ____________________ || /\ ^ |Загрузка SPRxDATB | || / \ |___________|(68000 или DMA) | ||_______| | |____________________| | __________| || ||______________________________________________________________________ |_______________________________________________________________________ Шина данных Рис. 4-13: Блок формирования спрайтов Теперь рассмотрим работу по формированию спрайтов более подробно: - Запись в управляющий регистр спрайтов выключает горизонтальный компаратор. Это предотвращает любой вывод регистров данных в преобразователь или на экран, пока не завершено формирование регистров. - Запись в регистр данных А включает компаратор. Это разрешает вывод на экран, когда горизонтальная позиция видео луча сравняется со значением в регистре координат. - При включенном компараторе данные спрайта пересылаются на экран так, что левый верхний угол спрайта размещается в позиции, определенной в регистре SPRxPOS. - Пока компаратор остается включенным, текущее содержимое регистров данных будет выводится в заданной горизонтальной позиции. - Данные в регистрах данных не изменяются до тех пор, пока они не перепишутся либо вручную, либо с помощью DMA. Устройства, описанные выше, выполняют автоматическое изображение спрайта следующим образом: При включении автоматического режима указатели спрайта (состоящие из SPRxPTL и SPRxPTH) используются для чтения первых 2х слов из структуры данных спрайта. Эти слова содержат координаты начала и конца спрайта и записываются в регистры SPRxPOS и SPRxCTL. После этого указатели указывают на первое слово данных (младшее слово первой строки спрайта) Запись в регистр SPRxCTL выключает спрайт. Теперь канал DMA ждет достижения вертикальным счетчиком луча значения, равного VSTART (по Y), содержащегося в регистре SPRxPOS. Когда эти значения совпадут, система включит доступ к данным спрайта. Канал DMA спрайта проверяет содержимое VSTOP (координату линии после последней линии спрайта, в регистре SPRxCTL) и VSTART (в регистре SPRxPOS) для расчета количества линий, которое необходимо выбрать из памяти. На каждую строку выбирается по 2 слова, и записываются в регистры данных спрайта. Первое слово сохраняется в регистре SPRxDATA, а второе слово в SPRxDATB. Выборка и сохранение каждой горизонтальной линии спрайта происходит во время горизонтального обратного хода луча намного левее начала экрана. При этом включаются горизонтальные компараторы и при достижении горизонтальным счетчиком луча значения, сохраненного в HSTART регистра SPRxPOS спрайт выводится на экран. Если разность VSTOP - VSTART равна 0, вывод спрайта не происходит. Выбирается следующая пара слов, но вместо регистров данных, она сохраняется в SPRxPOS и SPRxCTL. Если спрайт используется только один раз за кадр, эти два слова должны содержать нули, что останавливает вывод спрайта. Таким образом при автоматическом выводе спрайта под управлением DMA в течение каждой строки экрана выводится одна линия спрайта. ОБОБЩЕНИЕ РЕГИСТРОВ СПРАЙТА Система содержит 8 наборов регистров, отвечающих за спрайты. Каждый набор состоит из 5 регистров. Здесь будут рассмотрены регистры нулевого спрайта, поскольку все остальные отличаются только номером в названии регистра. УКАЗАТЕЛИ Указатели это регистры, которые используются системой для указания на текущие используемые данные. Во время изображения экрана указатели увеличиваются так, что они всегда указывают на текущие данные. В связи с этим указатели должны перезаписываться во время каждого обратного хода луча. SPR0PTH и SPR0PTL Эта пара регистров содержит 32х битный адрес структуры данных нулевого спрайта. Для остальных спрайтов имена регистров указателей следующие: SPR1PTH SPR1PTL SPR2PTH SPR2PTL SPR3PTH SPR3PTL SPR4PTH SPR4PTL SPRSPTH SPRSPTL SPR6PTH SPR6PTL SPR7PTH SPR7PTL УПРАВЛЯЮЩИЕ РЕГИСТРЫ SPR0POS Это регистр позиции нулевого спрайта. Слово, записанное в этот регистр задает координаты изображения верхнего левого угла спрайта. Это значит, что старший бит первого слова данных будет размещен на экране в этих координатах. ПРИМЕЧАНИЕ Спрайты могут размешаться на координатной сетке 320х200 или 320х256 для PAL. Разрешение спрайта не зависит от разрешения плейфилда. Распределение бит этого регистра следующее: - Биты 15-8 определяют вертикальную стартовую позицию: V7-V0 - Биты 7-0 определяют горизонтальную стартовую позицию: H8-H1 ПРИМЕЧАНИЕ Обычно этот регистр используется только каналом DMA, за исключением организации изображения спрайтов в ручном режиме. SPR0CTL Обычно этот регистр используется только каналом DMA, за исключением организации изображения спрайтов в ручном режиме. Он содержит информацию, используемую при выборке данных. Распределение бит этого регистра следующее: - Биты 15-8 содержат вертикальную координату конца спрайта, V7-V0. - Бит 7 - бит ATTACH. Этот бит имеет значение только для спрайтов с нечетными номерами. Он показывает, что этот спрайт в паре с соответствующим ему четным спрайтом (0 и 1, 2 и 3, 4 и 5, 6 и 7) образует объединенный 15-ти цветный спрайт. Нечетный спрайт содержит старшие биты двоичного кода цвета спрайта В объединенном режиме объединенные спрайты обычно перемещаются вместе под управлением процессора. Тем не менее, объединенные спрайты сохраняют способность независимого перемещения. - Биты 6-3 зарезервированы для дальнейшего использования (должны быть равны 0) - Бит 2 - бит V8 вертикальной стартовой позиции - Бит 1 - бит V8 вертикальной позиции конца спрайта - Бит 0 - бит H0 горизонтальной стартовой позиции Для остальных спрайтов имена управляющих регистров следующие: SPR1POS SPR1CTL SPR2POS SPR2CTL SPR3POS SPR3CTL SPR4POS SPR4CTL SPR5POS SPRSCTL SPR6POS SPR6CTL SPR7POS SPR7CTL РЕГИСТРЫ ДАННЫХ Обычно эти регистры используется только каналом DMA, за исключением организации изображения спрайтов в ручном режиме. В них хранятся данные спрайта, переданные DMA. SPR0DATA, SPR0DATB регистры данных для спрайта 0 SPR1DATA, SPR1DATB регистры данных для спрайта 1 SPR2DATA, SPR2DATB регистры данных для спрайта 2 SPR3DATA, SPR3DATB регистры данных для спрайта 3 SPR4DATA, SPR4DATB регистры данных для спрайта 4 SPR5DATA, SPR5DATB регистры данных для спрайта 5 SPR6DATA, SPR6DATB регистры данных для спрайта 6 SPR7DATA, SPR7DATB регистры данных для спрайта 7 ОБОБЩЕНИЕ ЦВЕТОВЫХ РЕГИСТРОВ СПРАЙТОВ Слова данных спрайта используются для выбора цвета пикселя спрайта из системных регистров цвета как показано в следующих таблицах. Для простых спрайтов цвета берутся из следующих регистров в зависимости от номера спрайта и комбинации бит, определяемой словами данных спрайта. Табл 4-6: Цветовые регистры для простых спрайтов Простой спрайт Цветовой Спрайт Значение регистр 0 или 1 00 Не используется * 01 17 10 18 11 19 2 или 3 00 Не используется * 01 21 10 22 11 23 4 или 5 00 Не используется * 01 25 10 26 11 27 6 или 7 00 Не используется * 01 29 10 30 11 31 * Не используется. Изображается прозрачный пиксель. Для объединенных спрайтов цвета выбираются из следующих регистров: Табл. 4-7: Цветовые регистры для объединенных спрайтов ОБЪЕДИНЕННЫЕ СПРАЙТЫ Цветовой Значение Регистр 0000 Используется прозрачный цвет 0001 17 0010 18 0011 19 0100 20 0101 21 0110 22 0111 23 1000 24 1001 25 1010 26 1011 27 1100 28 1101 29 1110 30 1111 31 ВЗАИМОДЕЙСТВИЕ МЕЖДУ СПРАЙТАМИ И ДРУГИМИ ОБЪЕКТАМИ В главе 7, "Управление чипсетом" рассказывается как назначаются приоритеты между плейфилдами и спрайтами и как можно обнаружить столкновения между плейфилдами и спрайтами и между плейфилдами. |