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

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. WHDLoad vil vise en requester der fortæller om fejlen.

Custom registers

Al læse og skrive adgang til custom registrerne er verificeret. Sådanne adgange er: 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.

Cia registre

På Cia registrer er det kun skrive adgang der verificeres. Dette betyder at læse adgang til ikke eksisterende rigistre i hukommelses området $bfd000...$bfefff ikke bliver opdaget. For al skrive adgang vil den skrevne værdi blive gemt internt af WHDLoad. For nogle Cia registre er der specielle kontroller afhængig af den skrevne værdi:

addresse register check
$bfe001 ciaa.ciapra Det er forbudt at sætte Overlay bit #0
$bfe201 ciaa.ciaddra bitsene #6-7 kan have enhver værdi (bruges til joypad), lavere bits skal være %000011
$bfe801 ciaa.ciatodlow læse-modificere-skrive adgang (f.eks bchg) er ikke tilladt hvis ALARM bit er sat i ciaa.ciacrb (Kontrolleres kun på 68060)
$bfe901 ciaa.ciatodmid
$bfea01 ciaa.ciatodhi
$bfed01 ciaa.ciaicr læse-modificere-skrive adgang (f.eks. bchg) er ikke tilladt (kontrolleres kun på 68060)
$bfd100 ciab.ciaprb bitsene for MOTOR #7, SELECT #3-6 og STEP #0 må ikke slettes, andre bits kan ændres; dermed vil al adgang til floppy drevene blive detekteret
$bfd200 ciab.ciaddra værdien der skrives skal være %11000000
$bfd300 ciab.ciaddrb værdien der skrives skal være %11111111
$bfd800 ciab.ciatodlow læse-modificere-skrive adgang (f.eks. bchg) er ikke tilladt hvis ALARM bit er sat i ciab.ciacrb (kontrolleres kun på 68060)
$bfd900 ciab.ciatodmid
$bfda00 ciab.ciatodhi
$bfdd00 ciab.ciaicr læse-modificere-skrive adgang (f.eks. bchg) er ikke tilladt (kontrolleres kun på 68060

Hvordan det virker

Hvis Snoop er slået til, markerer WHDLoad adresserne af custom og cia registrene som ugyldige/skrive-beskyttet i MMU oversættelses 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


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