Snooping

Τι είναι

Το Snooping είναι ένα χαρακτηριστικό του WHDLoad που πραγματοποιεί ελέγχους και καταγραφές προσβάσεων στους καταχωρητές Custom και Cia. Αν η Snoop έχει ενεργοποιηθεί όλες οι άκυρες προσβάσεις θα δημιουργήσουν Access Fault και το εγκατεστημένο πρόγραμμα θα τερματιστεί. Τέτοιες προσβάσεις είναι: Οι καταχωρητές Strobe μπορούν να διαβαστούν ή να γραφούν. Το σετ των έγκυρων καταχωρητών Custom μπορεί να διαφέρει μεταξύ του OCS (Old ChipSet - A500, A1000, παλιά A2000), ECS (Enhanced ChipSet - A600, νέα A2000, A3000) και AGA (Advanced Graphics - A1200, A4000). Αυτό είναι χρήσιμο ειδικά για τον εντοπισμό bugs σε παλιά προγράμματα που προκαλούνται από απροσδιόριστες προσβάσεις σε νέους καταχωρητές AGA.

Πως λειτουργεί

Αν ενεργοποιηθεί το Snoop, το WHDLoad σημειώνει τις διευθύνσεις των καταχωρητών custom και cia ως άκυρες στο δέντρο μετάφρασης του MMU. Λόγω αυτού, κάθε πρόσβαση σε καταχωρητή custom ή cia θα έχει σαν αποτέλεσμα μία εξαίρεση Access Fault. Ο χειριστής εξαιρέσεων στο WHDLoad χειρίζεται αυτή την εξαίρεση. Πρώτα ελέγχει αν η πρόσβαση είναι έγκυρη. Αν η πρόσβαση είναι άκυρη το πρόγραμμα θα τερματιστεί. Αν η πρόσβαση είναι έγκυρη και πρόκειται για λειτουργία ανάγνωσης θα εξομοιωθεί και η εκτέλεση του προγράμματος συνεχίζεται. Αν πρόκειται για λειτουργία εγγραφής το WHDload επιπλέον θα αποθηκεύσει την τιμή σε μία εσωτερική καταχώρηση.
Λόγω της επιβάρυνσης στη διαδικασία εξαίρεσης και εξομοίωσης η ταχύτητα εκτέλεσης του προγράμματος θα καθυστερήσει. Πόσο θα καθυστερήσει εξαρτάται από το CPU, το τύπο μνήμης Chip (16/32-bit) και το Stackpointer alignment αν η μνήμη Chip είναι 32-bit (LongWord aligned ή όχι). Διαφέρει επίσης ανάλογα το τύπο πρόσβασης (Byte/Word/LongWord, Read/Write). Στον 68030 οι Εγγραφές είναι γρηγορότερες από τις Αναγνώσεις (γιατί στις αναγνώσεις το stackframe είναι 92 bytes στις εγγραφές 32 bytes), στον 68060 οι Αναγνώσεις είναι γρηγορότερες γιατί η εξομοίωση για τις Εγγραφές είναι ποιό πολύπλοκη.

Fast Snoop Mode

Η επιλογή Snoop/S ενεργοποιεί το γρήγορο snooping. Οι προσβάσεις Ανάγνωσης δεν θα ελεγχθούν. Δεν πραγματοποιούνται ειδικοί έλεγχοι. Αυτό το mode ίσως είναι χρήσιμο για να πάρετε μόνο δεδομένα από τους καταχωρητές custom, π.χ. για αποθήκευση μίας εικόνας χρησιμοποιώντας το SP.

Copper List Scanner

Από την έκδοση 13 του WHDLoad θα ελεχθούν επίσης και copperlists. Ο scanner θα ενεργοποιηθεί σε εγγραφές στους καταχωρητές coplc αν το copper dma είναι ενεργό, ή όταν το εγκατεστημένο πρόγραμμα ενεργοποιεί το coppper dma γράφοντας το καταχωρητή dmacon. Ο scanner ακολουθεί τη copperlist και επιβεβαιώνει όλες τις εντολές Move εφαρμόζοντας τους περιορισμούς που ορίστηκαν από την επιλογή Snoop (OCS/ECS/AGA). Οι εντολές Skip και Wait (εκτός CEND) θα αγνοηθούν. Όταν βρει άκυρες καταχωρήσεις το εγκατεστημένο πρόγραμμα θα τερματιστεί. Ο scanner ακολουθεί τα branches (copjmp), ανιχνεύει loops και ελέγχει μέχρι 16 υπο-λίστες. Οι εντολές Move στα copperlists θα αποθηκευτούν στο εσωτερικό αρχείο καταχωρητή custom που γίνεται dump στην έξοδο του WHDLoad. Ο scanner δεν είναι ενεργός στο Fast Snoop Mode.

