WHDLoad ja MMU

### WHDLoad ja muistinhallintayksikkö (MMU)

Seuraavissa 68000-perheen suorittimissa on MMU: 68030, 68040, 68060. Suorittimista on myös ns. EC-versioita, joissa on rikkinäinen, pois kytketty MMU. Esimerkiksi kaikissa vakiomallin A4000/030-koneissa on vain 68EC030-suoritin. Ulkopuolisten rakentamissa kiihdytinkorteissa tämä vaihtelee, katso tarkemmat tiedot ohjeista. Tietääkseni kaikki Amigoissa käytetyt 68040/68060-suorittimet ovat täydellisiä ja sisältävät toimivan MMU:n (koska burstmode ja Zorro III vaativat IO-alueen MMU-ohjauksen). Kokonaista suoritinta ja EC-versiota ei voida erottaa ohjelmallisesti (ainakaan hyväksyttävässä ajassa). Siksi käyttäjän on tehtävä se asettamalla WHDLoadille oikeat valinnat.
68020:lle on saatavilla ulkoinen MMU 68851, mutta WHDLoad ei tällä hetkellä tue sitä.

#### MMU:n ominaisuudet ja käyttö WHDLoadissa

MMU:n tärkein tarkoitus on muuntaa loogiset osoitteet fyysisiksi. Tämä vaaditaan virtuaalimuistille sekä erillisille osoiteavaruuksille (esim. suojatussa moniprosessijärjestelmässä). Toinen ominaisuus on kyky määrittää erikoisominaisuuksia kuiten Supervisor Only, Write Protected ja Caching-tila jokaiselle fyysiselle osoiteavaruudelle (sivupohjaisesti, jossa WHDLoadin käyttämä sivu on 4096 tavua). WHDLoad ei käytä loogisten osoitteiden muuntoa fyysiseksi. Se käyttää MMU:ta muistin suojaukseen, välimuistin hallintaan sekä erikoistoimintoihin (Snooping, resload_Protect#?).

#### Muistin suojaus WHDLoadissa

Käynnistettäessä WHDLoad tarkistaa muistilistan ja rakentaa käännöspuun, johon kuuluu kaikki käytettävissä oleva muisti. Se merkitsee seuraavat osoiteavaruudet kelvollisiksi ja käytettäviksi: $0...BaseMem (perustuen Slaven tietoihin), $dff000...$dff200 (Custom-rekisterit), $bfd000...$bff000 (Cia-rekisterit) sekä Slaven ja WHDLoadin käyttämä muisti. Jos muistista löytyy jäädytysohjelma, myös sen käyttämä muisti merkitään kelvolliseksi. Kaikki muu muisti merkitään epäkelvoksi, ja tällaisen alueen käyttö (luku tai kirjoitus) luo Access Fault Exception -poikkeuksen ja tuottaa WHDLoadin kautta sopivan virheilmoituksen.

#### Käyttäjän ohjaus WHDLoadin MMU-käsittelyyn

WHDLoad voi vaikuttaa MMU:hun kolmella eri tavalla.

1. ohita MMU:
   Tässä tilassa WHDLoad ei muuta MMU:n rekistereitä. Tämä voi olla hyödyllistä, jos käynnissä olevat ohjelmat kuormittavat MMU:ta ja haluat niiden toiminnan pysyvän ennallaan (esim. TK:n kaltainen ohjelmistopohjainen jäädytysohjelma).
   Varoitus: Koska WHDLoad ei ohjaa MMU:ta itse, voi ilmetä paljon ongelmia. Ongelmat voivat aiheuttaa kaatumista, väärää toimintaa tai muuta ennustamatonta käytöstä. Tässä on lueteltuna joitakin riskejä:
   - Enforcerin/CyberGuardin tai vastaavan työkalun käyttäminen jumittaa/kaataa koneen, koska WHDLoad luo useita Hittejä joka kerta, kun käyttöjärjestelmä kytketäään pois ja päälle. Nämä eivät ole WHDLoadin bugeja vaan normaalia toimintaa.
   - uudemmat 68060.libraryn versiot (alkaen v41.1:stä) siirtävät muistiosoitteet $0-$1000 (ensimmäisen sivun) Fast-muistiin MMU:n avulla. MMU:n ohitustilassa tämä osoitemuunnos jää voimaan, ja jos asennettu ohjelma yrittää käyttää tätä aluetta DMA-toimintoihin (esim. copperlistiin), lopputuloksia ei voi ennustaa, sillä suoritin lukee ja kirjoittaa Fast-muistia kun taas DMA toimii Chip-muistissa, jossa voi olla mitä tahansa tietoa.
   - jos käynnissä oleva MMU-ohjelma vaatii toimivan poikkeuskäsittelijän ("Access Fault" -poikkeus), on valinta NoTrapHandler/S aktivoitava, sillä muuten WHDLoad käsittelee poikkeukset ja asennettu ohjelma lopetetaan, jos ei-toivottuja asioita tapahtuu
   - jos käynnissä oleva MMU-ohjelma käyttää muistia (poikkeuskäsittelijä, käännöspuu jne.) asennetun ohjelman BaseMemin sisällä, se voi kaatua, sillä BaseMem ylikirjoitetaan (tilapäisesti) asennetun ohjelman suorituksen aikana
   - yleisesti ottaen jokainen ohjelma, joka muuttaa järjestelmän perustoimintoja (MMU:lla) voi olla ristiriidassa WHDLoadin kanssa...
2. kytke MMU pois:
   Tässä tilassa, jota voidaan käyttää vain 68030:llä, WHDLoad kytkee MMU:n pois päältä eikä MMU-toimintoja ole käytettävissä.
3. käytä MMU:ta:
   Tässä tilassa WHDLoad ottaa MMU:n täysin käyttöönsä ja toteuttaa muistinsuojauksen ja välimuistin hallinnan yllä kuvatulla tavalla.

68030:llä oletustila on kytke MMU pois. 68040/68060:llä oletus on käytä MMU:ta. Käytöstä voidaan ohjata kahdella valinnalla. MMU/S pakottaa WHDLoadin käyttämään MMU:ta ja se vaaditaan 68030:llä, jotta MMU-ominaisuudet saadaan käyttöön. NoMMU/S kytkee WHDLoadin MMU:n käytön pois(ohita MMU).

Enforcer hit on Enforcer hit, se siitä. (Michael Sinz)