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

Snooping

Wat Snooping is

Snooping is een functie van WHDLoad die bijhoud en een bestand aanmaakt, waarin de lees en schrijf operaties naar de Custom en CIA -registers genoteerd zijn die in een programma gebruikt zijn. Als Snoop is geactiveerd zullen alle ongeldige toegangen een toegangs fout creëren en het geïnstalleerde programma wordt dan beëindigd. WHDLoad laat een venster zien die uitlegt wat de reden van deze fout is.

Custom registers

Alle lees en schrijf toegangen naar de customchipregisters worden gecontroleerd. Ongeldige toegangen zijn: Strobe registers kunnen gelezen of beschreven worden. De reeks van geldige customchip registers kunnen variëren tussen OCS (Oude ChipSet - A500, A1000, oude A2000), ECS (Enhanced ChipSet - A600, nieuwe A2000, A3000) en AGA (Advanced Graphics Adapter - A1200, A4000). Dit is handig en speciaal om fouten te ontdekken in oude programma's veroorzaakt door ongedefinieerde toegangen tot nieuwe AGA registers.

Gebruikmakend van de functie resload_Control en de tags WHDLTAG_CUST_DISABLE/READ/STROBE/WRITE de interne configuratie van WHDLoad welke registers lees/schrijf -baar zijn kunnen gemodificeerd zijn. Met dit, kunnen illegale toegangen genegeerd worden of legale toegangen kunnen gedetecteerd worden. Dit zal alleen gebruikt worden tijdens het ontwikkelen van installs en niet voor gewoon gebruik.

CIA registers

Op de CIA registers worden alleen schrijf toegangen geverifieerd Dit betekend dat lees toegangen naar niet bestaande registers in het geheugen gebied van $bfd000...$bfefff niet worden gedetecteerd. Voor alle schrijf toegangen word de geschreven waarde intern weggeschreven door WHDLoad. Voor sommige CIA registers zijn daar speciale controles voor, afhankelijk van de geschreven waarde:

adres register controle
$bfe001 ciaa.ciapra het zetten van de Overlay bit op #0 is verboden
$bfe201 ciaa.ciaddra bits #6-7 kunnen elke waarde hebben (gebruikt met een joypad), lagere bits moeten zijn %000011
$bfe801 ciaa.ciatodlow lees-modificeer-schrijf toegangen (bijv. bchg) zijn niet toegestaan als ALARM bit is ingesteld in ciaa.ciacrb (alleen gecontroleerd op een 68060)
$bfe901 ciaa.ciatodmid
$bfea01 ciaa.ciatodhi
$bfed01 ciaa.ciaicr lees-modificeer-schrijf toegangen (bijv. bchg) zijn niet toegestaan (alleen gecontroleerd op een 68060)
$bfd100 ciab.ciaprb de bits voor MOTOR #7, SELECT #3-6 en STEP #0 moeten niet leeggehaald worden, andere bits kunnen veranderd worden; met dit kunnen alle toegangen tot diskette drives gedetecteerd worden
$bfd200 ciab.ciaddra de geschreven waarde moet zijn %11000000
$bfd300 ciab.ciaddrb de geschreven waarde moet zijn %11111111
$bfd800 ciab.ciatodlow lees-modificeer-schrijf toegangen (bijv. bchg) zijn niet toegestaan als ALARM bit is ingesteld in ciab.ciacrb (alleen gecontroleerd op een 68060)
$bfd900 ciab.ciatodmid
$bfda00 ciab.ciatodhi
$bfdd00 ciab.ciaicr lees-modificeer-schrijf toegangen (bijv. bchg) zijn niet toegestaan (alleen gecontroleerd op een 68060)

Hoe werkt het

Als Snoop geactiveerd is, markeert WHDLoad de adressen van de custom en CIA registers als ongeldig of beveiligd tegen schrijven in de MMU vertaalboom. Hierom resulteert elke toegang naar een custom of CIA register in een Toegangs Fout uitzondering. De uitzondering handler in WHDLoad behandelt deze uitzondering. Eerst controleert het of de toegang geldig is. Als de toegang ongeldig is wordt het programma beëindigd. Als de toegang geldig is en het een lees operatie is dan word het geëmuleerd en word de programma uitvoer hervat. Als het een schrijf operatie is zal WHDLoad extra de waarden schrijven naar een interne opslag.
Om de overhead van de uitzondering en de emulatie volgorde word de programma uitvoer langzamer. Hoeveel langzamer ligt aan het; processor type, Chip geheugen type (16/32-bit) en Stackpointer gepositioneerd als de ChipGeheugen 32-bit is (Longword gepositioneerd of niet). Het verschilt ook voor de toegangs type (Byte/Word/LongWord, Lezen/Schrijven). Op de 68030 is Schrijven sneller dan lezen (omdat bij lezen de stack frame 92 bytes is en bij schrijven 32 bytes), op de 68060 is lezen sneller omdat de emulatie voor schrijven meer complex is.

Snelle Snoop Mode

De optie Snoop/S activeert de snelle snooping. Lees toegangen worden niet gecontroleerd. Geen speciale controles worden uitgevoerd. Deze mode kan handig zijn om alleen de inhoud van Custom registers te verkrijgen, bijv. om een plaatje weg te schrijven met SP.

