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

Snooping

Qu'est ce c'est ?

Snooping est une caractéristique de WHDLoad qui enregistre tous les accès CPU aux registres spécialisés (Custom). Si Snoop est activé, tous les accès invalides aux registres Custom créeront un Access Fault et le programme installé sera terminé. WHDLoad affichera une fenêtre de requête expliquant les raisons de la faute.

Les registres Custom

Tous les accès en lecture et écriture aux registres Custom sont vérifiés. Les accès invalides sont: Les registres Strobe peuvent être lus et écrits. La validité des registres Custom varient en fonction des Amigas OCS (Old ChipSet - A500, A1000, ancien A2000), ECS (Enhanced ChipSet - A600, récent A2000, A3000) et AGA (Advanced Graphics - A1200, A4000). Ceci est utile pour localiser les bugs dans les anciens programmes qui causent des accès indéfinis aux nouveaux registres AGA.

En utilisant la fonction resload_Control et les drapeaux WHDLTAG_CUST_DISABLE/READ/STROBE/WRITE, la configuration interne de WHDLoad dont les registres sont en mode lecture/écriture peuvent être modifiés. Les accès invalides peuvent être ignorés ou les accès valides peuvent être détectés. Cette fonction doit seulement être utilisée au cours du développement, et non pour une version publique du slave.

Les registres CIA

Les accès des registres CIA sont seulement vérifiés en écriture. Ceci implique que les accès en lecture à des registres inexistants compris dans la zone de mémoire entre $bfd000...$bfefff ne seront pas détectés. Pour tous les accès en écriture, les valeurs seront enregistrées en interne par WHDLoad. Pour quelques registres CIA, il y a des vérifications spéciales dépendant de la valeur écrite:

adresse registre vérification
$bfe001 ciaa.ciapra mettre à 1 le bit #0 Overlay est interdit
$bfe201 ciaa.ciaddra les bits #6-7 peuvent avoir une valeur quelconque (utilisés pour le joypad), les bits inférieurs doivent contenir %000011
$bfe801 ciaa.ciatodlow les accès en read-modify-write (ex. bchg) ne sont pas permis si le bit ALARM est mis à 1 dans ciaa.ciacrb (seulement vérifié sur 68060)
$bfe901 ciaa.ciatodmid
$bfea01 ciaa.ciatodhi
$bfed01 ciaa.ciaicr les accès en read-modify-write (ex. bchg) ne sont pas permis (seulement vérifié sur 68060)
$bfd100 ciab.ciaprb les bits pour MOTOR #7, SELECT #3-6 and STEP #0 doivent pas être mis à 0, les autres bits peuvent être changés; comme ceci tout accès au lecteur de disquette sera détecté
$bfd200 ciab.ciaddra la valeur écrite doit être %11000000
$bfd300 ciab.ciaddrb la valeur écrite doit être %11111111
$bfd800 ciab.ciatodlow les accès read-modify-write (ex. bchg) ne sont pas permis si le bit ALARM est mis à 1 dans ciab.ciacrb (seulement vérifié sur 68060)
$bfd900 ciab.ciatodmid
$bfda00 ciab.ciatodhi
$bfdd00 ciab.ciaicr les accès read-modify-write (ex. bchg) ne sont pas permis (seulement vérifié sur 68060)

Comment ça marche

