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

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à activat, tots els accessos invàlids crearan una Falla d'Accés i el programa instal·lat acabarà. WHDLoad mostrarà un diàleg indicant el motiu de l'error.

Registres Custom

Es verifiquen tots els accessos de lectura/escriptura als registres Custom. Els accessos no vàlids son : 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.

Emprant la funció resload_Control i els tags WHDLTAG_CUST_DISABLE/READ/STROBE/WRITE es pot modificar la configuració interna de WHDLoad que estableix quins registres són de lectura/escriptura. Amb això, es poden ignorar els accesos il.legals o detectar els que són legals. Això només s'hauria d'utilitzar durant el procés de desenvolupament i no en Esclaus alliberats al públic.

Registres CIA

Als registres CIA només es verifica l'accés d'escriptura. Això vol dir que els accessos de lectura a registres inexistents a l'àrea de memòria $bfd000...$bfefff no seràn detectats. Per a tots els accessos d'escriptura, el valor escrit serà guardat internament per WHDLoad. Per a alguns registres CIA s'estableixen comprovacions especials depenent del valor que s'ha escrit :

adreça registre comprovació
$bfe001 ciaa.ciapra Es prohibeix establir el bit #0 d'Overlay.
$bfe201 ciaa.ciaddra Els bits #6-7 poden tenir qualsevol valor (emprats per al joypad) mentre que els bits inferiors han d'ésser %000011
$bfe801 ciaa.ciatodlow No es permeten accessos de lectura-escriptura-modificació (p.ex. bchg) si el bit ALARM está establert a ciaa.ciacrb (només es comprova als 68060)
$bfe901 ciaa.ciatodmid
$bfea01 ciaa.ciatodhi
$bfed01 ciaa.ciaicr No es permeten accessos de lectura-modificació-escriptura (p.ex.: bchg) (només es comprova als 68060)
$bfd100 ciab.ciaprb No s'han d'esborrar els bits de MOTOR #7, SELECT #3-6 i STEP #0, es poden canviar altres bits; així, es detectarà qualsevol accés a les unitats de disc (floppy drives).
$bfd200 ciab.ciaddra El valor escrit ha de ser %11000000
$bfd300 ciab.ciaddrb El valor escrit ha de ser %11000000
$bfd800 ciab.ciatodlow No es permeten accessos de lectura-escriptura-modificació (p.ex. bchg) si el bit ALARM está establert a ciaa.ciacrb (només es comprova als 68060)
$bfd900 ciab.ciatodmid
$bfda00 ciab.ciatodhi
$bfdd00 ciab.ciaicr No es permeten accessos de lectura-escriptura-modificació (p.ex. bchg. Només es comprova als 68060)

Com funciona?

Si Snoop està activat, WHDLoad marca les adreces dels registres Custom i CIA com a invàlides/protegides contra escriptura 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à les llistes del Copper 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 a les llistes copper es desen a l'emmagatzematge intern de registres Custom que es bolca en sortir de WHDLoad. L'analitzador no es troba actiu al mode Snoop Ràpid.

Comprovació de l'apuntador d'àudio

Quan s'activa l'opció ChkAudPt/S WHDLoad comprovarà que el programa instal.lat escrigui només adreces vàlides als apuntadors Custom d'àudio DMA. Per vàlid s'entén que l'apuntador ha d'estar dintre BaseMem i ésser diferent de 0. Només es comproven operacions d'escriptura de longs; l'escriptura de paraules (words) no es comprova. Aquesta comprovació pot ésser útil per a rutines de reproducció d'àudio.

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).
Tingui en compte 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.

Comprovació de ràfega de color

Quan s'activa l'opció ChkColBst/S WHDLoad comprova que el bit de color estigui activat a cada escriptura al registre custom.bplcon0. Algun maquinari, especialment flickerfixers, requereixen l'activació d'aquest bit per a treure un senyal de vídeo adequat. Per a millor compatibilitat sempre s'hauria d'activar aquest bit. Es comproven les escriptures directes a custom.bplcon0 i les escriptures via llistes de copper.

Comprovació de Control del Copper

Quan s'activa l'opció ChkCopCon/S, WHDLoad comprova a cada escriptura al registre custom.copcon que el bit #1 no s'hagi establert. Aquest bit activa la capacitat del Copper d'escriure als registres del Blitter. Pot resultar útil a vegades per detectar si hi ha programes que empren el Copper per a controlar activitats DMA.

El futur

S'ha planejat implementar funcionalitats tals com Congelat i Iconificat. Per a les mateixes, Snoop és un requeriment. 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


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