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 чтение, быстрее, потому что эмуляция для записи, более
сложная.
Опция Snoop/S позволяет быстрый snooping. Доступы по чтению не будут проверяться. Никакие специальные проверки не будут выполняться. Этот способ может быть полезен только чтобы получить содержание Custom Chips, например чтобы сохранить картинку на экране, используя SP.
С версии 13 WHDLoad также может сканировать copperlists. Сканер будет активирован на запись в регистры coplc, если copper dma активирован, или когда установленная программа активирует coppper dma, записывая в dmacon регистр. Сканер следит за copperlist и подтверждает все инструкции Move накладывая при этом ограничения, примененные опцией Snoop (OCS / ECS / AGA). Инструкции Skip и Wait (за исключением CEND) будут игнорироваться. Когда он находит недействительные доступы, установленная программа будет закончена. Сканер также следит за ответвлениями (copjmp), и обнаруживая таковые проверяет до 16 подсписков. Инструкция Move в копперлисте будет сохранена во внутреннем файле регистров, который будет сохранен WHDLoad при выходе. Сканер не активен в режиме Fast Snoop.
Когда опция ChkBltHog/S активрована, WHDLOAD проверит, что установленная программа не активирует бит BltHog записывая в dmacon регистр. Приоритет Blitter-а может создать проблемы на некоторых конфигурациях при использовании всех возможностей blitter-а (используются все каналы).
Когда опция 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 установлен.
Когда опция 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 машинах.