Snooping
Co to je
Snooping je schopnost WHDLoad, ktera kontroluje a loguje CPU pristupy k custom registrum.
Pokud je Snoop aktivovan, vsechny nespravne pristupy k custom
registrum vytvori chybu a nainstalovany program bude ukoncen. Nespravne pristupy jsou:
- pristupy k neexistujicim registrum
- read pristupy k Write Only registrum
- write pristupy k Read Only registrum
- pristupy k Early Read registrum
- byte write pristupy (krome bltcon0l a aud*vol+1)
Strobe registry mohou byt cteny nebo zapisovany.Custom registry se odlisuji -
OCS (Old ChipSet - A500, A1000, old A2000), ECS (Enhanced ChipSet
- A600, nova A2000, A3000) a AGA (Advanced Graphics - A1200, A4000). Takze se
tato funkce hodi obzvlaste pro hledani chyb ve starych programech, zpusobenych
spatnym pristupem k AGA registrum.
Jak to funguje
Pokud je snooping zapnuty, WHDload oznaci adresy custom registru v MMU translation
tree jako nespravne. Diky tomu se kazdy pristup do custom registru stane Access Fault
vyjimkou. WHDload tuto vyjimku ovlada, takze muze zjistit, jestli je pristup spravny
nebo ne (pri nekorektnim pristupu je program ukoncen, jinak program pokracuje).
Kvule pretizeni vyjimek a emulacni sekvenci se beh programu znacne zpomali.
Jak moc, zalezi na CPU, typu Chip RAM a stackpointer aligmentu. Vse se take lisi
podle druhu pristupu (Byte/Word/LongWord, Read/Write). Na 68030 jsou zapisy
rychlejsi nez cteni (protoze pri cteni je stackframe 92 bajtu, pri psani 32),
na 68060 je to naopak, protoze emulace zapisu je vic slozita.
Fast Snoop Mode
Volba Snoop/S zapina rychly snooping. Read pristupy nebudou testovany.
Zadne specialni zkosuky nejsou provedeny. Tento mod je uzitecny jen pro
ziskani obsahu custom registru, napr. pro ulozeni obrazku pomoci
SP.
Copper List Scanner
Od verze 13 budou zkouseny take copperlisty. Scanner bude aktivovan pri zapisu
do registru coplc. Scanner prochazi copperlist a overuje vsechny move instrukce
aplikovanim omezeni zpusobenych Snoop volbou. Skip a Wait instrukce budou ignorovany,
Pokud scanner objevi ilegalni pristup, program bude ukoncen s chybovou hlaskou.
Scanner nasleduje branche (copjmp), detekuje smycky a zkousi az 16 sublistu.
Pohyby v copperlistech budou ulozeny do interniho logu pro custom registry a ten
bude vypsan do souboru pri exitu. Scanner funguje ve Fast Snoop modu.
Zkouska Blitter Priority
Kdyz je volba ChkBltHog/S aktivovana, WHDLoad otestuje, jestli instalovany program
nezapina BltHog bit zapsanim do dmacon registru. Priorita blitteru muze zpusobit
problemy na nekterych konfiguracich v souvislosti s rozsahlymi operacimi pres blitter
(pouziti vsech kanalu).
Test velikosti blitter bloku
Kdyz je volba ChkBltSize/S aktivovana, WHDlaod otestuje, jestli prace blitteru
nepristupuje mimo vyhrazenou pamet. Pri zapisu do bltsize nebo bltsizh
zkousi, jestli je zapnut radkovy mod - pokud ano, nebude WHDLoad zkouset velikost bloku.
Jinak vypocita WHDLoad prvni a posledni word pro kazdy aktivovany DMA kanal. Jestli
je adresa mimo BaseMem uzemi, program bude ukoncen s requesterem. Kalkulace je navrzena
k praci se vsemi mody.
Blitter Wait test
Pokud je volba ChkBltWait/S zapnuta, WHDLoad bude sledovat instrukce, aby overil,
ze nainstalovany program korektne ceka na konec blitter operace nez zacne novou.
Pouziva interni hodnotu, ktera reprezentuje status dalsi blitter operace.
Hodnota je nastavena pri zapisu do bltsize nebo bltsizh
a vymazana, kdyz je cten dmaconr registr. Pri kazdem kontrolovanem zapisu
je hodnota testovana a pokud je zjisteno, ze predchozi blitter operace stale
bezi, program bude ukoncen s chybovym registrem s adresou neukonceneho blitter
procesu.
Jsou ale dva nedostatky: pouziti blitteru pres copperlist neni testovano
a pouziti blitter preruseni zpusobi, ze testovaci rutina hlasi zbytecne chyby.
Budoucnost
Planuje se implementovat schopnosti jako Freezing nebo ikonifikace. Pro tohle
je Snooping idealni. Autorum instalacek se doporucuje zkouset jejich produkty
se Snoop pro budouci kompatibilitu.
Requirements
Pro Snoop mod je vyzadovano vlastnit MMU, se kterym umi WHDLoad pracovat
(na 68030 je ho treba zapnout)
Omezeni
- 68020 + 68851
- tento hardware neni podporovan
- 68030
- 68040
- tento hardware neni podporovan
- 68060
- movem instrukce muzou zasahovat nespravny registr bez chyboveho
hlaseni (protoze je testovan jen prvni pristup)
- move <Cia/Custom registr>,sr bude vykonan nespravne, pokud
se snazi zmenit supervisor portion stavoveho registru, nezmeni se.
- any (ssp)+ or -(ssp) ve spojeni s write pristupem k
Cia nebo Custom registru nemuze byt prevzato kvuli problemum se stackframes,
WHDLoad takove pristupy detekuje a vyskoci s prislusnym requesterem.
- instrukce nesmi pristupovat vic nez do jednoho strezeho registru najednou,
to znamena, ze kod jako move.b ($dff006),($bfd800) nemuze byt zvladnuty
a zpusobi chybu Access Fault.