Snooping

Co to je

Snooping je schopnost WHDLoad, která kontroluje a loguje CPU přístupy k custom registrům. Pokud je Snoop aktivován, všechny nesprávné přístupy k custom registrům vytvoří chybu a nainstalovaný program bude ukončen. Nesprávné přístupy jsou: Strobe registry mohou být čteny nebo zapisovány.Custom registry se odlišují - OCS (Old ChipSet - A500, A1000, old A2000), ECS (Enhanced ChipSet - A600, nova A2000, A3000) a AGA (Advanced Graphics - A1200, A4000). Takže se tato funkce hodí obzvláště pro hledání chyb ve starých programech, způsobených špatným přístupem k AGA registrům.

Jak to funguje

Pokud je snooping zapnutý, WHDLoad označí adresy custom registrů v MMU translation tree jako nesprávné. Díky tomu se každý přístup do custom registrů stane Access Fault vyjímkou. WHDload tuto vyjímku ovládá, takže může zjistit, jestli je přístup správný nebo ne (při nekorektním přístupu je program ukončen, jinak program pokračuje).
Kvůli přetížení vyjímek a emulační sekvenci se běh programu značně zpomalí. Jak moc, záleží na CPU, typu Chip RAM a stackpointer aligmentu. Vše se take liší podle druhu přístupu (Byte/Word/LongWord, Read/Write). Na 68030 jsou zápisy rychlejší než čtení (protože při čtení je stackframe 92 bajtu, při psaní 32), na 68060 je to naopak, protože emulace zápisu je složitější.

Fast Snoop Mode

Volba Snoop/S zapíná rychlý snooping. Read přístupy nebudou testovány. Žádné speciální zkoušky nejsou provedeny. Tento mód je užitečný jen pro získání obsahu custom registru, např. pro uložení obrázku pomocí SP.

Copper List Scanner

Od verze 13 budou zkoušeny také copperlisty. Scanner bude aktivován při zápisu do registru coplc. Scanner procházi copperlist a ověřuje všechny move instrukce aplikováním omezení způsobených Snoop volbou. Skip a Wait instrukce budou ignorovány, Pokud scanner objeví ilegální přístup, program bude ukončen s chybovou hláškou. Scanner následuje branche (copjmp), detekuje smyčky a zkouší až 16 sublistů. Pohyby v copperlistech budou uloženy do interního logu pro custom registry a ten bude vypsán do souboru při exitu. Scanner není aktivní při Fast Snoop módu.

Zkouška Blitter Priority

Když je volba ChkBltHog/S aktivována, WHDLoad otestuje, zda instalovaný program nezapíná BltHog bit zapsáním do dmacon registru. Priorita blitteru může způsobit problémy na některých konfiguracích v souvislosti s rozsáhlými operacemi přes blitter (použití všech kanálů).

Test velikosti blitter bloku

Když je volba ChkBltSize/S aktivována, WHDlaod otestuje, zda práce blitteru nepřistupuje mimo vyhrazenou paměť. Při zápisu do bltsize nebo bltsizh zkouší, jestli je zapnut řádkový mód - pokud ano, nebude WHDLoad zkoušet velikost bloku. Jinak vypočítá WHDLoad první a poslední word pro každý aktivovaný DMA kanál. Pokud je adresa mimo BaseMem území, program bude ukončen s requesterem. Kalkulace je navržena k práci se všemi módy.

Blitter Wait test

Pokud je volba ChkBltWait/S zapnuta, WHDLoad bude sledovat instrukce, aby ověřil, že nainstalovaný program korektně čeká na konec blitter operace než začne novou. Používá interní hodnotu, která reprezentuje status další blitter operace. Hodnota je nastavena při zápisu do bltsize nebo bltsizh a vymazána, když je čten dmaconr registr. Při každém kontrolovaném zápisu je hodnota testována a pokud je zjištěno, že předchozí blitter operace stále běží, program bude ukončen s chybovým registrem s adresou neukončeného blitter procesu.
Jsou tu ale dva nedostatky: použití blitteru přes copperlist není testováno a použití blitter přerušení způsobí, že testovací rutina hlásí zbytečné chyby.

Budoucnost

Plánuje se implementovat schopnosti jako Freezing nebo ikonifikace. Pro tohle je Snooping ideální. Autorům instalaček se doporučuje zkoušet jejich produkty se Snoop pro budoucí kompatibilitu.

Požadavky

Pro Snoop mód je vyžadováno vlastnit MMU, se kterým umí WHDLoad pracovat (na 68030 je ho třeba zapnout)

Omezeni