Snooping
De què es tracta?
Snooping és una funcionalitat de WHDLoad que registra i valida els accessos als registres Custom i CIA. Si
Snoop està actiu tots els accessos invàlids crearan una Falla d'Accés i el programa instal·lat
acabarà. Aquests accessos són:
- Accessos a registres inexistents
- Accessos de lectura a registres de només escriptura
- Accessos d'escriptura a registres de només lectura
- Accessos a registres Early Read
- Accessos d'escriptura de byte (excepte bltcon0l i aud*vol+1)
Els registres Strobe es poden llegir o escriure. El conjunt de registres Custom vàlids pot variar entre OCS
(Old ChipSet - A500, A1000, A2000 vells), ECS (Enhanced ChipSet - A600, A2000 nous, A3000) i AGA (Advanced Graphics - A1200,
A4000). Això és útil especialment per a localitzar errors en programes vells causats per accessos no definits als nous
registres AGA.
Com funciona?
Si Snoop està activat, WHDLoad marca les adreces dels registres Custom i CIA com a invàlides en l'arbre de traducció de la
MMU. A causa d'això, cada accés a un registre Custom o CIA ocasionarà una excepció de Falla d'Accés. El gestor d'excepcions
dintre de WHDLoad tractarà aquesta excepció: Primer controlarà si l'accés és vàlid; Si l'accés és invàlid el programa finalitzarà.
Si l'accés és vàlid i és tracta d'una operació de lectura, serà emulat i l'execució del programa continuarà. Si és
una operació d'escriptura, WHDLoad addicionalment guardarà els valors escrits en un espai d'emmagatzematge intern.
A causa de la sobrecàrrega de l'excepció i la seqüència d'emulació el programa patirà un alentiment a l'execució.
La quantitat d'aquest alentiment dependrà del tipus de CPU, el tipus de Memòria Xip (16/32 bits) i l'alineament del Punter
de Pila si la Memòria Xip és de 32 bits (Paraules Llargues alineades o no). També diferirà pel tipus d'accés (Byte/Paraula/
Paraula Llarga, Lectura/Escriptura). En processadors 68030 l'Escriptura serà més ràpida que la Lectura (degut al fet que
durant les lectures l'entorn de pila és de 92 bytes i en escriptures és de 32 bytes), al 68060 les Lectures seran mes
ràpides degut al fet que l'emulació per a les Escriptures és més complexa.
Mode Snoop Ràpid (Fast Snoop)
L'opció Snoop/S activa el mode de snoop ràpid. Els accessos de lectura no es comprovaran. No
es realitzaran controls especials. Aquest mode només serà útil per a obtenir el contingut dels registres Custom, per ex.
per a salvar una pantalla usant SP.
Analitzador de la CopperList
Des de la versió 13 de WHDLoad també la copperlist en sí mateixa es comprova. L'analitzador s'activa durant les escriptures
als registres coplc si el DMA de copper està activat, o quan el programa instal·lat activa el DMA de copper
escrivint el registre dmacon. L'analitzador seguirà la copperlist i validarà totes les instruccions Move aplicant
les restriccions causades per l'opció Snoop (OCS/ECS/AGA). Les instruccions Skip i Wait (excepte CEND) s'ignoraran. Quan
trobi entrades invàlides, el programa instal·lat finalitzarà. L'analitzador segueix les ramificacions (copjmp),
detecta cicles i comprova fins a 16 subllistes. Els Move's en la copperlist es desen a l'arxiu intern de registres Custom
que es bolca en sortir de WHDLoad. L'analitzador no es troba actiu al mode Snoop Ràpid.
Comprobació de la Prioritat del Blitter
Quan l'opció ChkBltHog/S es trobi activa, WHDLoad comprovarà que el programa instal·lat no activi el bit BltHog
escrivint al registre dmacon. La Prioritat del Blitter pot causar problemes en algunes configuracions de
maquinari en conjunt amb grans operacions del blitter (on s'usin tots els canals).
Comprovació del Tamany del Blitter
Quan s'activa l'opció ChkBltSize/S WHDLoad comprovarà que els treballs del blitter no accedeixin memòria fora de l'àrea
BaseMem. En accessos d'escriptura a bltsize o bltsizh comprova si el mode lineal està activat a bltcon1.
Si el mode lineal està activat, cancel·larà el control de tamany. En cas contrari WHDLoad calcularà la primera i última
paraula on accedir per a cada canal actiu de DMA. Si una adreça es troba fora de l'àrea BaseMem el programa finalitzarà amb
un quadre de diàleg. El càlcul està dissenyat per a treballar en tots els modes (ascendent/descendent, mòduls positius/
negatius, mòduls/punters imparells).
Recordi que el mode de dibuix de línies no serà verificat i que tots els registres del blitter poden ser escrits pel
copper si copcon està configurat.
Comprovació de l'Espera del Blitter
Quan l'opció ChkBltWait/S està activa, WHDLoad empra un seguiment d'instruccions per a verificar que el programa instal·lat
espera correctament que el blitter acabi abans de començar un altre treball de blitter. S'utilitza una variable interna
que representa l'estat de treball del blitter. La variable és configurada quan es produeix un accés d'escriptura a
bltsize o bltsizh i desactivada quan es realitza un accés de lectura al registre dmaconr.
A cada escriptura a un registre del blitter es comprova el valor de la variable interna, si es troba un treball de
blitter en execució, el programa instal·lat finalitzarà i WHDLoad informarà l'ordinador de l'últim treball de blitter
arrencat conjuntament amb l'accés actual.
Hi ha dos colls d'ampolla principals en aquesta funcionalitat. Primer, l'ús de blitter a través del copper no es comprova,
i segon, l'ús de les interrupcions del blitter ocasionen que la rutina de comprovació reporti errors inexistents.
El futur
S'ha planejat implementar funcionalitats tals com Congelat i Iconificat. Per a les mateixes, Snoop és un requeriment
necessari. Per tant és recomanable que els autors dels instal·ladors comprovin els seus instal·ladors amb Snoop per a
assegurar la compatibilitat futura.
Requeriments
Es requereix una MMU per a la funcionalitat Snoop. WHDLoad també ha d'utilitzar la MMU i en
conseqüència s'ha d'activar l'opció MMU/S en màquines basades en 68030.
Limitacions
- 68020 + 68851
- Aquest maquinari no és suportat actualment
- 68030
- Sense limitacions conegudes
- 68040
- Aquest maquinari no està suportat
- 68060
- Les instruccions movem poden accedir a un registre invàlid sense ocasionar una excepció de Falla d'Accés, això
és possible degut al fet que només es verifica que el primer accés concordi amb un registre vàlid.
- move <registre Cia/Custom>,sr serà executat incorrectament si intenta canviar la part supervisor del
registre d'estat, la part de supervisor romandrà sense canvis
- Qualsevol instrucció (ssp)+ o -(ssp) en conjunt amb un accés d'escriptura a un registre CIA o Custom
no pot ser gestionat degut a problemes de marc de pila, en aquest cas, WHDLoad detectarà tals accessos i acabarà amb el
quadre de diàleg apropiat
- Les instruccions no han d'accedir més d'un registre controlat per Snoop al mateix temps; això significa que codi com
move.b ($dff006),($bfd800) no pot ésser gestionat. Si té lloc una situació com aquesta, WHDLoad mostrarà un
diàleg de Falla d'Accés