Snooping
Hvad er det
Snooping er en feature i WHDLoad som udfører validering og logning af adgang til
Custom og Cia registrene. Hvis Snoop er aktiveret
vil al ugyldig adgang generere en Access Fault og det installerede program vil
blive afsluttet. Sådanne adgange er:
- adgang til ikke eksisterende registre
- læse adgang til Write Only registre
- skrive adgang til Read Only registre
- adgang til Early Read registre
- byte skrive adgang (undtagen bltcon0l og aud*vol+1)
Strobe registre kan læses og skrives. Mængden af valid Custom registre kan
variere mellem OCS (Old ChipSet - A500, A1000, old A2000), ECS (Enhanced ChipSet
- A600, nye A2000, A3000) og AGA (Advanced Graphics - A1200, A4000). Dette er
specielt brugbart til at finde bugs i gamle programmer forudsaget af udefineret
adgang til nye AGA registre.
Hvordan det virker
Hvis Snoop er slået til, markerer WHDLoad adresserne af custom og cia registrene
som ugyldige i MMU translation træet. På grund af dette vil enhver adgang til et
custom eller cia register resultere i en Access Fault exception. Exception
handleren i WHDLoad håndterer denne. Først kontrollerer den om adgangen er gyldig.
Hvis adgangen er ugyldig bliver programmet afsluttet. Hvis adgangen er gyldig og
er en læse operation vil den blive emuleret og program eksekveringen fortsætter.
Hvis det er en skrive operation gemmer WHDLoad yderligere den gemte værdi til et
internt lager.
På grund af overheaded af exceptionen og den emulerede sekvens vil program
eksekveringen blive langsommere. Hvor meget langsommere den bliver afhænger af CPU
typen, Chip hukommelses typen (16/32-bit) og Stackpointer alignment hvis Chip
hukommelsen er 32-bit (LongWord aligned eller ikke). Den varierer også for adgangs
typen (Byte/Word/LongWord, læse/Skrive). På 68030'eren er det hurtigere at Skrive
end at Læse (fordi ved læsning er stackframen 92 bytes ved skrivning er den 32
bytes), på 68060'eren er læsning hurtigere fordi emuleringen af skrivning er mere
komplex.
Fast Snoop Mode
Indstillingen Snoop/S slår fast snooping til. Læse
adgang vil ikke blive kontrolleret. Der bliver ikke udført nogle specielle checks.
Denne tilstand er kun brugbar for at hente indhold fra custom registre f.eks. til at
gemme et billede ved hjælp af SP.
Copper List Scanner
Siden version 13 af WHDLoad bliver copperlists og så selv kontrolleret. Skanneren
vil blive aktiveret ved skrivninger til coplc registret hvis copper dma er
slået til, eller når det installerede program slår copper dma'et til ved at skrive
til dmacon registret. Skanneren følger copperlisten og validerer all Move
operationer ved at påtvinge de restriktioner der stammer fra Snoop indstillingen
(OCS/ECS/AGA). Spring over og vent (undtagen CEND) instruktioner vil blive ignoreret.
Når den finder ugyldige entries vil det installerede program blive afsluttet.
Skanneren følger forgreninger (copjmp), detekterer loop og kontrollerer op
til 16 sublister. Flytningerne i copperlisterne vil blive gemt i den interne custom
register fil som bliver dumpet når WHDLoad afslutter. Skanneren er ikke aktiv i Fast
Snoop tilstanden.
Blitter Priority Check
Når indstillingen ChkBltHog/S er aktiveret vil WHDLoad kontrollere at det installerede
program ikke slår BltHog bit'en til ved at skrive til dmacon registret.
Blitter Priority'en kan skabe problemer på nogle hardware konfigurationer i forbindelse
med store blitter operatoner (alle kanaler bruges.
Blitter Size Check
Når indstillingen ChkBltSize/S er aktiveret vil WHDLoad kontrollere at blitter job ikke
tilgår hukommelse udenfor BaseMem området. Ved skrive adgang til bltsize eller
bltsizh kontrollerer den om line tilstanden er aktiveret i bltcon1.
Hvis line tilstanden er aktiv vil den droppe size kontrollen. Ellers vil WHDLoad beregne
det første og det sidste word der skal tilgåes for hver aktiveret DMA kanal. Hvis en
adresse er udenfor BaseMem området vil programmet afslutte med en requester. Beregningen
er designet til at virke med alle tilstande (stigende/faldende, positive/negative modulos,
ulige modulos/pointers).
husk at linie tegnings tilstanden ikke vil blive verificeret og at alle blitter registre
også kan skrives til af copper hvis copcon er sat.
Blitter Wait Check
Når indstillingen ChkBltWait/S er aktiveret vil WHDLoad bruge et instructions trace til at
verificere at det installerede program korrekt venter på at blitteren afslutter før den
starter et nyt blitter job. Den bruger en intern variabel som repræsenterer blitterens
arbejdende tilstand. Denne variabel bliver sat når en skrive adgang til bltsize
eller bltsizh hænder og tømt når læse adgang til dmaconr registrene
bliver udført. Ved hver skrivning til et blitter register bliver værdien af den interne
variabel kontrolleret. Hvis den indikerer et igangværende blitter job bliver det
installerede program afsluttet og WHDLoad reportere PC'en og det senest startede blitter
job sammen med den aktuelle adgang.
Der er to store flaskehalse ved denne feature. For det første bliver blitter brug
gennem copper ikke kontrolleret og for det andet vil brugen af blitter interrupts få
kontrol rutinen til at reportere fejl uden at det er nødvendigt.
Fremtiden
Det er planen at implementere features som Freezing og Iconifing.
For disse er Snoop en essentiel antagelse. Derfor er det anbefalet at insallations
forfattere kontrollerer deres installation med Snoop for at sikre fremtidige kompatibilitet.
Krav
Det er nødvendigt med en MMU for at kunne bruge Snoop featuren. WHDLoad må også bruge MMU'en, derfor skal
MMU/S slås til på 68030 maskiner.
Begrænsninger
- 68020 + 68851
- denne hardware er ikke understøttet i øjeblikket
- 68030
- ingen kendte begrænsninger
- 68040
- denne hardware er ikke understøttet i øjeblikket
- 68060
- movem instruktioner kan godt få adgang til et ugyldigt register uden at
generere en Access Fault exception. Dette er muligt fordi kun den første adgang vil
blive verificeret om matcher et gyldigt register
- move <Cia/Custom register>,sr vil blive eksekveret ukorrekt hvis
den vil ændre overvågnings delen af status registeret. Overvågnings delen vil foblive
uændret
- enhver (ssp)+ eller -(ssp) i forbindelse med en skrive adgang
til et Cia eller Custom register kan ikke håndteres pga stackframe problemer. WHDLoad
vil opdage sådanne adgange og vil afslutte med en passende requester
- instruktioner må ikke tilgå mere end ét snooped register ad gangen. Dette betyder
at kode som move.b ($dff006),($bfd800) ikke kan håndteres. Hvis den slags kode
forekommer vil WHDLoad vise en Access Fault requester