### Figyelés

#### Mi ez

A figyelés a WHDLoad olyan funkciója, ami az egyéni és a Cia regiszterek ellenőrzését és hozzáférések naplózását végzi. Ha a Snoop aktiválva van, minden hibás hozzáférés egy hozzáférési hibát fog létrehozni és az installált program be lesz fejezve. Az ilyen hozzáférések:

- nemlétező regiszterekhez való hozzáférés
- olvasási hozzáférés a csak írható regiszterekhez
- írási hozzáférés a csak olvasható regiszterekhez
- hozzáférések a kori olvasású regiszterekhez
- byte írási hozzáférések (kivévé `bltcon0l` és `aud*vol+1`)

A strobe regiszterek olvashatók vagy írhatók. Az érvényes egyéni regiszterek csoportja változik az OCS (Old ChipSet - A500, A1000, régi A2000), ECS (Enhanced ChipSet - A600, új A2000, A3000) és AGA (Advanced Graphics - A1200, A4000) gépeken. Ez hasznos lehet olyan hibák felderítéséhez, amelyeket régi programok okozhatnak az új AGA regiszterekhez való hozzáférésnél.

#### Hogyan működik

Ha a Snoop be van kapcsolva, a WHDLoad az egyéni és a Cia regisztereket érvénytelennek jelöli az MMU fordítási fában. Emiatt minden hozzáférés ezekhez a regiszterekhez hozzáférési hiba kivétet eredményez. A WHDLoad saját kivét kezelője fogja ezt kezelni. Először ellenőrzi, hogy a hozzáférés érvényes-e. Ha a hozzáférés érvénytelen, a program be lesz fejezve. Ha a hozzáférés érvényes és ha egy olvasási utasítás, akkor az emulálva lesz, és a program végrehajtása folytatódik. Ha ez egy írási utasítás, a WHDLoad még el is menti az értékeket egy belső tárolóba.
A kivét adminisztrációja miatt és az emuláció miatt a program végrehajtása lelassulhat. Hogy mennyire, az függ a CPU típusától, a Chip memória típusától (16/32-bit) és veremmutató állásától ha a Chip memória 32 bites (LongWord vagy nem). Továbbá függ a hozzáférés típusától (Byte/Word/LongWord, olvasás/írás). 68030-on az írás gyorsabb mint az olvasás (mivel olvasásnál a stackframe 92 byte, írásnál 32 byte), 68060-on az olvasás gyorsabb, mivel az írás emulálása eléggé összetett.

#### Gyors figyelési mód

A Snoop/S opció bekapcsolja a gyors figyelést. Az olvasási hozzáférés nem lesz ellenőrizve. Nem lesznek speciális ellenőrzések végrehajtva. Ez a mód hasznos lehet az egyéni regiszterek tartalmának megszerzéséhez, pl. képek kimentéséhez az SP segítségével.

#### Copper lista átnéző

A WHDLoad 13-as verziója óta a copperlisták is ellenőrzésre kerülnek. A figyelő akor lesz aktiválva, ha írás történik a `coplc` regiszterekhez, ha a copper dma engedélyezve van, vagy egy installált program aktiválja a copper dma-t a `dmacon` regiszter írásával. A figyelő követi a copperlistát és ellenőrzi az összes Move utasítást a Snoop opció korlátozásainak alkalmazásával (OCS/ECS/AGA). A Skip és Wait (kivéve CEND) utasítások mellőzve lesznek. ha egy érvénytelen bejegyzést talál, az installált program kilép. A figyelő a (`copjmp`) ágakat követi, érzékeli a hurkokat és 16 allistában ellenőriz. A Move-ok a copperlistában egy belső egyéni regiszter fájlba lesz írva, amely kiírásra kerül a WHDLoad kilépésénél. A figyelő nem aktív a gyors figyelési módban.

#### Blitter prioritás ellenőrzése

Amikor a ChkBltHog/S opció aktiválva van, a WHDLoad ellenőrizni fogja hogy az installált program bekapcsolja-e a `BltHog` bitet a `dmacon` regiszterbe írással. A Blitter prioritás problémákat okozhat néhány hardver konfiguráción nagy blitter műveletek alatt (összes csatorna használata esetén).