Si Snoop est activé, WHDLoad marque les adresses des registres Custom comme invalide/protégé en écriture dans l'arbre de traduction MMU. Donc chaque accès à un registre Custom aura comme résultat un Access Fault exception. Cette exception sera prise en main par WHDLoad. D'abord, il vérifie que l'accès est valide. Si l'accès est invalide le programme sera terminé. Si l'accès est valide et que c'est un accès en lecture, il sera émulé et l'exécution du programme continuera. Si c'est un accès en écriture, WHDLoad sauvegarde la valeur qui devait être écrite avant l'émulation.
Le programme exécuté sera ralenti car les exceptions et l'émulation prennent le dessus. Le ralentissement dépend du type de CPU, du type de mémoire chip (16/32 Bit), de l'alignement du pointeur de la pile, si la mémoire chip est 32 Bit (LongWord aligné ou non). Cela diffère aussi suivant le type d'accès (Byte/Word/LongWord, Read/Write). Sur le 68030, l'Ecriture est plus rapide que la Lecture (car pour la lecture, le stackframe est de 92 octets, pour l'écriture, 32 octets), pour le 68060, la Lecture est plus rapide parce que l'émulation pour l'écriture est plus complexe.

Le mode Fast Snoop

L'option Snoop/S active le Snooping rapide. Les accès à la lecture ne seront pas vérifiés. Aucune vérification spéciale ne sera effectuée. Ce mode est utile seulement pour recueillir les informations contenues dans les registres Custom, ex. pour capturer l'image de l'écran en utilisant SP.

Le scanner de la Copper-Liste

Depuis la version 13 de WHDLoad, les copper-listes sont aussi vérifiées. Le scanner sera activé en accès écriture aux registres coplc, si le copper dma est activé, ou quand le programme installé active le copper dma en inscrivant dans le registre dmacon. Le scanner suit les copper-listes et valide toutes les instructions Move en appliquant les restrictions causées par l'option Snoop (OCS/ECS/AGA). Les instructions Skip et Wait (sauf CEND) seront ignorées. Quand il trouve des entrées invalides, le programme installé sera terminé. Le scanner suit les branches (copjmp), détecte les boucles et vérifie jusqu'à 16 sous-listes. Les Moves dans les copper-listes seront sauvegardés dans le fichier interne de stockage des registres Custom créé par WHDLoad quand il sera quitté. Le scanner est inactif dans le mode Fast Snoop.

Vérification des pointeurs audio

Quand cette option ChkAudPt/S est activée, WHDLoad vérifiera que le programme installé écrira seulement des adresses valides dans les registres Custom des pointeurs DMA audio. Valide signifie que le pointeur doit se trouver dans la BaseMem et être différent de 0 (zéro). Ces vérifications sont faites uniquement pour des accès en mots longs Pour des mots, il n'y aura pas de contrôle. Cette option peut être utile pour localiser certains problèmes dans les replay routines audio.

Vérification de la priorité du Blitter

Quand l'option ChkBltHog/S est activé, WHDLoad vérifiera que le programme installé n'active pas le bit BltHog en inscrivant dans le registre dmacon. La priorité du Blitter peut causer des problèmes sur certain matériel en conjonction avec de larges opérations Blitter (tous canaux utilisés).

Vérification de la taille du Blitter

Quand l'option ChkBltSize/S est activé, WHDLoad vérifiera que le travail du Blitter n'accède pas à la mémoire en dehors de la BaseMem. Pour les accès en écriture à bltsize or bltsizh, il vérifiera si le mode ligne est activé dans bltcon1. Si le mode ligne est activé, il annulera la vérification de la taille. Autrement WHDload calculera le premier et le dernier mot d'accès pour chaque canal DMA activé. Si une adresse est en dehors de la BaseMem, le programme sera terminé par un message. Le calcul a été conçu pour fonctionner avec tous les modes (montant/descendant, modulos positive/négative, modulos/pointeur impairs).
Attention: le mode "line drawing" ne sera pas vérifié et tous les registres du blitter peuvent aussi être inscrits par le copper, si copcon est activé.

Vérification du Blitter Wait

Quand l'option ChkBltHog/S est activé, WHDLoad utilisera une instruction trace pour vérifier que le programme installé attend correctement que le blitter ait fini son travail avant d'en commencer un autre. Une variable interne sera utilisée, elle représente l'état de marche du Blitter. La variable est activée s'il se produit un accès en écriture dans bltsize ou bltsizh et effacée quand il y a un accès en lecture dans dmaconr. A chaque écriture dans le registre du Blitter, la valeur de la variable interne est vérifiée, si l'état est un travail du Blitter, le programme installé sera terminé et WHDLoad rapportera la ligne de code du dernier travail du Blitter et l'accès actuel.
Il y a 2 goulets majeurs. Le premier est l'utilisation du Blitter via le copper ne sera pas vérifiée et le second est l'emploi des interruptions du Blitter qui provoquera des erreurs superflues dans la routine de vérification.

Vérification de Color Burst

Quand cette option ChkColBst/S est activée, WHDLoad vérifiera pour chaque écriture au registre custom.bplcon0 que le bit color est mis à l'état 1. Certains hardware, spécialement les flickerfixers, requièrent que le bit soit mis à 1 pour l'activation de la sortie du signal vidéo. Pour de meilleurs compatibilités, ce bit doit toujours être activé. Les vérifications sont effectués en écriture directe dans custom.bplcon0 et dans les copper-listes.

Vérification du contrôle du Copper

Quand l'option ChkCopCon/S est activée, WHDLoad vérifie pour chaque écriture au registre custom.copcon que le bit #1 soit mis à 1. Ce bit permet au Copper qu'il puisse accéder aux registres du Blitter en écriture. Ceci peut être parfois utile afin de détecter si le programme installé utilise le Copper pour contrôler des opérations DMA.

Futur

L'implémentation des caractéristiques comme le Freezing et l'Iconifing est en projet. Pour cela, Snoop est primordial. Par conséquent, il est recommandé aux auteurs d'installs de vérifier leurs installs avec l'option Snoop pour garantir une compatibilité future.

Ce que vous avez besoin

Un MMU est nécessaire pour utiliser les options Snoop. Ainsi WHDLoad doit utiliser le MMU, par conséquent l'option MMU/S doit être activée sur les machines à base 68030.

Limitations


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