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

Snooping - Παρατήρηση

Τι είναι

Η παρατήρηση (Snooping) είναι ένα χαρακτηριστικό του WHDLoad που πραγματοποιεί ελέγχους και καταγραφές προσβάσεων στους καταχωρητές Custom και CΙΑ. Αν η Snoop έχει ενεργοποιηθεί όλες οι άκυρες προσβάσεις θα δημιουργήσουν ένα Access Fault και το εγκατεστημένο πρόγραμμα θα τερματιστεί. Το WHDLoad θα εμφανίσει ένα μήνυμα με τον λόγο του σφάλματος.

Custom καταχωρητές

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

Χρησιμοποιώντας την λειτουργία resload_Control και τις ετικέτες WHDLTAG_CUST_DISABLE/READ/STROBE/WRITE η εσωτερική διαμόρφωση του WHDLoad όπου οι καταχωρητές είναι αναγνώσιμοι/εγγράψιμοι μπορούν να τροποποιηθούν. Με αυτό οι μη αποδεκτές προσβάσεις μπορούν να παραβλεθούν ή οι μη αποδεκτές προσβάσεις να εντοπιστούν. Αυτό θα πρέπει να χρησιμοποιηθεί μόνο κατά την διαδικασία ανάπτυξης και όχι στην δημόσια κυκλοφορία των Slaves.

CΙΑ καταχωρητές

Στους καταχωρητές CΙΑ επιβεβαιώνονται μόνο οι προσβάσεις εγγραφής. Αυτό σημαίνει ότι οι προσβάσεις ανάγνωσης σε μη υπάρχοντες καταχωρητές στη περιοχή μνήμης $bfd000...$bfefff δεν θα εντοπιστούν. Για όλες τις προσβάσεις εγγραφής η τιμή που εγγράφεται θα αποθηκευτεί εσωτερικά από το WHDLoad. Για κάποιους καταχωρητές CΙΑ υπάρχουν ειδικοί ελέγχοι ανάλογα την τιμή που γράφεται:

διεύθυνση καταχωρητής έλεγχος
$bfe001 ciaa.ciapra ο ορισμός του Overlay bit #0 απαγορεύεται
$bfe201 ciaa.ciaddra τα bits #6-7 μπορούν να έχουν οποιαδήποτε τιμή (χρησιμοποιείται για joypad), τα χαμηλότερα bits πρέπει να είναι %000011
$bfe801 ciaa.ciatodlow οι προσβάσεις ανάγνωσης-αλλαγής-εγγραφής (e.g. bchg) δεν επιτρέπονται εάν το ALARM bit έχει οριστεί στο ciaa.ciacrb (ελέγχεται μόνο σε 68060)
$bfe901 ciaa.ciatodmid
$bfea01 ciaa.ciatodhi
$bfed01 ciaa.ciaicr οι προσβάσεις ανάγνωσης-αλλαγής-εγγραφής (e.g. bchg) δεν επιτρέπονται (ελέγχεται μόνο σε 68060)
$bfd100 ciab.ciaprb τα bits για MOTOR #7, SELECT #3-6 και STEP #0 δεν πρέπει να καθαριστούν, άλλα bits μπορούν να αλλάξουν. Με αυτά οποιαδήποτε πρόσβαση στα floppy drives θα εντοπιστεί
$bfd200 ciab.ciaddra η τιμή που γράφεται πρέπει να είναι %11000000
$bfd300 ciab.ciaddrb η τιμή που γράφεται πρέπει να είναι %11111111
$bfd800 ciab.ciatodlow οι προσβάσεις ανάγνωσης-αλλαγής-εγγραφής (e.g. bchg) δεν επιτρέπονται εάν το ALARM bit έχει οριστεί στο ciab.ciacrb (ελέγχεται μόνο σε 68060)
$bfd900 ciab.ciatodmid
$bfda00 ciab.ciatodhi
$bfdd00 ciab.ciaicr οι προσβάσεις ανάγνωσης-αλλαγής-εγγραφής (e.g. bchg) δεν επιτρέπονται (ελέγχεται μόνο σε 68060)

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

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

Λειτουργία Γρήγορης Παρατήρησης

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

Σαρωτής Copper List

