Snooping це особливість програми WHDLoad, що дозволяє спостерігати й вести журнал подій, доступів до регістрів Cia й Custom. Якщо активовано параметр Snoop, то всі некоректні звернення створять Помилку Доступу, а встановлена програма буде завершена. WHDLoad надаст інформацію про причину помилки.
Регістри строба (Strobe) можуть бути прочитані або записані. Набір Custom-регістрів може змінюватися між OCS (Old ChipSet - A500, A1000, стара A2000), ECS (Enhanced ChipSet - A600, нова A2000, A3000) і AGA (Advanced Graphics - A1200, A4000). Це корисно для пошуку в старих програмах помилок через звертання до нових регістрів AGA.
адрес | регістр | перевірка |
---|---|---|
$bfe001 | ciaa.ciapra | налаштування Overlay біт #0 заборонено |
$bfe201 | ciaa.ciaddra | біти #6-7 може мати будь-яке значення (використовується для джойстика), нижні біти повинні бути %000011 |
$bfe801 | ciaa.ciatodlow | доступ на читання-модифікація-запис (наприклад, bchg) не допускаються якщо біт ALARM встановлено у ciaa.ciacrb (перевіряється тільки на 68060) |
$bfe901 | ciaa.ciatodmid | |
$bfea01 | ciaa.ciatodhi | |
$bfed01 | ciaa.ciaicr | доступ на читання-модифікація-запис (наприклад, bchg) не допускаються (перевіряється тільки на 68060) |
$bfd100 | ciab.ciaprb | біти для MOTOR #7, SELECT #3-6 і STEP #0 не повинні бути очищанні, інші біти можуть бути змінені; але будь-який доступ до флоппі дисків буде виявлен |
$bfd200 | ciab.ciaddra | записанне значення повинно буди %11000000 |
$bfd300 | ciab.ciaddrb | записанне значення повинно буди %11111111 |
$bfd800 | ciab.ciatodlow | доступ на читання-модифікація-запис (наприклад, bchg) не допускаються якщо біт ALARM встановлено у ciaa.ciacrb (перевіряється тільки на 68060) |
$bfd900 | ciab.ciatodmid | |
$bfda00 | ciab.ciatodhi | |
$bfdd00 | ciab.ciaicr | доступ на читання-модифікація-запис (наприклад, bchg) не допускаються (перевіряється тільки на 68060) |
Якщо Snoop включений, WHDLoad помічає у списку перекладу диспетчера пам'яті
(MMU) адреси Custom й Cia регістрів, як невірні/захищені від запису. Через це, кожний доступ до
Custom або Cia регістрів закінчиться виключенням "Помилка Доступу".
Це виключення буде взято під управління WHDLoad. Спочатку, він перевіряє, чи
дійсний доступ. Якщо доступ недійсний, програма буде завершена. Якщо доступ
дійсний й якщо це операція читання, він буде емулюватися й виконання програми
продовжиться. Якщо це операція запису то WHDload додатково, збереже значення
у внутрішньому буфері.
Відбудеться вповільнення виконуваної програми, тому що будуть ще оброблятися
виключення й буде проводитися емуляція. Наскільки уповільниться роботи програми,
залежить від типу центрального процесора, типу Chip-пам'яті (16/32-bit) і вирівнювання
покажчика стека, якщо Chip-пам'ять 32-х бітна (є вирівнювання по довгих словах
або немає). Це також відрізняється для типу доступу (байт / слово / довге слово,
читання/запис). 68030 пише, швидше ніж, читає (тому що читання, фрейму стека
включає 92 байта, запис - 32 байта), на процесорах 68060 читання, швидше, тому
що емуляція для запису, більше складна.
Параметр Snoop/S активізує режим швидкого спостереження. Доступи з читання перевірятися не будуть. Не буде проводитися ніяких спеціальних перевірок. Цей спосіб може бути корисний тільки для одержання змісту Custom-регістрів, наприклад, щоб зробити знімок екрана, використовуючи SP.
Починаючи з версії 13, WHDLoad також може сканувати коперлісти (copperlists). Сканер буде активований на запис у регістри coplc, якщо активізовано copper dma, або коли встановлена програма активізує coppper dma, записуючи в регістр dmacon. Сканер стежить за коперлістом і підтверджує всі інструкції Move, застосовуючи обмеження, накладені опцією Snoop (OCS / ECS / AGA). Інструкції Skip й Wait (за виключенням CEND) будуть ігноруватися. Коли він знаходить недійсні входження, установлена програма завершується. Сканер також стежить за відгалуженнями (copjmp), виявляє цикли й перевіряє до 16 підперечнів. Інструкції Move у коперлістах будуть збережені у внутрішньому файлі регістрів, який буде створено WHDLoad при виході. Сканер не активний у режимі швидкого спостереження (Fast Snoop).
Коли активізована опція ChkBltHog/S, WHDLOAD перевірить, що встановлена програма не активізує біт BltHog, записуючи в dmacon регістр. Пріоритет блітера може створити проблеми на деяких апаратних конфігураціях при використанні всіх його можливостей (при використанні всіх каналів).
Коли параметр ChkBltSize/S активізований, WHDLOAD перевірить, щоб блітер не
працював з пам'яттю за межами області BaseMem. При доступі на запис в bltsize
або bltsizh, він перевіряє, чи встановлений
лінійний режим в bltcon1. Якщо лінійний режим активний,
перевірка розміру буде скасована. Інакше WHDLoad визначить перше й останнє слово
доступу до кожного активованого каналу прямого доступу до пам'яті. Якщо одна
адреса перебуває за межами області пам'яті BaseMem, те програма буде завершена
з висновком вікна повідомлення. Обчислення призначено для роботи з усіма режимами
(ascending/descending, positive/negativ modulos, odd modulos/pointers).
Пом`ятайте, що режим "line drawing" не перевіряється й що всі регістри
блітера можуть бути перезаписані копером, у випадку якщо встановлено copcon.
Коли параметр ChkBltWait/S активізований, WHDLOAD буде використовувати трасування
інструкцій на предмет того, що встановлена програма дійсно правильно чекає закінчення
роботи блітера, перед його наступним запуском. Whdload використає внутрішню
змінну, котра відображає робочий стан блітерa. Змінна встановлюється, коли виконується
запис в bltsize або bltsizh, і скидається, коли виконується
читання з регістра dmaconr. При кожному записі в регістр блітера, перевіряється
значення змінної, і якщо значення показує, що блітер запущено, то установлена
програма буде завершена, а WHDLoad повідомить PC останньої запущеної задачі
блітера разом з реальним доступом
У даного параметра є два головних недоліки:
1) використання блітера через копер НЕ перевіряється;
2) використання преривань блітера змусить процедуру перевірки виводити безглузді
повідомлення про помилки
Планується реалізувати таку можливість, як припинення програми й згортання її в іконку. Для цього відмінно підходить Snoop. Тому, для забезпечення сумісності надалі, рекомендую авторам інсталяційних модулів перевіряти коректність роботи ваших патчей з параметром Snoop.
Для роботи параметра Snoop необхідний диспетчер пам'яті (MMU). WHDLoad також повинен використовувати MMU, тому на машинах із процесорами 68030 необхідно активізувати опцію MMU/S.