[Main]
[Docs]
[Installs]
[Search]
[Team]
[Guestbook]
[Links]
Minnesøk (Snooping)
Hva er det
Minnesøk er en funksjon ved WHDLoad som utfører kontroll og loggføring av
tilgang til de tilpassede (Custom) og Cia-registrene. Hvis
Snoop er aktivert vil alle ugyldige
tilganger generere en tilgangsfeil og det installerte programmet vil
bli avsluttet. Slike tilganger er:
- tilgang til ikke-eksisterende registre
- lesetilgang til kun skrivbare (Write Only) registre
- skrivetilgang til kun lesbare (Read Only) registre
- tilgang til tidlig lesbare (Early Read) registre
- byte-skrivetilgang (untatt bltcon0l og aud*vol+1)
Puls-registre (Strobe registers) kan leses eller skrives. Mengeden gyldige
tilpassede registre kan varigere mellom OCS (eldre brikkesett (Old ChipSet)
- A500, A1000, eldre A2000) ECS (Forbedret brikkesett (Enhanched ChipSet) -
A600, nyere A2000, A3000) og AGA (avansert grafikk (Advanced Graphics) -
A1200, A4000). Dette er nyttig spesielt for å lokalisere feil i gamle
programmer skapt av udefinerte tilganger til nye AGA-registre.
Hvordan det virker
Hvis Snoop er slått på, markerer WHDLoad adressene til de tilpassede registrene og
cia-registrene som ugyldige i MMU'ens oversettertre. På grunn av dette vil hver
tilgang til et tilpasset eller Cia-register resultere i et tilgangsfeil-unnttak.
Unntaksbehandleren i WHDLoad behandler dette unntaket. Først kontrollerer den om
tilgangen er gyldig. Hvis tilgangen er ugyldig vil progammet avsluttes. Hvis tilgangen
er gyldig og det er en leseoperasjon vil denne emuleres og programkjøringen
fortsettes. Hvis det er en skriveoperasjon vil WHDLoad i tillegg lagre den skrevne
verdien i et internt lager.
På grunn av ekstraforbruket av unntaket og emuleringsekvensen vil
programkjøringen sakke ned. Hvor mye det sakkes er avhengig av CPU-typen,
Chip-minnetypen (16/32-bits) og om Stakkpeker-oppstillingen i Chip-minnet
er 32-bit (LongWord-oppstilt eller ikke). Det er også forskjellig for
tilgangstyper (Byte/Word/LongWord, Lese/Skrive). På en 68030 er skriveoperasjoner
raskere enn leseoperasjoner (fordi ved lesing er stakkrammen 92 byte og ved
skriving 32 byte), på 68060 er lesing raskere fordi emuleringen av skriving
er mere avansert.
Rask søkemodus
Tilvalget Snoop/S slår på rask søking.
Lesetilganger vil ikke bli kontrollert. Ingen spesialkontroll blir
utført. Denne modusen kan være nyttig for å bare få innholdet i de
tilpassede registrene, f.eks. for å lagre et bilde med bruk av SP.
Copperliste-skanner
Siden versjon 13 av WHDLoad blir også selve copperlistene kontrollert. Skanneren
vil aktiveres ved skriving til coplc-registerene hvis copper
dma er slått på, eller når det installerte programmet slår på cppper dma ved
å skrive til dmacon registret. Skanneren følger copperlisten og
kontrollerer alle flytt-instruksjoner ved å legge til begrensinger skapt av
Snoop-valget (OCS/ECS/AGA). Hopp over- (Skip) og Vent- (Wait) instruksjoner
(unntatt CEND) vil ignoreres. Når den finner ugyldige poster vil det
installerte programmet avsluttes. Skanneren følger grenene (copjmp),
oppdager løkker og kontrollerer opptil 16 underlister. Flytt-operasjonene
i copperlister vil lagres i den interne tilpasset-register-filen som dumpes
ved avslutning av WHDLoad. Skanneren er ikke aktiv i Rask søkemodus.
Kontroll av Blitterprioritet
Når tilvalget ChkBltHog/S er aktivert vil WHDLoad kontrollere at det installerte
programmet ikke aktiverer BltHog-bit'en ved å skrive til dmacon-registeret.
Blitter-prioriteten kan lage problemer på noen maskinvarekonfigurasjoner sammen
med store blitteroperasjoner (alle kanaler i bruk)
Kontroll av Blitter-størrelse
Når tilvalget ChkBltSize/S er aktivert vil WHDLoad kontrollere at blitterjobber
ikke prøver å få tilgang til minne utenfor BaseMem-området. Ved skrivetilgang til
bltsize eller bltsizh kontrollerer den om linjemodus er aktivert
i bltcon1. Hvis linjemodusen er aktiv vil den avbryte størrelsekontrollen.
Ellers vil WHDLoad kalkulere første og siste word for tilgang på hver aktiverte
DMA-kanal. Hvis en av adressene er utenfor BaseMem-området blir programmet
avsluttet med en forespørsel. Kalkuleringen erdesignet for å virke med alle
moduser (stigende/synkende, positiv/negativ modulo, odde modulo/pekere).
Husk at linje-tegnemodusen ikke vil verifiseres og at alle blitterregistre
også kan skrives til hvis copcon er satt.
Blitter vente-kontroll
Når tilvalget ChkBltWait/S er aktivert vil WHDLoad bruke en
instruksjonssporing for å bekrefte at det installerte programmet venter
på at blitteren abslutter før den starter en ny blitterjobb. Den bruker en
intern variabel som representerer blitterens arbeidsstatus. Variabelen
settes når en skrivetilgang til bltsize eller bltsizh
inntreffer og tømmes når lesetilgang til dmaconr-registret utføres.
Ved hver skriving til et blitterregister blir verdien til den interne
variabelen kontrollert, hvis den tilsier en kjørende blitterjobb, vil det
installerte programmet avsluttes og WHDLoad vil rapportere PC'en til den
sist startede blitterjobben sammen med den aktuelle tilgangen.
Det er to store flaskehalser ved denne funksjonen. For det første
kontrolleres ikke blitterbruk via copper'en, og for det andre vil bruk
av blitteravbrudd føre til at kontrollrutinen rapporterer feil uten grunn.
Fremtid
Det er planlagt å implementere funksjoner som frysing og Ikonifisering.
Til dette er Søking en essensiell forutsetning. Derfor er anbefales det
at alle installerer-forfattere kontrollerer sin installerere med Søk for
å sikre fremtidig kompatibilitet.
Krav
En MMU er nødvendig for Søk-funksjonen. I tilleg må WHDLoad
bruke MMU'en, derfor må MMU/S være aktivert på 68030-maskiner.
Begrensinger
- 68020 + 68851
- denne maskinvaren støttes for tiden ikke
- 68030
- ingen kjente begrensinger
- 68040
- denne maskinvaren støttes for tiden ikke
- 68060
- movem-instruksjoner kan prøve å få tilgang til et ugyldig
register uten å generere et tilgangsfeil-unntak, dette er mulig fordi bare
den første tilgangen vil bli verifisert ved å matche mot et gyldig register
- move <Cia-/tilpasset register>,sr vil utføres ukorrekt
hvis den ønsker å endre overvåkingsdelen av statusregisteret, overvåkingsdelen
vil bli uforandret
- ingen (ssp)+ eller -(ssp) sammen med en skrivetilgang
til et Cia- eller tilpasset register kan utføres pga stakkramme-problemer,
WHDLoad vil oppdage slike tilganger og avslutte med en passende forespørsel.
- instruksjoner må ikke prøve å få tilgang til mer enn ett søket register
om gangen, det betyr at kode som move.b ($dff006),($bfd800) ikke kan
utføres, hvis slik kode inntreffer vil WHDLoad vise en tilgangsfeil-forespørsel.
[Main]
[Docs]
[Installs]
[Search]
[Team]
[Guestbook]
[Links]