THE
COMPLETE AMIGA HARDWARE
REFERENCE MANUAL
Глава 7 Управление чипсетом ВВЕДЕНИЕ В этой главе обсуждается управление чипсетом Амиги. Рассматриваются следующие темы: - Как установить приоритеты между экраном и спрайтами - Как можно обнаружить столкновения между спрайтами - Как можно обнаружить столкновения между спрайтами и другими объектами - Как управлять прямым доступом в память - Как управлять прерываниями - Как управлять сбросом и ранней загрузкой ВИДЕО ПРИОРИТЕТЫ Вы можете управлять приоритетами различных объектов на экране. Этот раздел показывает как приоритет планов изображения может быть изменен относительно приоритета спрайтов ФИКСИРОВАННЫЙ ПРИОРИТЕТ СПРАЙТОВ Вы не можете изменять относительный приоритет спрайтов. Они будут всегда появляться друг за другом (спрайт с меньшим номером перед спрайтом с большим номером) Это показано на рис. 7-1. Каждый квадрат обозначает спрайт с номером, указанным внутри квадрата. ___ __| 7| __| 6|__| __| 5|__| __| 4|__| __| 3|__| __| 2|__| __| 1|__| | 0|__| |___| Рис. 7-1: Внутри-спрайтовые приоритеты КАК ГРУППИРУЮТСЯ СПРАЙТЫ Для установки приоритетов с экранами и столкновений спрайты группируются в 4 группы по 2 спрайта в каждой. Эти группы таковы: Спрайты 0 и 1 Спрайты 2 и 3 Спрайты 4 и 5 Спрайты 6 и 7 ПОНЯТИЕ ВИДЕО ПРИОРИТЕТА Концепцию видео приоритетов легко понять, если представить 4 пальца одной руки как пары спрайтов и два пальца другой руки как два плана. Так как вы не можете изменять порядок пальцев на руке, так-же вы не можете менять относительный приоритет спрайтов. Приоритетов между планами и спрайтами столько, сколькими способами вы можете переплести 2 раздвинутых пальца одной руки и 4 раздвинутых пальца другой. Точно также вы можете размещать планы за или перед спрайтами. Это показано на рис. 7-2 Рис. 7-2: Аналогия видео приоритетов. Для каждого плана возможно пять позиций относительно групп спрайтов: 0 - перед спрайтами 0 и 1 1 - между спрайтами 0,1 и спрайтами 2,3 2 - между спрайтами 2,3 и спрайтами 4,5 3 - между спрайтами 4,5 и спрайтами 6,7 4 - позади спрайтов 6 и 7 Точно также может быть расположен и второй план. Эти номера определяют приоритет спрайтов и планов и записываются в регистр управления приоритетами. Вы можете также управлять приоритетами планов. РЕГИСТР УСТАНОВКИ ПРИОРИТЕТОВ Регистр BPLCON2 позволяет определить приоритет объектов относительно друг друга. Обычно первый план расположен перед вторым. Бит PF2PRI меняет их местами, располагая второй план перед первым. Установка приоритетов показана в табл. 7-1 Табл. 7-1: Биты в регистре BPLCON2 Номер бита Название Функция 15-7 Не используется (содержит 0) 6 PF2PRI Приоритет второго плана 5-3 PF2P2 - PF2P0 Приоритет спрайтов и второго плана 2-0 PF1P2 - PF1P0 Приоритет спрайтов и первого плана Двоичные значения в битах PF1P2-PF1P0 определяет местоположение первого плана в приоритетной цепочке как показано в табл. 7-2. Это соответствует описанию, данному в предыдущем разделе. ПРИМЕЧАНИЕ PF2P2 - PF2P0, биты 5-3, приоритет для нормального (не dual) экрана Табл. 7-2: Приоритеты планов в зависимости от значения бит PF1P2-PF1P0 Значение Размещение (от более приоритетного к менее приоритетному) 000 PF1 SP01 SP23 SP45 SP67 001 SP01 PF1 SP23 SP45 SP67 010 SP01 SP23 PF1 SP45 SP67 011 SP01 SP23 SP45 PFl SP67 100 SP01 SP23 SP45 SP67 PFl В этой таблице PF1 обозначает первый план, SPxy обозначает группу спрайтов (см. предыдущий раздел) Биты PF2P2-PF2P0 обозначают позицию второго плана и имеют точно такое-же значение как и для первого плана. Однако, бит PF2PRI определяет, какой из двух планов показывается впереди другого. Вот пример довольно необычного использования регистра BPLCON2: Биты 15-7 PF2PRI PF2P2-0 PF1P2-0 Значение 0s 1 010 000 Результатом будет следующий приоритет между планами и спрайтами: PF1 SP01 SP23 PF2 SP45 SP67 Другими словами там, где объекты перекрываются, первый план находится перед спрайтами 0 и 1, спрайты 0 - 3 находятся перед вторым планом, но второй план находится перед первым планом в тех местах, где он не перекрывается спрайтами 0 - 3. Рис. 7-3 показывает использование приоритетов экран/спрайт. Объект показанный на диаграмме как спрайт 0 может 'летать' по второму плану, но когда он пересекает первый план, то исчезает за ним. Результат этого - необычный эффект исчезания объекта при пересечении невидимой кромки первого плана. Рис. 7-3: Приоритеты экран/спрайт ОБНАРУЖЕНИЕ СТОЛКНОВЕНИЙ Вы можете использовать возможности железа для обнаружения столкновений между группами спрайтов, группой спрайтов и любым планом и между планами. Первый вид столкновений обычно используется в играх для обнаружения попадания ракеты в движущийся объект. Второй вид используется для удержания движущегося объекта в определенных границах экрана. Третий вид позволяет организовать часть одного плана в виде отдельного объекта, перемещаемого блиттером (в дополнение к спрайтам) и отслеживать столкновения этого объекта с другим планом (игровым полем) и спрайтами. КАК ОПРЕДЕЛЯЮТСЯ СТОЛКНОВЕНИЯ Видео выход формируется из данных для всех битпланов и спрайтов, которые объединяются в общий поток данных для изображения. Для каждого пикселя изображается цвет объекта с наибольшим приоритетом. Столкновение получается когда более чем один объект пытаются появиться в одном и том-же пикселе. Это будет устанавливать регистр столкновений. КАК ИНТЕРПРЕТИРОВАТЬ ДАННЫЕ СТОЛКНОВЕНИЯ Регистр столкновений, CLXDAT, только для чтения и его содержимое обнуляется после чтения. Биты регистра показаны в табл. 7-3. Табл. 7-3: Биты CLXDAT Номер бита Регистрируемое столкновение 15 не используется 14 Спрайт 4 (или 5) и спрайт 6 (или 7) 13 Спрайт 2 (или 3) и спрайт 6 (или 7) 12 Спрайт 2 (или 3) и спрайт 4 (или 5) 11 Спрайт 0 (или 1) и спрайт 6 (или 7) 10 Спрайт 0 (или 1) и спрайт 4 (или 5) 9 Спрайт 0 (или 1) и спрайт 2 (или 3) 8 Четные битпланы и спрайт 6 (или 7) 7 Четные битпланы и спрайт 4 (или 5) 6 Четные битпланы и спрайт 2 (или 3) 5 Четные битпланы и спрайт 0 (или l) 4 Нечетные битпланы и спрайт 6 (или 7) 3 Нечетные битпланы и спрайт 4 (или 5) 2 Нечетные битпланы и спрайт 2 (или 3) 1 Нечетные битпланы и спрайт 0 (или 1) 0 Четные битпланы и нечетные битпланы Примечание Числа в скобках обозначают спрайты, которые можно исключить из сравнения при определении столкновений с помощью регистра управления столкновениями, описанного ниже. Обнаружение столкновений не зависит от режима изображения (простой экран или dual-playfields). Столкновения обнаруживаются только путем определения включенных бит в четных и нечетных битпланах. Управляющий регистр определяет поведение битпланов при регистрации столкновений. УПРАВЛЕНИЕ ОБНАРУЖЕНИЕМ СТОЛКНОВЕНИЙ Регистр управления столкновениями, CLXCON, содержит биты, изменяющие определенные характеристики обнаружения столкновений. Эти биты показаны в табл. 7-4 Табл. 7-4: Биты CLXCON Bit Номер бита Имя Функция 15 ENSP7 Включить спрайт 7 (со спрайтом 6) 14 ENSPS Включить спрайт 5 (со спрайтом 4) 13 ENSP3 Включить спрайт 3 (со спрайтом 2) 12 ENSP1 Включить спрайт 1 (со спрайтом 0) 11 ENBP6 Включить битплан 6 10 ENBPS Включить битплан 5 9 ENBP4 Включить битплан 4 8 ENBP3 Включить битплан 3 7 ENBP2 Включить битплан 2 6 ENBP1 Включить битплан 1 5 MVBP6 Полярность для битплана 6 4 MVBPS Полярность для битплана 5 3 MVBP4 Полярность для битплана 4 2 MVBP3 Полярность для битплана 3 1 MVBP2 Полярность для битплана 2 0 MVBP1 Полярность для битплана 1 Биты 15-12 позволяют включать и исключать нечетные спрайты из обнаружения столкновений. Четные спрайты всегда участвуют в обнаружении Биты 11-6 включают или исключают определенный битплан из обнаружения столкновений Биты 5-0 позволяют определить полярность (условие ложности - истинности) бит, вызывающих столкновение. Например, можно зарегистрировать столкновение объекта с 'чем-нибудь зеленым' или 'с чем-нибудь синим' Эта возможность вместе с битами включения битпланов позволяет точно определить биты и их полярность для обнаружения столкновений. ПРИМЕЧАНИЕ Этот регистр только для записи. Если все битпланы выключены, то столкновение обнаруживается всегда ОПРЕДЕЛЕНИЕ ПОЗИЦИИ ЛУЧА Иногда возникает необходимость синхронизации 68000 с позицией луча. Это может потребоваться для обновления части экрана после прохождения луча по ней. Существует адрес для доступа к счетчикам позиции луча и вы можете определить его позицию и произвести необходимые операции, основываясь на этих данных. ПРИМЕЧАНИЕ Коппер способен наблюдать за позицией луча и автоматически производить операции с регистрами. Для подробностей см. раздел "Прерывания коппера" ниже и главу 2, "Коппер" Если вы используете световое перо, эти-же регистры используются для чтения позиции светового пера, взамен позиции луча. Более полно это описано в главе 8 "Интерфейсы" ИСПОЛЬЗОВАНИЕ СЧЕТЧИКА ПОЗИЦИИ ЛУЧА Для доступа к счетчикам позиции луча имеются 4 адреса. Их использование описано в табл. 7-5 Табл. 7-5: Содержимое счетчика позиции луча VPOSR Чтение Бит 15 LOF (Длинный кадр). Используется в интерлейсном режиме. Битв 14-1 Не используются Бит 0 Старший бит вертикальной позиции (V8). VHPOSR Чтение Биты 15-8 Младшие биты вертикальной позиции V7-V0 Биты 7-0 Горизонтальная позиция H8-H1. Горизонтальное разрешение 1/160я ширины экрана . VPOSW Запись См. VPOSR . VHPOSW Запись См. VHPOSR . Используются для синхронизации счетчиков с образцами Как обычно вы можете адресовать пары регистров VPOSR,VHPOSR и VPOSW, VHPOSW как длинные слова по адресам VPOSR и VPOSW. ПРЕРЫВАНИЯ В системе поддерживается полный набор прерываний процессора 68000. Различные виды прерываний, генерируемые железом транслируются в шесть из семи доступных прерываний 68000 с помощью контроллера прерываний. НЕМАСКИРУЕМОЕ ПРЕРЫВАНИЕ Седьмой уровень прерывания - немаскируемое прерывание. Линии этого прерывания IPL2 - IPL0 доступны на слоте расширения и могут использоваться для отладочных целей. МАСКИРУЕМЫЕ ПРЕРЫВАНИЯ Прерывания уровней 1 - 6 генерируются. Управляющий регистр в контроллере прерываний позволяет маскировать определенные источники, тем самым предотвращая генерацию ими прерываний 68000. ПОЛЬЗОВАТЕЛЬСКИЕ ВХОДЫ В СИСТЕМУ ПРЕРЫВАНИЙ Программное обеспечение разработано для правильной обработки всех прерываний с уровнями 1 - 6. Отдельные входы INT2* и INT6* 1 имеются на слоте расширения для использования картами расширения. Они известны как внешнее низко- и высокоуровневые прерывания. Эти входы присоединены к контроллеру прерываний и создают прерывания уровней 2 и 6 соответственно. 1 * обозначает низкий уровень активного сигнала РЕГИСТР УПРАВЛЕНИЯ ПРЕРЫВАНИЯМИ Имеются два регистра прерываний - разрешения (маска) и запроса (состояния). Каждый регистр имеет адреса для чтения и записи. Имена регистров следующие: INTENA Разрешение прерывания (маска) - только для записи. Установка или очистка определенных бит в INTENA. INTENAR Разрешение прерывания (маска) - только для чтения. Чтение содержимого INTENA. INTREQ Запрос прерывания (состояние) - только для записи. Используется процессором для генерации софтверных прерываний. Также используется для очистки флага запроса прерываний после обработки. INTREQR Запрос прерывания (состояние) - только для чтения. Содержит биты, включенные при запросе какого-либо устройства на обслуживание прерывания. Позиции бит в регистре запроса такие-же как и в регистре разрешения прерываний. Отличие регистров чтения от регистров записи заключается в том, что бит 15 не имеет значения для регистров чтения. УСТАНОВКА И ОЧИСТКА БИТ Ниже показано значение бит в регистрах управления прерываниями и описано как их использовать УСТАНОВКА И ОЧИСТКА Регистры прерываний, также, как и регистр управления DMA использует особый способ установки и очистки бит. Этот бит, номер 15, называется SET/CLR Когда вы хотите установить бит (сделать его равным 1) вы должны положить 1 в устанавливаемый бит и в бит 15 - SET/CLR Когда вы хотите очистить бит (сделать его равным 0) вы должны положить 1 в очищаемый бит, а 0 в бит 15 - SET/CLR Биты 14-0 - переключатели. Для выбора записывается 1 в один или несколько бит. Одновременно записывается 0 или 1 в бит 15 (SET/CLR) для очистки или установки выбранных бит. Те из бит 14-0, которые равны 0 не оказывают влияния на содержимое регистра. Если вы хотите установить одни биты и включить другие, вам придется выполнять запись 2 раза (один раз для установки бит, а другой - для очистки) МАСТЕР - БИТ Бит 14 в регистрах прерываний (INTEN) служит для разрешения прерываний. Если этот бит 0, это выключает все другие прерывания. Этот бит может использоваться для временного выключения всех прерываний. ПРИМЕЧАНИЕ Этот бит используется только для включения или выключения. Он не создает запросов на прерываний. ВНЕШНИЕ ПРЕРЫВАНИЯ Биты 13 и 3 регистра прерываний зарезервированы для внешних прерываний. Бит 13, EXTER, становится 1, когда на системный вход INT6* подается логический 0. Этот бит генерирует прерывание 6го уровня. Бит 3, PORTS, становится 1, когда на системный вход INT2* подается логический 0. Этот бит генерирует прерывание 2го уровня. ПРЕРЫВАНИЕ ОБРАТНОГО ХОДА ЛУЧА Бит 5, VERTB, вызывает прерывание на нулевой строке кадра изображения (в начале обратного хода луча). Системе часто требуется выполнить много различных задач в период обратного хода луча. Этими задачами могут быть обновление различных регистров - указателей, переписывание копперлиста и другие операции, управляющие системой. Минимальное время обратного хода луча - 20 горизонтальных линий в системе NTSC и 25 линий в PAL. Интервал начинается с 0й линии и заканчивается на 20й линии для NTSC или на 25й линии для PAL. После минимального интервала обратного хода луча вы можете управлять фактическим началом экрана используя регистр DIWSTRT (начало окна изображения) для увеличения эффективного времени обратного хода луча. Для подробностей см. главу 3 "Экраны" Если вы все еще желаете добавления времени к прерыванию обратного хода луча, вы можете использовать коппер для создания прерывания 3го уровня. Прерывание коппера может происходить после изображения последней строки экрана (после значения, определенного в регистре DIWSTOP) тем самым добавляя время к общему времени обработки обратного хода луча ПРЕРЫВАНИЕ КОППЕРА Бит 4, COPER, используется коппером для создания прерывания третьего уровня. Коппер может изменять содержимое любых бит этого регистра точно также, как и множества других регистров. Однако, этот бит специально зарезервирован для идентификации коппера как источника прерывания. Обычно этот бит используется когда вы хотите узнать, что луч достиг определенной позиции и предпринять какие-либо действия. АУДИО ПРЕРЫВАНИЯ Биты 10-7, AUD3 - 0 прикреплены к звуковым каналам. Они называются AUD3, AUD2, AUD1 и AUD0 и соответствуют каналам 3, 2, 1 и 0. Это прерывание четвертого уровня сигнализирует "блок данных закончился". когда звуковой канал DMA работает в автоматическом режиме прерывание появляется при доступе к последнему слову аудиоданных. В ручном режиме оно появляется когда аудио регистр готов принять очередное слово данных. Для подробностей, касающихся генерации прерывания и временных характеристик см. главу 5, "Звук" ПРЕРЫВАНИЕ БЛИТТЕРА Бит 6, BLIT, сигнализирует "блиттер закончил". Если этот бит 1, это обозначает, что блиттер закончил требуемый перенос данных и готов к принятию очередной задачи. Этот бит генерирует прерывание третьего уровня. ПРЕРЫВАНИЕ ДИСКА Биты 12 и 1 в регистре прерываний предназначены для дисковых прерываний. Бит 12, DSKSYN устанавливает регистр синхронизации в соответствии с дисковыми данными. Этот бит генерирует прерывание пятого уровня. Бит 1, DSKBLK показывает "дисковый блок завершен". Он используется для сигнализации того, что заданная задача была завершена дисковым DMA. Этот бит генерирует прерывание первого уровня. Для подробностей, касающихся генерации прерывания и пересылки данных см. главу 8, "Интерфейсы" ПРЕРЫВАНИЯ ПОСЛЕДОВАТЕЛЬНОГО ПОРТА Бит 11, RBF (входной буфер заполнен), сигнализирует о том, что входной буфер UART содержит данные, готовые для чтения. Этот бит генерирует прерывание 5 уровня. Бит 0, TBE (выходной буфер пуст), сигнализирует, что выходному буферу UART требуются данные и данные могут быть записаны в буфер. Этот бит генерирует прерывание 1 уровня. Приоритет Бит программного приоритета Название железа Описание 1 1 Программное прерывание SOFTINT 2 Дисковый блок завершен DSKBLK 3 Выходной буфер пуст TBE 2 4 Внешние INT2 & CIAA PORTS 3 5 Коппер COPER 6 Обратный ход луча VERTB 7 Блиттер закончил BLIT 4 8 Звуковой канал 2 AUD2 9 Звуковой канал 0 AUD0 10 Звуковой канал 3 AUD3 11 Звуковой канал 1 AUD1 5 12 Входной буфер заполнен RBF 13 Дисковая синхронизация DSKSYNC 6 14 Внешние INT6 & CIAB EXTER 15 Специальный (Мастер включен) INTEN 7 -- Немаскируемое прерывание NMI Рис. 7-4: Приоритеты прерываний УПРАВЛЕНИЕ DMA Во время работы системы могут одновременно работать множество каналов DMA. Имеется адрес для чтения и для записи, позволяющий включать и выключать DMA каналы. Адреса регистров DMA следующие: DMACONR - Управление DMA - Чтение. DMACON - Управление DMA - Запись. Содержимое этих регистров показано в табл. 7-5 (бит = 1 если разрешен) Табл. 7-5: Содержимое регистров DMA Bit Номер бита Имя Функция 15 SET/CLR Бит set/clr. См. описание бита 15 в разделе "Прерывания" 14 BBUSY Занятость блиттера - только чтение 13 BZERO Состояние нулевого вывода блиттером - чтение Остается 1, если во время операции блиттера выдаваемые данные были всегда 0 12, 11 Не используются 10 BLTPRI Приоритет блиттера. Также известен как "Гадкий блиттер" Когда этот бит 1, блиттер имеет полный (вместо частичного) приоритет над 68000 9 DMAEN Включение DMA. Этот бит - мастер бит для DMA. Он включает все каналы DMA в битах 8-0 8 BPLEN DMA битпланов включено 7 COPEN DMA коппера включено 6 BLTEN DMA блиттера включено 5 SPREN DMA спрайтов включено 4 DSKEN DMA диска включено 3-0 AUDxEN Звуковое DMA включено для каналов 3-0 (x = 3 - 0). Для подробностей, касающихся использования DMA см. следующие главы: Коппер Глава 2 "Коппер" Битпланы Глава 3 "Экраны" Спрайты Глава 4 "Спрайты" Звук Глава 5 "Звук" Блиттер Глава 6 "Блиттер" Диск Глава 8 "Интерфейсы" PROCESSOR ACCESS TO CHIP MEMORY Чипсет Амиги обращается к памяти непосредственно, минуя традиционные механизмы арбитража шины. Следовательно возможности процессора, обеспечивающие поддержку мультипроцессорности, такие как 68000 TAS (test & set) не поддерживаются амижной архитектурой. СБРОС И РАННЯЯ ЗАГРУЗКА Когда Amiga находится в состоянии сброса, изменяется карта памяти. С адреса $00000000 располагается дополнительная копия ROM. Оперативная память, обычно расположенная с этого адреса недоступна. На некоторых моделях Амиг, часть памяти остается. На других моделях, память полностью отсутствует. Программы должны учитывать то, что память недоступна. Бит OVL в одном из чипов 8520 отключает оверлей (Для раскладки бит см. Приложение F). Системное ПЗУ Амиги содержит ID код первым словом. Этот код может изменяться в дальнейшем. Второе слово содержит команду JMP ($4ef9). Следующие два слова используются как начальный стартовый адрес (PC) для 68000. Команды сброса работают подобно аварийному сбросу или включению питания. Исчезает вся память, карточки AUTOCONFIG, а ПЗУ появляется по адресу $00000000. Различие в том, что CPU продолжает выполнение следующей команды. Так как RAM не доступна, для написания кода, который будет надежно перезагружать все модели Амиги необходимы специальные действия. Ниже приведен листинг кода перезагрузки: CNOP 0,4 ;ЭТО ВАЖНО!: Должно быть выровнено по ;длинному слову MagicResetCode: lea.l 2,a0 ;Указатель на команду JMP а начале ROM RESET ;Память исчезает! jmp (a0) ;Полагаемся на превыборку адреса перехода Команда RESET должна быть выполнена в режиме супервизора. Для выполнения под exec.library используется следующий код: _ColdReboot: move.l 4,a6 ;Указатель на базу ExecBase lea.l MagicResetCode(pc),a5 ;Размещение кода сброса jsr _LVOSupervisor(a6) ;Вызываем (с помощью JSR) End. |