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

Comment ça marche

Si Snoop est activé, WHDLoad marque les adresses des registres Custom comme valide 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'emulation 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 verification spéciale ne sera éffectué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 la copper-liste 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 des registres Custom créé par WHDLoad quand il sera quitté. Le scanner est inactif dans le mode Fast Snoop.

Vérification de la priorité du Blitter

Quand l'option ChkBltHogs/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 large 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/descandant, modulos positive/négative, modulos/pointeur impairs).
Souvenez-vous que le mode "line drawing" ne sera pas vérifié et que tous les registres du blitter peuvent aussi être inscrits par le copper, si copcon est activé.

Vérification du Blitter Wait

Quand l'option ChkBltWait/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.

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