Snooping (отслеживание)

для чего

Snooping - особенность WHDLoad, которая позволяет отслеживать и вести лог доступов к регистрам Cia и Custom. Если опция Snoop активирована, то все недействительные доступы создадут Ошибку Доступа, и установленная программа будет закончена. Возможны такие доступы:

Регистры строба(Strobe) могут быть прочитаны или записаны. Набор Custom Chips изменяется от OCS (старый ChipSet - A500, A1000, старая A2000), ECS (улучшенный ChipSet - A600, новая A2000, A3000) и до AGA (новый Chipset - A1200, A4000). Это особенно полезно для того чтобы определить местонахождение ошибок в старых программах, которые обращаются к новым регистрам AGA.

Как это работает

Если Snoop включен, WHDLoad отмечает адреса Custom Chips и регистров Cia как недоступные в списке перевода MMU. Из-за этого, каждый доступ к Custom Chips или регистрам Cia закончится сообщением - Ошибка Доступа. Это исключение будет взято под упрвление WHDLoad. Вначале, он проверяет, что доступ действителен. Если доступ недействителен, программа будет закончена. Если доступ действителен и если это доступ для чтения, он будет эмулироваться и выполнение программы продолжится. Если это операция записи то WHDload дополнительно, сохранит значение во внутреннем буфере.
Выполняемая программа будет замедлена, так как будут обрабатываться исключения и производиться эмуляция. Насколько она замедляется, зависит от типа центрального процессора, типа Chip памяти (16/32-bit) и Stackpointer выравнивания, если Chip память - 32 бита (LongWord выровненная или нет). Это также отличается для типа доступа (Byte/Word/LongWord, Чтение/Запись). 68030 пишет, быстрее чем, читает (потому что чтение, stackframe включает 92 байта, на запись - 32 байта), на 68060 чтение, быстрее, потому что эмуляция для записи, более сложная.

Режим Fast Snoop

Опция Snoop/S позволяет быстрый snooping. Доступы по чтению не будут проверяться. Никакие специальные проверки не будут выполняться. Этот способ может быть полезен только чтобы получить содержание Custom Chips, например чтобы сохранить картинку на экране, используя SP.

Copper List Scanner

С версии 13 WHDLoad также может сканировать copperlists. Сканер будет активирован на запись в регистры coplc, если copper dma активирован, или когда установленная программа активирует coppper dma, записывая в dmacon регистр. Сканер следит за copperlist и подтверждает все инструкции Move накладывая при этом ограничения, примененные опцией Snoop (OCS / ECS / AGA). Инструкции Skip и Wait (за исключением CEND) будут игнорироваться. Когда он находит недействительные доступы, установленная программа будет закончена. Сканер также следит за ответвлениями (copjmp), и обнаруживая таковые проверяет до 16 подсписков. Инструкция Move в копперлисте будет сохранена во внутреннем файле регистров, который будет сохранен WHDLoad при выходе. Сканер не активен в режиме Fast Snoop.

Проверка приоритета Blitter-а

Когда опция ChkBltHog/S активрована, WHDLOAD проверит, что установленная программа не активирует бит BltHog записывая в dmacon регистр. Приоритет Blitter-а может создать проблемы на некоторых конфигурациях при использовании всех возможностей blitter-а (используются все каналы).

Проверка размера Blitter-a

Когда опция ChkBltSize/S активрована, WHDLOAD проверит, чтобы blitter не работал с памятью вне BaseMem области. При записи в регистры в bltsize или bltsizh, он проверяет, установлен ли режим "line drawing" в bltcon1. Если режим "line drawing" активен, это отменит проверку размера. Иначе WHDLoad вычислит первый и последнее слово к доступу для каждого активированного канала прямого доступа к памяти. Если один адрес - вне BaseMem области, программа будет закончена с запросчиком. Вычисление предназначено, чтобы работать со всеми способами (ascending/descending, positive/negativ modulos, нечетные modulos/pointers).
Помните, что способ "line drawing" не будет проверен и что все регистры blitter-a могут записаны copper-ом, если copcon установлен.

Проверка Blitter Wait

Когда опция ChkBltWait/S активирована, WHDLOAD будет использовать след инструкции, чтобы проверить, что установленная программа действительно правильно ждет окончания работы blitter-а, чтобы снова запустить blitter. Whdload использует внутреннюю переменную, которая содержит рабочее состояние blitter-a. Переменная установлена, когда производится запись в bltsize или bltsizh, и сброшена, когда происходит чтение из регистра dmaconr. Каждая запись в blitter, регистрируются, переменной проверяется, и если просходит доступ к blitter-у во время его работы, то установленная программа будет закончена, и WHDLoad сообщит адрес PC где blitter начал работу не закончив предыдущей работы.
Есть два главных недостатка этой особенности. Первое - использование blitter-а через copper не будет проверено и второе - использование перерывания blitter-а заставит проверку выводить сообщения об ошибках.

 Планы

Планирую реализовать такую возможность как остановка программы и Iconifing. Для этого, Snoop - очень подходит. Поэтому рекомендую авторам Installs, проверить ваши Installs с опцией Snoop, чтобы обеспечить в будущем совместимость.

Требования

MMU для работы Snoop. Также WHDLoad должен использовать MMU, поэтому MMU/S нужно включать на 68030 машинах.

Ограничения