CopperLijst Scanner

Vanaf versie 13 van WHDLoad worden ook copperlijsten zelf gecheckt. De scanner word geactiveerd tijdens het schrijven naar de coplc registers als de copper dma geactiveerd is, of wanneer het geïnstalleerde programma de copper dma activeert door het schrijven van het dmacon register. De scanner volgt de copperlijsten en valideert alle verplaats instructies door restricties toe te passen veroorzaakt door de Snoop optie (OCS/ECS/AGA). Sla over en Wacht instructies worden genegeerd (behalve CEND). Wanneer het ongeldige notities vindt, word het geïnstalleerde programma beëindigd. De scanner volgt takken (copjmp), detecteert loops en checkt tot wel 16 sublijsten. De Verplaatsingen in de copperlijst worden weggeschreven in de interne Customregister storage wat word gedumpt bij het verlaten van WHDLoad. De scanner is niet actief in de Snelle Snoop Mode.

AudioPointer Check

wanneed de optie ChkAudPt/S is geactiveerd, WHDLoad zal dan de install controleren of het alleen juiste adressen naar de Custom Audio DMA pointers schrijft. Juiste adressen houd in dat het binnen het BaseMem valt en ongelijk is aan 0. Er worden alleen lange schrijf operaties gechecked. Het schrijven van words wordt niet gechecked. Deze controle kan handig zijn met problemen in audioreplay routines.

BlitterPrioriteit Check

Wanneer de optie ChkBltHog/S is geactiveerd zal WHDLoad checken of het geïnstalleerde programma niet BltHog activeert door het schrijven naar de dmacon register. De Blitter prioriteit kan problemen veroorzaken op sommige hardware configuraties in samenwerking met grote blitter operaties (alle kanalen gebruikt.)

BlitterGrote Check

Wanneer de optie ChkBltSize/S is geactiveerd zal WHDLoad controleren dat blitter werkzaamheden niet toegang krijgen tot geheugen buiten het BaseMem gebied. Tijdens schrijf toegangen naar bltsize of bltsizh controleert het of de regel mode is ingeschakeld in bltcon1. Als de regel mode actief is verbreekt het de grote controle. Anders zal WHDLoad de toegang van het eerste en laatste word berekenen voor elke geactiveerde DMA kanaal. Als er één adres buiten het BaseMem gebied bevind zal het programma worden gestopt met een keuze venster. De berekening is ontworpen om te werken met alle modes (stijgend/dalend, positieve/negatieve modulos, oneven modulos/verwijzing).
Houd rekening met dat de regel teken mode niet geverifieerd word en dat alle blitter registers ook geschreven worden door de copper als copcon is ingeschakeld.

BlitterWacht Check

Als de optie ChkBltWait/S is geactiveerd zal WHDLoad een instructie spoor gebruiken om te verifiëren dat het geïnstalleerde programma correct wacht op de blitter om te stoppen voordat het start met een nieuwe blitter operatie. Het gebruikt een interne variabele welke de werkende staat van de blitter vertegenwoordigd. De variabele is ingeschakeld wanneer een schrijf toegang naar de bltsize of bltsizh plaatsvind en leeggemaakt word wanneer lees toegang naar het dmaconr register is uitgevoerd. Op elke schrijven naar een blitter register word de interne variabele gecontroleerd, als het een draaiende blitter operatie constateert, word het geïnstalleerde programma gestopt en zal WHDLoad de ProgramCounter van de laatst gestarte blitter operatie samen met de eigenlijke toegang rapporteren.
Er zijn twee grote knelpunten met deze functie. Ten eerste blitter gebruik via de copper is niet gecontroleerd en ten tweede het gebruik van blitter interrupts zorgt ervoor dat de controle routine fouten rapporteert die niet nodig zijn.

KleurBurst Check

Wanneer de optie ChkColBst/S is geactiveerd, controleert WHDLoad bij elk schrijven naar de custom.bplcon0 register of de color bit is gezet. Sommige hardware met name flickerfixers hebben nodig dat deze bit gezet is zodat er een juist videosignaal afgeven word. Voor de beste compatibiliteid moet deze bit altijd gezet zijn. Direct schrijven naar custom.bplcon0 en schrijven via copperlijsten worden gecontroleerd.

CopperControl Check

Wanneer de optie ChkCopCon/S is geactiveerd, dan controleerd WHDLoad of elk schrijven naar de code>custom.copcon register de bit #1 niet gezet is. Deze bit zorgt er voor als gezet dat de Copper naar de Blitter registers kan schrijven. Het is soms handig om te detecteren of programma`s de Copper gebruiken om de DMA activiteiten aan te sturen.

Toekomst

Het is de bedoeling om eigenschappen toe te voegen zoals Freezing en Iconifing. Van deze, is Snoop een benodigheid. Daarom is het aanbevolen voor Install auteurs om hun Installs te controleren met Snoop om toekomstige compatibiliteit te waarborgen.

Benodigdheden

Een MMU is nodig voor de Snoop functie. Ook moet WHDLoad de MMU gebruiken, daarom moet MMU/S geactiveerd zijn met 68030 machines.

Beperkingen


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