Snooping

Co to jest?

Snooping to jedna z cech WHDLoad, która dokonuje sprawdzania i odnotowuje dostępy do rejestrów CIA oraz rejestrów własnych. Jeśli opcja Snoop jest aktywna, wszystkie nieprawidłowe i błędne próby dostępu wygenerują błąd dostępu i przerwanie pracy uruchamianego programu. Do takich prób dostępów można zaliczyć: Rejestry "Strobe" mogą być odczytywane i zapisywane. Zestaw sprawdzonych rejestrów własnych może się różnić w zależności od układów graficznych: OCS (Old ChipSet - A500, A1000, stara A2000), ECS (Enhanced ChipSet - A600, nowa A2000, A3000) i AGA (Advanced Graphics - A1200, A4000). Jest to użyteczne zwłaszcza przy wychwytywaniu błędów w starych programach.

Jak to działa?

Jeżeli opcja "Snoop" jest włączona, WHDLoad zaznacza w drzewie translacji MMU adresy rejestrów CIA i rejestrów własnych jako nieprawidłowe. Z tego powodu każdy dostęp do rejestrów własnych lub/i CIA generuje błąd dostępu. WHDLoad wówczas sprawdza, czy próba dostępu była prawidłowa. Jeżeli okaże się, że nie była, nastąpi przerwanie wykonywanego programu. Jeżeli próba dostępu jest prawidłowa i wystąpiła operacja odczytu, zostanie ona zaemulowana i będzie kontynuowane wykonywanie programu. Jeżeli wystąpiła operacja zapisu, WHDLoad odpowiednio dokonana zapisu wartości wewnętrznego schowka.
Zaznaczanie obszarów pamięci oraz emulacja pociągają za sobą zwolnienie wykonywania programu. Jak bardzo, to zależy od typu procesora oraz typu pamięci graficznej (16/32-bit), a także od ustawienia wskaźnika stosu. Zależne jest to również od typu dostępu (Bajt/Słowo/Długie Słowo, Zapis/Odczyt). Na 68030 zapis jest szybszy niż odczyt (gdyż odczyt stosu zajmuje 92 bajty, a zapis 32 bajty), na 68060 odczyt jest szybszy, ponieważ emulacja zapisu jest bardziej złożona.

Tryb "Fast Snoop"

Opcja Snoop/S uaktywnia szybki snooping. Dostępy odczytu nie będą sprawdzane. Również nie są prowadzone oznaczenia. Ten tryb może być przydatny w celu zdobycia zawartości rejestrów własnych, np. zapisania obrazka przy wykorzystaniu programu SP.

Skaner copperlisty

Od WHDLoad w wersji 13 sprawdzana jest również copperlista. Skaner zostaje uaktywniony podczas zapisu do rejestrów coplc jeśli DMA coppera jest włączone lub wtedy, gdy zainstalowany program włącza DMA coppera poprzez zapis do rejestrów dmacon. Skaner podąża za copperlistą, sprawdza i ustawia wszystkie instrukcje Move zgodnie z restrykcjami opcji Snoop (OCS/ECS/AGA). Instrukcje Skip i Wait (za wyjątkiem CEND) są ignorowane. Gdy zostanie odnaleziona nieprawidłowa próba dostępu, zainstalowany program zostanie wyłączony. Skaner podąży za odgałęzieniami (copjmp), wykryje pętle i sprawdzi do 16 podlist. Instrukcje Move w copperliście zostaną zapisane do węwnętrznego pliku rejestru, który zostanie zapisany na dysk przy wyjściu z WHDLoad. Skaner jest nieaktywny w trybie "Fast Snoop".

Sprawdzanie priorytetu blittera

Gdy opcja "ChkBltHog/S" jest włączona, WHDLoad sprawdza, czy zainstalowany program nie włącza bitu BltHog poprzez zapis do rejestru dmacon. Priorytet blittera może powodować problemy na niektórych konfiguracjach w połączeniu z dużymi operacjami na blitterze (wykorzystanie wszystkich kanałów).

Sprawdzanie rozmiaru blittera

Gdy opcja "ChkBltSize/S" jest włączona, WHDLoad sprawdza, czy zadania blittera nie próbują przedostać się poza pamięć określoną w BaseMem. Podczas próby zapisu do bltsize lub bltsizh sprawdza, czy tryb linii jest włączony w bltcon1. Jeżeli jest włączony, zostanie zignorowane sprawdzanie rozmiaru. W przeciwnym razie WHDLoad wyliczy pierwsze i ostatnie słowo dla każego uaktywnionego kanału DMA. Jeżeli jeden adres znajduje się poza obszarem BaseMem, program zostanie wyłączony z odpowiednią informacją w oknie komunikatu. Obliczenia zostały zaprojektowany w taki sposób, aby współpracowały ze wszystkimi trybami (rosnący/malejący, pozytywny/negatywny, nieparzyste moduły/wskaźniki).
Pamiętaj, że tryb rysowania linii nie jest sprawdzany i wszystkie rejestry blittera mogą być zapisane do coppera jeśli bit copcon jest ustawiony.

Sprawdzanie oczekiwania blittera

Gdy opcja "ChkBltWait/S" jest włączona WHDLoad użyje instrukcji śledzenia, aby sprawdzić, czy zainstalowany program wykonuje poprawienie oczekiwanie na zakończenie wykonywania operacji blittera, zanim ten rozpocznie wykonywać kolejną. Wykorzystywana jest do tego wewnętrzna zmienna, która reprezentuje stan pracy blittera. Zmienna jest ustawiona, gdy dokonywany jest zapis do bltsize lub bltsizh. Zmienna jest czyszczona, gdy dokonywany jest odczyt z rejestru dmaconr. Przy każdorazowym zapisie do rejestru blittera sprawdzana jest wewnętrzna zmienna. Jeżeli wykazuje ona pracę blittera, wykonywanie zainstalowanego programu zostanie przerwane, a WHDLoad zgłosi PC ostatniej czynności wykonywanej przez blitter.
Istnieją dwa "wąskie gardła" tej opcji. Pierwsze to takie, że nie jest sprawdzane wykorzystanie blittera poprzez coppera, drugie - wykorzystanie przerwań blittera.

Przyszłość

Planuję dodanie funkcji podobnych do zamrażania (Freezing) i ikonifikacji (Iconifing) Zalecane jest, aby autorzy programów instalacyjnych sprawdzali swoje pliki .slave z opcją "Snoop", aby zapewnić sobie kompatybilność w przyszłości.

Wymagania

Dla opcji "Snoop" wymagane jest MMU. WHDLoad musi używać MMU, a z racji tej MMU/S musi być włączony na procesorach 68030.

Ograniczenia