Nuuskinta

Mitä se on

Nuuskinta on WHDLoadin toiminto, joka vahvistaa ja kirjaa Custom- ja Cia-rekistereiden käyttöä. Jos Snoop on aktivoituna, kaikki väärät käytöt luovat Access Faultin ja asennettu ohjelma pysäytetään. WHDLoad näyttää requester-ikkunan, joka selittää virheen syyn.

Custom-rekisterit

Kaikki custom-rekisterien luku- ja kirjoituskutsut varmistetaan. Virheellisiä kutsuja ovat: Strobe-rekistereitä voidaan lukea tai kirjoittaa. Kelvollisten Custom-rekisterien joukko eroaa sen mukaan, onko käytössä OCS (Old ChipSet - A500, A1000, vanha A2000), ECS (Enhanced ChipSet - A600, uusi A2000, A3000) vai AGA (Advanced Graphics - A1200, A4000). Tämä on hyödyllistä erityisesti etsittäessä vanhoista ohjelmista bugeja, jotka johtuvat määrittelemättömistä uusien AGA-rekisterien käytöistä.

Cia-rekisterit

Cia-rekisterien osalta varmistetaan vain kirjoituskutsut. Tämä tarkoittaa, että lukukutsuja olemattomiin rekistereihin muistialueella $bfd000...$bfefff ei havaita. WHDLoad tallentaa sisäisesti kaikkien kirjoituskutsujen kirjoitusarvon. Joillakin Cia-rekistereillä on erityisiä tarkistuksia riippuen kirjoitetusta arvosta:

osoite rekisteri tarkistus
$bfe001 ciaa.ciapra Overlay-bitin #0 asetus on kielletty
$bfe201 ciaa.ciaddra biteillä #6-7 voi olla mikä tahansa arvo (käytetään joypad-ohjaimelle), alempien bittien tulee olla %000011
$bfe801 ciaa.ciatodlow lue-muokkaa-kirjoita-kutsuja (esim. bchg) ei sallita, jos ALARM-bitti on asetettu ciaa.ciacrb:ssä (tarkistetaan vain 68060:lla)
$bfe901 ciaa.ciatodmid
$bfea01 ciaa.ciatodhi
$bfed01 ciaa.ciaicr lue-muokkaa-kirjoita-kutsuja (esim. bchg) ei sallita (tarkistetaan vain 68060:lla)
$bfd100 ciab.ciaprb bittejä MOTOR #7, SELECT #3-6 ja STEP #0 ei saa tyhjentää, muita bittejä voidaan muuttaa; tällä havaitaan levyasemien käyttö
$bfd200 ciab.ciaddra kirjoitetun arvon tulee olla %11000000
$bfd300 ciab.ciaddrb kirjoitetun arvon tulee olla %11111111
$bfd800 ciab.ciatodlow lue-muokkaa-kirjoita-kutsuja (esim. bchg) ei sallita, jos ALARM-bitti on asetettu ciab.ciacrb:ssä (tarkistetaan vain 68060:lla)
$bfd900 ciab.ciatodmid
$bfda00 ciab.ciatodhi
$bfdd00 ciab.ciaicr lue-muokkaa-kirjoita-kutsuja (esim. bchg) ei sallita (tarkistetaan vain 68060:lla)

Miten se toimii

Jos Snoop on käytössä, WHDLoad merkitsee custom- ja CIA-rekisterien osoitteet epäkelvoiksi/kirjoitussuojatuiksi MMU:n käännöspuuhun. Tämän vuoksi kukin custom- tai CIA-rekisterin käyttö aiheuttaa Access Fault -poikkeuksen. WHDLoadin poikkeuskäsittelijä käsittelee poikkeuksen. Ensin se tarkistaa, onko käyttö kelvollinen. Jos käyttö ei ole kelvollinen, ohjelma pysäytetään. Jos käyttö on kelvollinen ja lukuoperaatio, se emuloidaan ja ohjelman suoritus jatkuu. Jos se on kirjoitusoperaatio, WHDLoad tallentaa lisäksi kirjoitetun arvon sisäiseen taltioon.
Poikkeuksen ja emulointijakson tehonkulutuksen vuoksi ohjelman suoritus hidastuu. Hidastuminen riippuu suorittimen tyypistä, Chip-muistin tyypistä (16/32-bittinen) ja Stackpointerin kohdistuksesta 32-bittisessä Chip-muistissa (LongWord-kohdistettu vai ei). Se riippuu myös käytön tilasta (Byte/Word/LongWord, Luku/Kirjoitus). 68030:llä kirjoitus on nopeampaa kuin luku (koska luettaessa pinokehys on 92 tavua, kirjoitettaessa 32 tavua), 68060:llä luku on nopeampaa, koska kirjoituksen emulointi on mutkikkaampaa.

