[Main] [Docs] [Registration] [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.

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 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


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