WHDLoad és az MMU

### WHDLoad és a Memory Managment Unit (MMU)

MMU a következő processzorokban található: 68030, 68040, 68060. Ezeknek van egy úgynevezett EC verziójuk, amiben egy nem működő MMU van. Például minden standard A4000/030-ben csak egy 68EC030 CPU van. Ez más processzorkártyáknál változhat, nézd meg a dokumentációjukat. Én úgy tudom, hogy az összes Amigába épített 68040/68060 teljes CPU, ami tartalmaz egy működő MMU-t (mivel a burstmode és a Zorro III igényli az IO terület MMU vezérlését). A különbségtétel a teljes és az EC verzió között szoftveres úton nem oldható meg (legalábbis elfogadható időn belül). Ezért ezt a felhasználónak kell megtennie megfelelő opciók alkalmazásával.
A 68020-as részére van egy külső MMU, a 68851, de ezt a WHDLoad jelenleg nem támogatja.

#### Az MMU jellemzői és használata a WHDLoad-ban

Az MMU fő feladata a logikai címek lefordítása fizikai címekre. Ez szükséges a virtuális emóriához és a különválasztott címzésterekhez (például egy védett többfeladatos rendszerben). Másik jellemzője, hogy olyan speciális tulajdonságokat, mint a Supervisor Only, Write Protected és Cache módok, tud beállitani minden fizikai címterülethez (laponként, ahol a WHDLoad egy 4096 byte méretű lapot használ). A WHDLoad nem használ logikaiból fizikai címre fordítást. De használja az MMU-t memóriavédelemhez, cache kezeléshez és néhány speciális lehetőséghez: (Figyelés, resload_Protect#?).

#### Memóriavédelem a WHDLoad-ban

Indításnál a WHDLoad átnézi a memórialistát és felépíti a fordítási fát, amely az összes elérhető memóriát tartalmazza. Elérhetőnek jelöli ki a következő címterületeket: $0...BaseMem (a Slave információi alapján), $dff000...$dff200 (Saját regiszterek), $bfd000...$bff000 (Cia regiszterek) és a Slave és a WHDLoad á;ltal használt memóriát. Ha a Leállító megtalálható a memóriában, az általa használt memória is érvényesnek lesz beállítva. Minden más memória érvénytelennek lesz jelölve, és a hozzáférés (Olvasás vagy Írás) ezekhez a területekhez Access Fault Exception hoz létre, ami a WHDLoad által generált hibakérdezőben jelenik meg.

#### Az MMU kezelés felhasználói beállítása a WHDLoad-ben

3 különböző módon hat a WHDLoad a meglévő MMU-ra.

1. MMU mellőzése:
   Ebben a módban a WHDLoad nem változtat meg egy MMU-hoz kötődő regisztert sem. Ez hasznos lehet, ha egy olyan programot használsz, amely használja az MMU-t és meg akarod őrizni a program funkcióit (például ilyen a szoftveres leállító TK).
   Figyelem: mivel a WHDLoad nem maga vezérli az MMU-t, sok hiba előfordulhat. Ezek a problémák összeomlásokat, hibás működést vagy egyéb nem belátható következményeket okozhatnak. Itt a létező veszélyek listája:
   - Enforcer/CyberGuard vagy hasonló program futtatása leállíthatja a gépet, mivel a WHDLoad nagyon sok jelzést generál amikor ki/bekapcsolja a rendszert. Ezek nem hibák, hanem a normális működés részei.
   - 68060.library új verziói (v41.1-el kezdődően) átrakják a $0-$1000 memóriát (az első lapot) a Fast memóriába az MMU segítségével, "MMU mellőzése" módban ez a címfordítás érvényes marad, és ha az installált program bármilyen DMA műveletet (pl. egy copperlistát ezen a területen) hajt végre, az eredmény nem lesz előrelátható, mivel a CPU egy Fast memóriahelyet fog olvasni mialatt a DMA valódi Chip memóriája véletlenszerű adatokat fog tartalmazani.
   - ha a futó MMU a kivét kezelőjétől függ ("Access Fault" kivét), akkor a NoTrapHandler/S opciót be kell kapcsolni, egyébként minden kivétet a WHDLoad fog kezelni, ami kilép minden nem várt dolog esetén
   - ha az MMU valamilyen memóriát (kivét kezelő, fordítási fa, ...) használ az installált program BaseMem területén, össze fog omlani, mivel a BaseMem felül lesz írva az installált program végrehajtása során (ideiglenesen)
   - általánosságban minden olyan program amely a rendszer alapvető funkcióit változtatja meg (az MMU-t használva), összeakadhat a WHDLoad-dal ...
2. MMU kikapcsolva:
   Ebben a módban, amely 68030-ason lehetséges, az MMU ki lesz kapcsolva, az MMU specifikus lehetőségek sem érhetőek el.
3. MMU használata:
   Ebben a módban a WHDLoad átveszi a teljes irányítást az MMU felett és beállítja a memoriavédelmet és a cache kezelést a fent leírtak alapján.

68030on az alapértelmezett mód az MMU kikapcsolva. 68040/68060-on az alapértelmezett az MMU használatban. Két opció vezérli ezt a visekedést. MMU/S kötelezi a WHDLoad-ot az MMU használatára és 68030-as rendszereken ez szükséges az MMU lehetőségek használatához. NoMMU/S kikapcsolja az MMU használatát: a WHDLoad (mellőzi az MMU-t).

Egy Enforcer hit az egy Enforcer hit, pont. (Michael Sinz)