Fast Snoop -tila

Valinta Snoop/S ottaa nopean nuuskinnan käyttöön. Lukukäyttöjä ei tarkasteta. Erikoistarkastuksia ei tehdä. Tämä tila voi olla hyödyksi, jos halutaan custom-rekisterien sisältö, esim. kuvan tallentamiseen SP:llä.

Copper List -skanneri

WHDLoadin versiosta 13 alkaen myös copperlistat tarkistetaan. Skanneri käynnistyy, jos coplc-rekistereihin kirjoitetaan, copper DMA on käytössä tai jos asennettu ohjelma ottaa copper DMA:n käyttöön kirjoittamalla dmacon-rekisteriin. Skanneri seuraa copperlistaa ja tarkistaa kaikki Move-käskyt ottamalla huomioon Snoop-valinnan rajoitukset (OCS/ECS/AGA). Skip- ja Wait (paitsi CEND) -käskyt jätetään huomiotta. Kun se löytää epäkelpoja kirjauksia, asennettu ohjelma pysäytetään. Skanneri seuraa haaroja (copjmp), tunnistaa silmukat ja tarkistaa jopa 16 alilistaa. Copperlistien Move-käskyt tallennetaan sisäiseen custom-rekisteritiedostoon, joka dumpataan WHDLoadista poistuttaessa. Skanneri ei ole toiminnassa Fast Snoop -tilassa.

Blitterin prioriteettitarkastus

Kun valinta ChkBltHog/S on käytössä, WHDLoad tarkistaa, että asennettu ohjelma ei ota BltHog-bittiä käyttöön kirjoittamalla dmacon-rekisteriin. Blitterin prioriteetti voi aiheuttaa ongelmia tietyillä laitteistokokoonpanoilla suurten blitteritoimintojen yhteydessä (kaikki kanavat käytössä).

Blitterin kokotarkistus

Kun valinta ChkBltSize/S on käytössä, WHDLoad tarkistaa etteivät blitterin käskyt käytä muistia BaseMemin ulkopuolella. Kirjoitettaessa rekistereihin bltsize tai bltsizh se tarkistaa, onko viivatila käytössä bltcon1:ssä. Jos viivatila on käytössä, kokotarkistus peruutetaan. Muuten WHDLoad laskee kunkin aktivoidun DMA-kanavan ensimmäisen ja viimeisen sanan. Jos osoite on BaseMemin ulkopuolella, ohjelma pysäytetään ja saadaan ilmoitus. Laskutoimitus on suunniteltu toimimaan kaikissa tiloissa (nouseva/laskeva, positiivinen/negatiivinen modulo, parittomat modulot/osoittimet).
Muista, että viivanpiirtotilaa ei tarkisteta ja myös copper voi kirjoittaa kaikkiin blitterin rekistereihin, jos copcon on asetettu.

Blitterin odotustarkistus

Kun valinta ChkBltWait/S on käytössä, WHDLoad käyttää käskynseurantaa vahvistamaan, että asennettu ohjelma odottaa blitterin olevan valmis ennen uuden blitteritoiminnon aloittamista. Se käyttää sisäistä muuttujaa, joka edustaa blitterin työskentelytilaa. Muuttuja asetetaan, kun bltsize- tai bltsizh-rekisteriin kirjoitetaan ja tyhjennetään, kun dmaconr-rekisteri luetaan. Kullakin blitterirekisterin lukukerralla tarkastetaan sisäisen muuttujan arvo. Jos se ilmaisee käynnissä olevaa blitterioperaatiota, asennettu ohjelma pysäytetään ja WHDLoad ilmoittaa viimeisen käynnistetyn blitterioperaation PC:n itse toiminnon kanssa.
Tässä ominaisuudessa on kaksi merkittävää pullonkaulaa. Ensinnäkin copperin kautta tapahtuvaa blitterin käyttöä ei tarkisteta ja toisekseen blitterin keskeytysten käyttö aiheuttaa tarpeettomia virheilmoituksia.

Tulevaisuus

Suunnitelmissa on toteuttaa ominaisuuksia kuten pysäytys ja kuvakkeeksi pienennys. Näihin Snoop on tärkeä oletus. Siksi suositellaan, että asennusohjelmien tekijät tarkistavat asennusohjelmansa Snoopilla, jotta yhteensopivuus varmistuu myös tulevaisuudessa.

Vaatimukset

Snoop-toiminto vaatii MMU:n. WHDLoadin on myös käytettävä MMU:ta, joten MMU/S:n on oltava käytössä 68030-koneilla.

Rajoitukset