Blitter Priority Check

Όταν ενεργοποιηθεί η επιλογή ChkBltHog/S το WHDLoad θα ελέγξει να μην ενεργοποιήσει το εγκατεστημένο πρόγραμμα το BltHog bit γράφοντας στο καταχωρητή dmacon. Το Blitter Priority μπορεί να προκαλέσει προβλήματα σε μερικούς συνδυασμούς hardware σε σε συνδυασμό με μεγάλες λειτουργίες blitter (να χρησιμοποιούνται όλα τα κανάλια).

Blitter Size Check

Όταν η επιλογή ChkBltSize/S ενεργοποιηθεί το WHDLoad θα ελέγξει να μην προσπελάσουν μνήμη έξω από τη περιοχή BaseMem οι εργασίες του Blitter. Σε προσβάσεις εγγραφής στα bltsize ή bltsizh ελέγχει αν είναι ενεργοποιημένο το line mode στο bltcon1. Αν το line mode είναι ενεργό θα ακυρώσει τον έλεγχο μεγέθους. Διαφορετικά το WHDLoad θα υπολογίσει την πρώτη και την τελευταία word που έχει πρόσβαση για κάθε ενεργοποιημένο κανάλι DMA. Αν μια διεύθυνση είναι έξω από τη περιοχή BaseMem το πρόγραμμα θα τερματιστεί με έναν επιλογέα. Ο υπολογισμός είναι σχεδιασμένος να λειτουργήσει με όλα τα modes (ascending/descending, positive/negativ modulos, odd modulos/pointers).
Θυμιθείτε ότι το line drawing mode δεν θα επιβεβαιωθεί και όλοι οι καταχωρητές του blitter μπορούν επίσης να γραφούν από τον copper εάν οριστεί η copcon.

Blitter Wait Check

Όταν ενεργοποιηθεί η επιλογή ChkBltWait/S το WHDLoad θα χρησιμοποιήσει μία ανίχνευση εντολών για επιβεβαίωση ότι το εγκατεστημένο πρόγραμμα περιμένει κανονικά το blitter να τελειώσει πριν ξεκινήσει μία νέα εργασία του blitter. Χρησιμοποιεί μία εσωτερκή μεταβλητή που αντιπροσωπεύει την τρέχουσα κατάσταση του blitter. Η μεταβλητή ορίζεται όταν μία πρόσβαση εγγραφής συμβαίνει στο bltsize ή bltsizh και καθαρίζει όταν πραγματοποιείται πρόσβαση ανάγνωσης στο καταχωρητή dmaconr. Σε κάθε εγγραφή σε καταχωρητή του blitter η τιμή της εσωτερικής μεταβλητής ελέγχεται, αν δείχνει μία τρέχουσα εργασία του blitter το εγκατεστημένο πρόγραμμα τερματίζεται και το WHDLoad θα αναφέρει το PC της τελευταίας εργασίας του blitter που ξεκίνησε μαζί με την τρέχουσα πρόσβαση.
Υπάρχουν δύο σοβαρές επιβαρύνσεις με αυτό το χαρακτηριστικό. Πρώτον η χρήση του blitter μέσω του copper δεν ελέγχονται και δεύτερον η χρήση των blitter interrupts θα προκαλέσει τη ρουτίνα ελέγχου να αναφέρει σφάλματα που δεν θα έπρεπε.

Μέλλον

Σχεδιάζεται να υλοποιηθούν χαρακτηριστικά όπως Freezing και Iconifing. Για αυτά, το Snoop είναι απαραίτητη προϋπόθεση. Οπότε συνίσταται οι συγγραφείς εγκαταστάσεων να ελέγχουν τις εγκαταστάσεις τους με το Snoop για να σιγουρέψουν μελλοντική συμβατότητα.

Απαιτήσεις

Ένα MMU απαιτείται για το χαρακτηριστικό Snoop. Επίσης το WHDLoad πρέπει να χρησιμοποιεί ο MMU, οπότε η MMU/S πρέπει να έχει ενεργοποιηθεί σε μηχανήματα με 68030.

Περιορισμοί