#### Blitter méret ellenőrzes

Amikor ChkBltSize/S opció aktiválva van, a WHDLoad ellenőrizni fogja, hogy a blitter nem fér-e hozzá bármilyen memóriához a BaseMem területen kívül. Írási hozzáféréseknél a `bltsize` vagy a `bltsizh` ellenőrzi, hogy a soros mód be van-e kapcsolva a `bltcon1` regiszterben. Ha a soros mód aktiválva van, megszakítja a méretellenőrzést. Egyébként a WHDLoad kiszámolja az első és az utolsó word-öt minden egyes aktív DMA csatorna hozzáféréséhez. Ha egy cím kívül van a BaseMem területén, a program ki fog lépni egy kérdezővel. A számolás úgy van tervezve, hogy működjön minden módban (növekvő/csökkenő, pozitív/negatív modulo, páratlan modulo/mutatók).
Jegyezd meg, hogy a sor rajzolási módja nem lesz ellenőrizve és az összes blitter regiszter írható a copper által ha a `copcon` be van állítva.

#### Blitter várakozás ellenőrzés

Ha a ChkBltWait/S opció aktiválva van, a WHDLoad az utasítás nyomkövetést fogja használni annak ellenőrzésére, hogy az installált program rendesen vár-e a blitterre az új blitter művelet megkezdése előtt. Egy belső változót használ, ami a blitter állapotát jelzi. A változó akkor lesz beállitva, amikor írási hozzáférés történik a `bltsize` vagy a `bltsizh` regiszterekhez és törölve ha olvasási hozzáférés törtenik a `dmaconr` regiszterhez. Minden blitter regiszter írási műveleténél a belső változó értéke ellenőrzésre kerül, és ha az azt mutatja, hogy egy blitter feladat fut, akkor az installált program ki fog lépni és a WHDLoad ki fogja írni az utolsó elindított blitter művelet PC-jét az aktuális hozzáféréssel együtt.
Két fő hátulütője van ennek a lehetőségnek. Először is a blitter használata a copperen keresztül nincs ellenőrizve, másodszor a blitter megszakítások ok nélküli hibákat generálhatnak az ellenőrző rutinoknál.

#### A jövő

Tervbe vannak véve olyan funkciók, mint a Leállítás és Ikonizálás. Ezekhez a Figyelés alapvető fontosságú. Ezért javasolt az installálók készítőinek számára, hogy ellenőrizzék az installálóikat a Figyelés funkcióival, a jövőbeni kompatibilitás érdekében.

#### Követelmények

Egy MMU szükséges a Figyelés funkcióhoz. A WHDLoad-nak használnia kell az MMU-t, ezért az MMU/S opciót be kell kapcsolni minden 68030-as gépen.

#### Korlátozások

- 68020 + 68851
  - ez a hardver jelenleg nem támogatott
- 68030
  - nincsenek ismert korlátozások
- 68040
  - ez a hardver jelenleg nem támogatott
- 68060
  - `movem` utasítás érvénytelen regiszterekhez férhet hozzá hozzáférési hiba kivét létrehozása nélkül, ez azért lehetséges mert csak az első hozzáférés lesz ellenőrizve
  - `move <Cia/Egyéni regiszter>,sr` hibásan lesz végrehajtva, ha megváltoztatja az állapotregiszter supervisor részét, a supervisor rész változatlan marad
  - bármilyen `(ssp)+` vagy `-(ssp)` együtt egy Cia vagy egyéni regiszterhez tartozó írási hozzáféréssel nem kezelhető stackframe problémák miatt, a WHDLoad érzékeli az ilyen hozzáféréseket és kilép a megfelelő kérdezővel
  - az utasítások nem férhetnek hozzá egynél több regiszterhez egy időben, ez azt jelenti, hogy az olyan kódok, mint a `move.b ($dff006),($bfd800)` nem kezelhetőek, ha ilyen kódot talál a WHDLoad, egy hozzáférési hiba kérdezőt fog kirakni