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

Snooping

Hvad er det?

Snooping er en funktion i WHDLoad, der udfører validering og logging af tilgange til de brugerdefinerede og CIA-registrene. Hvis Snoop er aktiveret, vil alle ugyldige tilgange skabe en AdgangsFejl og det installerede program vil blive afsluttet. WHDLoad vil vise en forespørger, der forklarer årsagen til fejlen.

Brugerdefinerede registre

Al læse- og skrivetilgang til de brugerdefinerede registre bliver verificeret. Ugyldige adgange er: Strobe-registre kan læses og skrives. Sættet af gyldige brugerdefinerede registre varierer mellem OCS (Old ChipSet - A500, A1000, old A2000), ECS (Enhanced ChipSet - A600, new A2000, A3000) and AGA (Advanced Graphics - A1200, A4000). Dette er især brugbart til at lokalisere fejl i gamle programmer, forårsaget af udefinerede adgange til nye AGA-registre.

Brug af funktionen resload_Control og tags'ene WHDLTAG_CUST_DISABLE/READ/STROBE/WRITE sætter i den interne konfiguration af WHDLoad, hvilke registre der er læsbare/skrivbare og kan modificeres. Med denne kan ugyldige tilgange ignoreres eller gyldige adgange detekteres. Dette bør kun bruges i udviklingsprocessen og ikke i offentligt publicerede Slaver.

CIA-registre

Med CIA-registrene verificeres kun skrivetilgange. Det betyder at læsetilgange til ikke-eksisternde registre i hukommelsesområdet $bfd000...$bfefff ikke vil blive detekteret. For alle skrivetilgange vil den skrevne værdi blive gemt internt af WHDLoad. For nogle CIA-registre er der specielle checks afhængig af den skrevne værdi:

adresse register check
$bfe001 ciaa.ciapra sætning af Overlay bit'en #0 er forbudt
$bfe201 ciaa.ciaddra bits #6-7 kan have en hvilken som helst værdi (brugt til joypad), lavere bits skal være %000011
$bfe801 ciaa.ciatodlow læs-modificér-skrive tilgange (f.eks. bchg) er ikke tilladte hvis ALARM-bit er sat i ciaa.ciacrb (kun checket på 68060)
$bfe901 ciaa.ciatodmid
$bfea01 ciaa.ciatodhi
$bfed01 ciaa.ciaicr læs-modificér-skrivetilgange (f.eks. bchg) er ikke tilladt (kun checket på 68060)
$bfd100 ciab.ciaprb bits'ene til MOTOR #7, SELECT #3-6 og STEP #0 må ikke cleares, andre bits kan ændres; med dette vil alle tilgange til floppydrevene blive detekteret
$bfd200 ciab.ciaddra den skrevne værdi skal være %11000000
$bfd300 ciab.ciaddrb den skrevne værdi skal være %11111111
$bfd800 ciab.ciatodlow læs-modifiér-skrive tilgange (f.eks. bchg) er ikke tilladt hvis ALARM-bit'en er sat i ciab.ciacrb (kun checket på 68060)
$bfd900 ciab.ciatodmid
$bfda00 ciab.ciatodhi
$bfdd00 ciab.ciaicr læs-modificér-skrivetilgange (f.eks. bchg) er ikke tilladt (kun checket på 68060)

Hvordan det virker

Hvis Snoop er aktiveret, markerer WHDLoad adresserne på de brugerdefinerede registre og CIA-registrene som værende ugyldige/skrivebeskyttede i MMU-oversættelsestræet. På grund af dette vil hver tilgang til et brugerdefineret eller CIA-register resultere i en AdgangsFejl-undtagelse. Undtagelseshåndtereren i WHDLoad håndterer denne undtagelse. Først checker den, om tilgangen er gyldig. Hvis tilgangen er ugyldig, vil programmet blive termineret. Hvis tilgangen er gyldig og er en læseoperation, vil den blive emuleret og program-eksekveringen fortsætter. Hvis det er en skrive-operation, gemmer WHDLoad ydermere den skrevne værdi til et internt lager.
Fordi undtagelsens og emulerings-sekvensens overhead vil program-eksekveringen gå ned i hastighed. Hvor meget afhænger af CPU-typen, Chiphukommelsestypen (16/32-bit) og Stackpointer justering hvis Chiphukommelsen er 32-bit (LangtOrd justeret eller ej). Forskelle gør sig også gældende for tilgangstypen (Byte/Ord/LangtOrd, Læs/Skriv). På 68030'eren er skrivninger hurtigere end læsninger (fordi ved læsninger er stackrammen 92 bytes og på skrivninger 32 bytes), på 68060'eren er læsninger hurtigere pga. emuleringen til skrivninger er mere kompleks.

Hurtigt Snoop-Modus

Optionen Snoop/S aktiverer den hurtige snooping. Læsetilgange vil ikke blive checket. Ingen specielle checks udføres. Dette modus kan være brugbart til kun at få indhold fra de brugerdefinerede registre, f.eks. for at gemme et billede vha. SP.