Από την έκδοση 13 του WHDLoad θα ελεχθούν επίσης και οι copperlists. Ο σαρωτής θα ενεργοποιηθεί σε εγγραφές στους καταχωρητές COPLC αν το copper DMA είναι ενεργό, ή όταν το εγκατεστημένο πρόγραμμα ενεργοποιεί το copper DMA γράφοντας τον καταχωρητή DMACON. Ο σαρωτής ακολουθεί τις copperlists και επιβεβαιώνει όλες τις εντολές Move εφαρμόζοντας τους περιορισμούς που ορίστηκαν από την επιλογή Snoop (OCS/ECS/AGA). Οι εντολές Skip και Wait (εκτός CEND) θα αγνοηθούν. Όταν βρει άκυρες καταχωρήσεις το εγκατεστημένο πρόγραμμα θα τερματιστεί. Ο σαρωτής ακολουθεί τα branches (COPJMP), ανιχνεύει loops και ελέγχει μέχρι 16 υπο-λίστες. Οι εντολές Move στις copperlists θα αποθηκευτούν στο εσωτερικό αρχείο καταχωρητή Custom που γίνεται αρχείο ένδειξης στην έξοδο του WHDLoad. Ο σαρωτής δεν είναι ενεργός στην Λειτουργία Γρήγορης Παρατήρησης.

Έλεγχος Audio Pointer

Όταν η επιλογή ChkAudPt/S είναι ενεργοποιημένη, το WHDLoad θα ελέγξει ότι το εγκατεστημένο πρόγραμμα γράφει μόνο έγκυρες διευθύνσεις στους δείκτες της Custom Audio DMA. Έγκυρες σημαίνει ότι ο δείκτης πρέπει να βρίσκεται ανάμεσα στην BaseMem και να μην ισούνται με 0. Ελέγχονται μόνο οι λειτουργίες εγγραφής long. Οι εγγραφές word δεν ελέγχονται. Αυτός ο έλεγχος μπορεί να είναι χρήσιμος για εντοπισμό προβλημάτων στις ρουτίνες αναπαραγωγής ήχου.

Έλεγχος Blitter Priority

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

Έλεγχος Blitter Size

Όταν η επιλογή ChkBltSize/S ενεργοποιηθεί το WHDLoad θα ελέγξει να μην προσπελάσουν μνήμη έξω από τη περιοχή BaseMem οι εργασίες του Blitter. Σε προσβάσεις εγγραφής στα BLTSIZE ή BLTSIZH ελέγχει αν είναι ενεργοποιημένη η λειτουργία γραμμής (line mode) στο BLTCON1. Αν η line mode είναι ενεργή θα ακυρώσει τον έλεγχο μεγέθους. Διαφορετικά το WHDLoad θα υπολογίσει την πρώτη και την τελευταία word που έχει πρόσβαση για κάθε ενεργοποιημένο κανάλι DMA. Αν μια διεύθυνση είναι έξω από τη περιοχή BaseMem το πρόγραμμα θα τερματιστεί με ένα παράθυρο επιλογής. Ο υπολογισμός είναι σχεδιασμένος να λειτουργήσει με όλα τις λειτουργίες (αύξουσα/φθίνουσα, θετικά/αρνητικά modulos, περιττούς modulos/pointers).
Προσέξτε ότι η λειτουργία σχεδιασμού γραμμής (line drawing) δεν θα επιβεβαιωθεί και όλοι οι καταχωρητές του blitter μπορούν επίσης να γραφούν από τον copper εάν οριστεί η COPCON.

Έλεγχος Blitter Wait

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

Έλεγχος Color Burst

Όταν η επιλογή ChkColBst/S είναι ενεργοποιημένη, το WHDLoad ελέγχει ότι σε κάθε εγγραφή στον custom.bplcon0 καταχωρητή, το color bit ορίζεται. Ορισμένα hardware, ειδικά τα flickerfixer απαιτούν αυτό το bit να ορίζεται για να δώσουν ένα κατάλληλο σήμα βίντεο. Για καλύτερη συμβατότητα αυτό το bit θα πρέπει να είναι πάντα ορισμένο. Ελεχγένα είναι οι άμεσες εγγραφές στο custom.bplcon0 και γράφονται μέσω των copperlists.

Έλεγχος Copper Control

Όταν η επιλογή ChkCopCon/S είναι ενεργοποιημένη, το WHDLoad ελέγχει ότι σε κάθε εγγραφή στον custom.copcon καταχωρητή, το bit #1 δεν έχει οριστεί. Αυτό το bit ενεργοποιεί την δυνατότητα του Copper να γράψει στους καταχωρητές του Blitter. Μπορεί μερικές φορές να είναι χρήσιμο να εντοπίσεις αν τα προγράμματα χρησιμοποιούν τον Copper για να ελέγχουν τις δραστηριότητες της DMA.

Μέλλον

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

Απαιτήσεις

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

Περιορισμοί


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