[Main] [Docs] [Installs] [Search] [Team] [Guestbook] [Links]

Snooping

Co to je

Snooping je schopnost WHDLoad, která ověřuje a loguje CPU přístupy k custom a CIA 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. WHDLoad zobrazí chybový registr vysvětlující důvod chyby.

Custom registry

Všechny přístupy čtení/zápisu do custom registrů jsou kontrolovány. 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.

Používání funkce resload_Control a tagů WHDLTAG_CUST_DISABLE/READ/STROBE/WRITE se dá modifikovat vnitřní konfigurace WHDLoad toho, které registry mají být jen na čtení/zapisovatelné. Tím mohou být ignorovány ilegální přístupy nebo mohou být detekovány ty správné. To by se mělo používat jen při pracovním procesu a ne ve záverečné verzi slave k vydání.

Cia registry

U Cia registrů jsou kontrolovány jen zápisy. To znamená, že čtení neexistujících registrů v oblasti paměti od $bfd000 do $bfefff nebude detekováno. Pro všechny zápisy bude zapisovaná hodnota interně uložena WHDLoadem. Pro některé Cia registry jsou speciální kontroly, které ověřují zapisovanou hodnotu:

adresa registr test
$bfe001 ciaa.ciapra nastavení Overlay bitu #0 je zakázáno
$bfe201 ciaa.ciaddra bity #6-7 můžou mít jakoukoliv hodnotu (využívá se pro joypad), nižší bity musí být %000011
$bfe801 ciaa.ciatodlow read-modify-write zápisy (například přes bchg) nejsou dovoleny pokud je nastaven ALARM bit v ciaa.ciacrb (ověřuje se jen na 68060)
$bfe901 ciaa.ciatodmid
$bfea01 ciaa.ciatodhi
$bfed01 ciaa.ciaicr read-modify-write přístupy (například bchg) nejsou dovoleny (ověřováno na 68060)
$bfd100 ciab.ciaprb bity pro MOTOR #7, SELECT #3-6 a STEP #0 nesmí být vynulovány, ostatní bity mohou být změněny, takhle se detekuje přístup na disk
$bfd200 ciab.ciaddra zapsaná hodnota musí být %11000000
$bfd300 ciab.ciaddrb zapsaná hodnota musí být %11111111
$bfd800 ciab.ciatodlow read-modify-write přístupy (například bchg) nejsou dovoleny, pokud je nastaven ALARM bit v ciab.ciacrb (ověřováno jen na 68060)
$bfd900 ciab.ciatodmid
$bfda00 ciab.ciatodhi
$bfdd00 ciab.ciaicr read-modify-write přístupy (například bchg) nejsou dovoleny (ověřováno jen na 68060)

Jak to funguje

Pokud je snooping zapnutý, WHDLoad označí adresy custom registrů v MMU translation tree jako nesprávné/chráněné proti zápisu. 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 registrů coplc, pokud je DMA copperu zapnuto nebo pokud nainstalovaný program sám DMA Copperu zapne zápisem do dmacon registru. Scanner procházi copperlisty 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 bufferu pro custom registry a ten bude vypsán do souboru při exitu. Scanner není aktivní při Fast Snoop módu.

Kontrola audio ukazatele

Když je aktivovaná volba ChkAudPt/S, WHDLoad bude kontrolovat, zda nainstalovaný program zapisuje pouze správné adresy do ukazatelů pro Custom DMA zvuku. Správné znamená, že ukazatel se musí nacházet uvnitř BaseMem a mít jinou hodnotu než 0. Kontrolovány jsou pouze zápisove operace longword adres, ne word adres. Tato kontrola může být užitečná pro hledání problémů v rutinách pro přehrávání zvuku.

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 (ascending/descending, positive/negative modulos, odd modulos/ukazatele).
Buďte si vědomi toho, že řádkový mód nebude ověřován a že všechny blitter registry mohou být zapsány také copperem, pokud je tak nastaven copcon.

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.

Kontrola Color Burst

Když je aktivovaná volba ChkColBst/S, WHDLoad kontroluje, zda na každém zápisu do custom.bplcon0 registru je nastaven color bit. Některý hardware, obzvláště flickerfixer požaduje, aby byl tento bit nastaven na 1 pro správný výstup video signálu. Pro nejlepší kompatibilitu by měl být tento bit vždy nastaven správně. Jsou kontrolovány přímé zápisy do custom.bplcon0 a zápisy skrze copperlisty.

Ovládání kontroly Copperu

Když je zapnutá volba ChkCopCon/S, WHDLoad kontroluje, pokud je při každém zápisu do registru custom.copcon, není bit #1. Tento bit zapíná schopnost Copperu zapisovat do Blitter registrů. Může být někdy užitečné detekovat, zda programy používají Copper pro ovládání DMA aktivit.

Budoucnost

Plánuje se implementovat schopnosti jako Freezing nebo ikonifikace. Pro tohle bude Snooping nutnost. 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


[Main] [Docs] [Installs] [Search] [Team] [Guestbook] [Links]