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.

 


НОМЕ




Rambler's Top100