Kobber Liste Scanner

Siden version 13 af WHDLoad vil også kobberlister i sig selv blive checket. Scanneren blive aktiveret ved skrivninger til coplc-registrene, hvis kobber-DMA er aktiveret, eller når det installerede program aktiverer kobber-DMA'en ved skrivning til dmacon-registret. Scanneren følger kobberlisterne og validerer alle Move-instruktioner ved at sætte begrænsningerne forårsaget af Snoop-optionen (OCS/ECS/AGA). Skip og Wait (bortset frat CEND)-instruktioner vil blive ignoreret. Når den finder ugyldige indgange vil det installerede program blive terminateret. Scanneren følger grene (copjmp), detekcterer loops og checker op til 16 underlister. Moves'ene i kobberlister vil blive gemt i det interne brugerdefinerede register-lager, hvilke dumpes ved afslutning af WHDLoad. Scanneren er ikke aktiv i Fast Snoop-Modus.

Audio Pointer Check

Når optionen ChkAudPt/S er aktiveret, vil WHDLoad checke, at det installerede program kun skriver gyldige adresser til de brugerdefinerede audio DMA pointere. Gyldig betyder, at pointeren skal være indeni BaseMem og forskellig fra 0. Kun lange skriveoperationer checkes. Ord-skrivninger bliver ikke checket. Dette kan være nyttigt til at lokalisere problemer i audio-afspilningsrutiner.

Blitter Prioritets Check

Når optionen ChkBltHog/S er aktiveret, vil WHDLoad checke, at det installerede program ikke aktiverer BltHog bit'en ved en skrivning til dmacon-registret. Blitter-Prioriteten kan forårsage problemer i nogle hardware- konfigurationer i forbindelse med store blitter-operationer (alle kanaler i brug).

Blitter Size Check

Når optionen ChkBltSize/S er aktiveret vil WHDLoad checke, at blitter-jobs ikke tilgår noget hukommelse udenfor BaseMem-området. Ved skrivetilgange til bltsize eller bltsizh checker den om linje-modus'et er aktiveret i bltcon1. Hvis linje-modus'et er aktivt, vil den afbryde størrelses-checket. I modsat fald vil WHDLoad beregne det første og det sidste ord, der skal tilgås for hver aktiveret DMA-kanal. Hvis én adresse er udenfor BaseMem-området, vil program blive termineret med en forespørger. Beregningen er designet til at fungere med alle moduser (stigende/faldende, positiv/negativ modulos, ulige modulos/pointere).
Vær opmærkstom på, at linjetegnings-moduset ikke vil blive verificeret, og at alle blitter-registre også kan skrevet af kobberet, hvis copcon er sat.

Blitter-Vent Check

Når optionen ChkBltWait/S er aktiveret, vil WHDLoad bruge et instruktionsspor til at verificere, at det installerede program venter korrekt på, at blitteren gør sit job færdigt, før den starter et nyt blitter-job. Den bruger en intern variabel, som repræsenterer blitterens arbejdsstade. Variablen bliver sat, når en skrivetilgang til bltsize'en eller bltsizh'en finder sted og bliver clearet, når læsetilgang til dmaconr-registret er udført. Ved hver skrivning til et blitter-register bliver den interne variabels værdi checket; hvis den angiver et kørende blitter-job vil det installerede program blive termineret og WHDLoad vil rapportere PC'en for det sidst startede blitter-job, sammen med den aktuelle tilgang.
Der er to større flaskehalse ved denne funktion. For det førstet bliver blitter-brug via kobberet ikke checket og for det andet vil brugen af blitter-afbrydelser forårsage, at check-rutinen rapporterer fejl, uden at dette er nødvendigt.

Farve-Burst Check

Når optionen ChkColBst/S er aktiveret, checker WHDLoad - ved hver skrivning til custom.bplcon0-registret - at color bit'en er sat. Nogle typer hardware, især flickerfixer, kræver, at denne bit er sat for at udsende et korrekt videosignal. For bedst kompatibilitet bør denne bit altid være sat. Direkte skrivninger til custom.bplcon0 bliver checket; ligeledes gør skrivninger, via kobberlister.

Cobber Kontrol Check

Når optionen ChkCopCon/S er aktiveret, checker WHDLoad ved hver skrivning til custom.copcon-registret, at bit #1 ikke er sat. Denne bit aktiverer Kobberets mulighed for at skrive til Blitter- registrene. Det kan sommetider være nyttigt at detektere, om programmer bruger Kobberet til at kontrollere DMA-aktiviteter.

Fremtid

Det er planlagt at implementere funktioner såsom Freezing og Ikonificering. For disse er Snoop et krav. Derfor anbefales det for install-udgivere at checke sine installs med Snoop for at sikre fremtidig kompatibilitet.

Krav

En MMU er krævet til Snoop-funktionen. WHDLoad skal også bruge MMU'en, derfor skal en MMU/S være aktiveret på 68030- maskiner.

Begrænsninger


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